New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 4152 for branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90 – NEMO

Ignore:
Timestamp:
2013-11-05T12:59:53+01:00 (10 years ago)
Author:
cetlod
Message:

merge in dev_LOCEAN_2013 the 2nd development branch dev_r3940_CNRS4_IOCRS, see ticket #1169

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2013/dev_LOCEAN_2013/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90

    r4148 r4152  
    2222   !!                          'mpp_lnk_bdy_2d' and 'mpp_lnk_obc_2d' routines and update 
    2323   !!                          the mppobc routine to optimize the BDY and OBC communications 
     24   !!            3.6  !  2013  ( C. Ethe, G. Madec ) message passing arrays as local variables  
    2425   !!---------------------------------------------------------------------- 
    2526 
     
    7273   PUBLIC   mppsize 
    7374   PUBLIC   mppsend, mpprecv                          ! needed by TAM and ICB routines 
    74    PUBLIC   lib_mpp_alloc   ! Called in nemogcm.F90 
    7575   PUBLIC   mpp_lnk_bdy_2d, mpp_lnk_bdy_3d 
    7676   PUBLIC   mpp_lnk_obc_2d, mpp_lnk_obc_3d 
     
    151151   REAL(wp), DIMENSION(:), ALLOCATABLE, SAVE :: tampon  ! buffer in case of bsend 
    152152 
    153    ! message passing arrays 
    154    REAL(wp), DIMENSION(:,:,:,:,:), ALLOCATABLE, SAVE ::   t4ns, t4sn   ! 2 x 3d for north-south & south-north 
    155    REAL(wp), DIMENSION(:,:,:,:,:), ALLOCATABLE, SAVE ::   t4ew, t4we   ! 2 x 3d for east-west & west-east 
    156    REAL(wp), DIMENSION(:,:,:,:,:), ALLOCATABLE, SAVE ::   t4p1, t4p2   ! 2 x 3d for north fold 
    157    REAL(wp), DIMENSION(:,:,:,:)  , ALLOCATABLE, SAVE ::   t3ns, t3sn   ! 3d for north-south & south-north 
    158    REAL(wp), DIMENSION(:,:,:,:)  , ALLOCATABLE, SAVE ::   t3ew, t3we   ! 3d for east-west & west-east 
    159    REAL(wp), DIMENSION(:,:,:,:)  , ALLOCATABLE, SAVE ::   t3p1, t3p2   ! 3d for north fold 
    160    REAL(wp), DIMENSION(:,:,:)    , ALLOCATABLE, SAVE ::   t2ns, t2sn   ! 2d for north-south & south-north 
    161    REAL(wp), DIMENSION(:,:,:)    , ALLOCATABLE, SAVE ::   t2ew, t2we   ! 2d for east-west & west-east 
    162    REAL(wp), DIMENSION(:,:,:)    , ALLOCATABLE, SAVE ::   t2p1, t2p2   ! 2d for north fold 
    163  
    164    ! Arrays used in mpp_lbc_north_3d() 
    165    REAL(wp), DIMENSION(:,:,:)  , ALLOCATABLE, SAVE   ::   tab_3d, xnorthloc 
    166    REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE, SAVE   ::   xnorthgloio 
    167    REAL(wp), DIMENSION(:,:,:)  , ALLOCATABLE, SAVE   ::   foldwk      ! Workspace for message transfers avoiding mpi_allgather 
    168  
    169    ! Arrays used in mpp_lbc_north_2d() 
    170    REAL(wp), DIMENSION(:,:)  , ALLOCATABLE, SAVE    ::   tab_2d, xnorthloc_2d 
    171    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, SAVE    ::   xnorthgloio_2d 
    172    REAL(wp), DIMENSION(:,:)  , ALLOCATABLE, SAVE    ::   foldwk_2d    ! Workspace for message transfers avoiding mpi_allgather 
    173  
    174    ! Arrays used in mpp_lbc_north_e() 
    175    REAL(wp), DIMENSION(:,:)  , ALLOCATABLE, SAVE    ::   tab_e, xnorthloc_e 
    176    REAL(wp), DIMENSION(:,:,:), ALLOCATABLE, SAVE    ::   xnorthgloio_e 
    177  
    178153   ! North fold arrays used to minimise the use of allgather operations. Set in nemo_northcomms (nemogcm) so need to be public 
    179154   INTEGER, PUBLIC,  PARAMETER :: jpmaxngh = 8                 ! Assumed maximum number of active neighbours 
     
    190165   !!---------------------------------------------------------------------- 
    191166CONTAINS 
    192  
    193    INTEGER FUNCTION lib_mpp_alloc( kumout ) 
    194       !!---------------------------------------------------------------------- 
    195       !!              ***  routine lib_mpp_alloc  *** 
    196       !!---------------------------------------------------------------------- 
    197       INTEGER, INTENT(in) ::   kumout   ! ocean.output logical unit 
    198       !!---------------------------------------------------------------------- 
    199       ! 
    200       ALLOCATE( t4ns(jpi,jprecj,jpk,2,2) , t4sn(jpi,jprecj,jpk,2,2) ,                                            & 
    201          &      t4ew(jpj,jpreci,jpk,2,2) , t4we(jpj,jpreci,jpk,2,2) ,                                            & 
    202          &      t4p1(jpi,jprecj,jpk,2,2) , t4p2(jpi,jprecj,jpk,2,2) ,                                            & 
    203          &      t3ns(jpi,jprecj,jpk,2)   , t3sn(jpi,jprecj,jpk,2)   ,                                            & 
    204          &      t3ew(jpj,jpreci,jpk,2)   , t3we(jpj,jpreci,jpk,2)   ,                                            & 
    205          &      t3p1(jpi,jprecj,jpk,2)   , t3p2(jpi,jprecj,jpk,2)   ,                                            & 
    206          &      t2ns(jpi,jprecj    ,2)   , t2sn(jpi,jprecj    ,2)   ,                                            & 
    207          &      t2ew(jpj,jpreci    ,2)   , t2we(jpj,jpreci    ,2)   ,                                            & 
    208          &      t2p1(jpi,jprecj    ,2)   , t2p2(jpi,jprecj    ,2)   ,                                            & 
    209          ! 
    210          &      tab_3d(jpiglo,4,jpk) , xnorthloc(jpi,4,jpk) , xnorthgloio(jpi,4,jpk,jpni) ,                        & 
    211          &      foldwk(jpi,4,jpk) ,                                                                             & 
    212          ! 
    213          &      tab_2d(jpiglo,4)  , xnorthloc_2d(jpi,4)  , xnorthgloio_2d(jpi,4,jpni)  ,                        & 
    214          &      foldwk_2d(jpi,4)  ,                                                                             & 
    215          ! 
    216          &      tab_e(jpiglo,4+2*jpr2dj) , xnorthloc_e(jpi,4+2*jpr2dj) , xnorthgloio_e(jpi,4+2*jpr2dj,jpni) ,   & 
    217          ! 
    218          &      STAT=lib_mpp_alloc ) 
    219          ! 
    220       IF( lib_mpp_alloc /= 0 ) THEN 
    221          WRITE(kumout,cform_war) 
    222          WRITE(kumout,*) 'lib_mpp_alloc : failed to allocate arrays' 
    223       ENDIF 
    224       ! 
    225    END FUNCTION lib_mpp_alloc 
    226167 
    227168 
     
    395336      REAL(wp) ::   zland 
    396337      INTEGER, DIMENSION(MPI_STATUS_SIZE) ::   ml_stat   ! for key_mpi_isend 
    397       !!---------------------------------------------------------------------- 
     338      ! 
     339      REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::   zt3ns, zt3sn   ! 3d for north-south & south-north 
     340      REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::   zt3ew, zt3we   ! 3d for east-west & west-east 
     341 
     342      !!---------------------------------------------------------------------- 
     343 
     344      ALLOCATE( zt3ns(jpi,jprecj,jpk,2), zt3sn(jpi,jprecj,jpk,2),   & 
     345         &      zt3ew(jpj,jpreci,jpk,2), zt3we(jpj,jpreci,jpk,2)  ) 
    398346 
    399347      zland = 0.e0      ! zero by default 
     
    430378         iihom = nlci-nreci 
    431379         DO jl = 1, jpreci 
    432             t3ew(:,jl,:,1) = ptab(jpreci+jl,:,:) 
    433             t3we(:,jl,:,1) = ptab(iihom +jl,:,:) 
     380            zt3ew(:,jl,:,1) = ptab(jpreci+jl,:,:) 
     381            zt3we(:,jl,:,1) = ptab(iihom +jl,:,:) 
    434382         END DO 
    435383      END SELECT   
     
    440388      SELECT CASE ( nbondi )  
    441389      CASE ( -1 ) 
    442          CALL mppsend( 2, t3we(1,1,1,1), imigr, noea, ml_req1 ) 
    443          CALL mpprecv( 1, t3ew(1,1,1,2), imigr, noea ) 
     390         CALL mppsend( 2, zt3we(1,1,1,1), imigr, noea, ml_req1 ) 
     391         CALL mpprecv( 1, zt3ew(1,1,1,2), imigr, noea ) 
    444392         IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err) 
    445393      CASE ( 0 ) 
    446          CALL mppsend( 1, t3ew(1,1,1,1), imigr, nowe, ml_req1 ) 
    447          CALL mppsend( 2, t3we(1,1,1,1), imigr, noea, ml_req2 ) 
    448          CALL mpprecv( 1, t3ew(1,1,1,2), imigr, noea ) 
    449          CALL mpprecv( 2, t3we(1,1,1,2), imigr, nowe ) 
     394         CALL mppsend( 1, zt3ew(1,1,1,1), imigr, nowe, ml_req1 ) 
     395         CALL mppsend( 2, zt3we(1,1,1,1), imigr, noea, ml_req2 ) 
     396         CALL mpprecv( 1, zt3ew(1,1,1,2), imigr, noea ) 
     397         CALL mpprecv( 2, zt3we(1,1,1,2), imigr, nowe ) 
    450398         IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err) 
    451399         IF(l_isend) CALL mpi_wait(ml_req2, ml_stat, ml_err) 
    452400      CASE ( 1 ) 
    453          CALL mppsend( 1, t3ew(1,1,1,1), imigr, nowe, ml_req1 ) 
    454          CALL mpprecv( 2, t3we(1,1,1,2), imigr, nowe ) 
     401         CALL mppsend( 1, zt3ew(1,1,1,1), imigr, nowe, ml_req1 ) 
     402         CALL mpprecv( 2, zt3we(1,1,1,2), imigr, nowe ) 
    455403         IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err) 
    456404      END SELECT 
     
    462410      CASE ( -1 ) 
    463411         DO jl = 1, jpreci 
    464             ptab(iihom+jl,:,:) = t3ew(:,jl,:,2) 
     412            ptab(iihom+jl,:,:) = zt3ew(:,jl,:,2) 
    465413         END DO 
    466414      CASE ( 0 ) 
    467415         DO jl = 1, jpreci 
    468             ptab(jl      ,:,:) = t3we(:,jl,:,2) 
    469             ptab(iihom+jl,:,:) = t3ew(:,jl,:,2) 
     416            ptab(jl      ,:,:) = zt3we(:,jl,:,2) 
     417            ptab(iihom+jl,:,:) = zt3ew(:,jl,:,2) 
    470418         END DO 
    471419      CASE ( 1 ) 
    472420         DO jl = 1, jpreci 
    473             ptab(jl      ,:,:) = t3we(:,jl,:,2) 
     421            ptab(jl      ,:,:) = zt3we(:,jl,:,2) 
    474422         END DO 
    475423      END SELECT 
     
    485433         ijhom = nlcj-nrecj 
    486434         DO jl = 1, jprecj 
    487             t3sn(:,jl,:,1) = ptab(:,ijhom +jl,:) 
    488             t3ns(:,jl,:,1) = ptab(:,jprecj+jl,:) 
     435            zt3sn(:,jl,:,1) = ptab(:,ijhom +jl,:) 
     436            zt3ns(:,jl,:,1) = ptab(:,jprecj+jl,:) 
    489437         END DO 
    490438      ENDIF 
     
    495443      SELECT CASE ( nbondj )      
    496444      CASE ( -1 ) 
    497          CALL mppsend( 4, t3sn(1,1,1,1), imigr, nono, ml_req1 ) 
    498          CALL mpprecv( 3, t3ns(1,1,1,2), imigr, nono ) 
     445         CALL mppsend( 4, zt3sn(1,1,1,1), imigr, nono, ml_req1 ) 
     446         CALL mpprecv( 3, zt3ns(1,1,1,2), imigr, nono ) 
    499447         IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err) 
    500448      CASE ( 0 ) 
    501          CALL mppsend( 3, t3ns(1,1,1,1), imigr, noso, ml_req1 ) 
    502          CALL mppsend( 4, t3sn(1,1,1,1), imigr, nono, ml_req2 ) 
    503          CALL mpprecv( 3, t3ns(1,1,1,2), imigr, nono ) 
    504          CALL mpprecv( 4, t3sn(1,1,1,2), imigr, noso ) 
     449         CALL mppsend( 3, zt3ns(1,1,1,1), imigr, noso, ml_req1 ) 
     450         CALL mppsend( 4, zt3sn(1,1,1,1), imigr, nono, ml_req2 ) 
     451         CALL mpprecv( 3, zt3ns(1,1,1,2), imigr, nono ) 
     452         CALL mpprecv( 4, zt3sn(1,1,1,2), imigr, noso ) 
    505453         IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err) 
    506454         IF(l_isend) CALL mpi_wait(ml_req2, ml_stat, ml_err) 
    507455      CASE ( 1 )  
    508          CALL mppsend( 3, t3ns(1,1,1,1), imigr, noso, ml_req1 ) 
    509          CALL mpprecv( 4, t3sn(1,1,1,2), imigr, noso ) 
     456         CALL mppsend( 3, zt3ns(1,1,1,1), imigr, noso, ml_req1 ) 
     457         CALL mpprecv( 4, zt3sn(1,1,1,2), imigr, noso ) 
    510458         IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err) 
    511459      END SELECT 
     
    517465      CASE ( -1 ) 
    518466         DO jl = 1, jprecj 
    519             ptab(:,ijhom+jl,:) = t3ns(:,jl,:,2) 
     467            ptab(:,ijhom+jl,:) = zt3ns(:,jl,:,2) 
    520468         END DO 
    521469      CASE ( 0 ) 
    522470         DO jl = 1, jprecj 
    523             ptab(:,jl      ,:) = t3sn(:,jl,:,2) 
    524             ptab(:,ijhom+jl,:) = t3ns(:,jl,:,2) 
     471            ptab(:,jl      ,:) = zt3sn(:,jl,:,2) 
     472            ptab(:,ijhom+jl,:) = zt3ns(:,jl,:,2) 
    525473         END DO 
    526474      CASE ( 1 ) 
    527475         DO jl = 1, jprecj 
    528             ptab(:,jl,:) = t3sn(:,jl,:,2) 
     476            ptab(:,jl,:) = zt3sn(:,jl,:,2) 
    529477         END DO 
    530478      END SELECT 
     
    543491         ! 
    544492      ENDIF 
     493      ! 
     494      DEALLOCATE( zt3ns, zt3sn, zt3ew, zt3we ) 
    545495      ! 
    546496   END SUBROUTINE mpp_lnk_obc_3d 
     
    577527      REAL(wp) ::   zland 
    578528      INTEGER, DIMENSION(MPI_STATUS_SIZE) ::   ml_stat   ! for key_mpi_isend 
    579       !!---------------------------------------------------------------------- 
     529      ! 
     530      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  zt2ns, zt2sn   ! 2d for north-south & south-north 
     531      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  zt2ew, zt2we   ! 2d for east-west & west-east 
     532 
     533      !!---------------------------------------------------------------------- 
     534 
     535      ALLOCATE( zt2ns(jpi,jprecj,2), zt2sn(jpi,jprecj,2),  & 
     536         &      zt2ew(jpj,jpreci,2), zt2we(jpj,jpreci,2)   ) 
    580537 
    581538      zland = 0.e0      ! zero by default 
     
    612569         iihom = nlci-nreci 
    613570         DO jl = 1, jpreci 
    614             t2ew(:,jl,1) = pt2d(jpreci+jl,:) 
    615             t2we(:,jl,1) = pt2d(iihom +jl,:) 
     571            zt2ew(:,jl,1) = pt2d(jpreci+jl,:) 
     572            zt2we(:,jl,1) = pt2d(iihom +jl,:) 
    616573         END DO 
    617574      END SELECT 
     
    622579      SELECT CASE ( nbondi ) 
    623580      CASE ( -1 ) 
    624          CALL mppsend( 2, t2we(1,1,1), imigr, noea, ml_req1 ) 
    625          CALL mpprecv( 1, t2ew(1,1,2), imigr, noea ) 
     581         CALL mppsend( 2, zt2we(1,1,1), imigr, noea, ml_req1 ) 
     582         CALL mpprecv( 1, zt2ew(1,1,2), imigr, noea ) 
    626583         IF(l_isend) CALL mpi_wait(ml_req1,ml_stat,ml_err) 
    627584      CASE ( 0 ) 
    628          CALL mppsend( 1, t2ew(1,1,1), imigr, nowe, ml_req1 ) 
    629          CALL mppsend( 2, t2we(1,1,1), imigr, noea, ml_req2 ) 
    630          CALL mpprecv( 1, t2ew(1,1,2), imigr, noea ) 
    631          CALL mpprecv( 2, t2we(1,1,2), imigr, nowe ) 
     585         CALL mppsend( 1, zt2ew(1,1,1), imigr, nowe, ml_req1 ) 
     586         CALL mppsend( 2, zt2we(1,1,1), imigr, noea, ml_req2 ) 
     587         CALL mpprecv( 1, zt2ew(1,1,2), imigr, noea ) 
     588         CALL mpprecv( 2, zt2we(1,1,2), imigr, nowe ) 
    632589         IF(l_isend) CALL mpi_wait(ml_req1,ml_stat,ml_err) 
    633590         IF(l_isend) CALL mpi_wait(ml_req2,ml_stat,ml_err) 
    634591      CASE ( 1 ) 
    635          CALL mppsend( 1, t2ew(1,1,1), imigr, nowe, ml_req1 ) 
    636          CALL mpprecv( 2, t2we(1,1,2), imigr, nowe ) 
     592         CALL mppsend( 1, zt2ew(1,1,1), imigr, nowe, ml_req1 ) 
     593         CALL mpprecv( 2, zt2we(1,1,2), imigr, nowe ) 
    637594         IF(l_isend) CALL mpi_wait(ml_req1,ml_stat,ml_err) 
    638595      END SELECT 
     
    644601      CASE ( -1 ) 
    645602         DO jl = 1, jpreci 
    646             pt2d(iihom+jl,:) = t2ew(:,jl,2) 
     603            pt2d(iihom+jl,:) = zt2ew(:,jl,2) 
    647604         END DO 
    648605      CASE ( 0 ) 
    649606         DO jl = 1, jpreci 
    650             pt2d(jl      ,:) = t2we(:,jl,2) 
    651             pt2d(iihom+jl,:) = t2ew(:,jl,2) 
     607            pt2d(jl      ,:) = zt2we(:,jl,2) 
     608            pt2d(iihom+jl,:) = zt2ew(:,jl,2) 
    652609         END DO 
    653610      CASE ( 1 ) 
    654611         DO jl = 1, jpreci 
    655             pt2d(jl      ,:) = t2we(:,jl,2) 
     612            pt2d(jl      ,:) = zt2we(:,jl,2) 
    656613         END DO 
    657614      END SELECT 
     
    665622         ijhom = nlcj-nrecj 
    666623         DO jl = 1, jprecj 
    667             t2sn(:,jl,1) = pt2d(:,ijhom +jl) 
    668             t2ns(:,jl,1) = pt2d(:,jprecj+jl) 
     624            zt2sn(:,jl,1) = pt2d(:,ijhom +jl) 
     625            zt2ns(:,jl,1) = pt2d(:,jprecj+jl) 
    669626         END DO 
    670627      ENDIF 
     
    675632      SELECT CASE ( nbondj ) 
    676633      CASE ( -1 ) 
    677          CALL mppsend( 4, t2sn(1,1,1), imigr, nono, ml_req1 ) 
    678          CALL mpprecv( 3, t2ns(1,1,2), imigr, nono ) 
     634         CALL mppsend( 4, zt2sn(1,1,1), imigr, nono, ml_req1 ) 
     635         CALL mpprecv( 3, zt2ns(1,1,2), imigr, nono ) 
    679636         IF(l_isend) CALL mpi_wait(ml_req1,ml_stat,ml_err) 
    680637      CASE ( 0 ) 
    681          CALL mppsend( 3, t2ns(1,1,1), imigr, noso, ml_req1 ) 
    682          CALL mppsend( 4, t2sn(1,1,1), imigr, nono, ml_req2 ) 
    683          CALL mpprecv( 3, t2ns(1,1,2), imigr, nono ) 
    684          CALL mpprecv( 4, t2sn(1,1,2), imigr, noso ) 
     638         CALL mppsend( 3, zt2ns(1,1,1), imigr, noso, ml_req1 ) 
     639         CALL mppsend( 4, zt2sn(1,1,1), imigr, nono, ml_req2 ) 
     640         CALL mpprecv( 3, zt2ns(1,1,2), imigr, nono ) 
     641         CALL mpprecv( 4, zt2sn(1,1,2), imigr, noso ) 
    685642         IF(l_isend) CALL mpi_wait(ml_req1,ml_stat,ml_err) 
    686643         IF(l_isend) CALL mpi_wait(ml_req2,ml_stat,ml_err) 
    687644      CASE ( 1 ) 
    688          CALL mppsend( 3, t2ns(1,1,1), imigr, noso, ml_req1 ) 
    689          CALL mpprecv( 4, t2sn(1,1,2), imigr, noso ) 
     645         CALL mppsend( 3, zt2ns(1,1,1), imigr, noso, ml_req1 ) 
     646         CALL mpprecv( 4, zt2sn(1,1,2), imigr, noso ) 
    690647         IF(l_isend) CALL mpi_wait(ml_req1,ml_stat,ml_err) 
    691648      END SELECT 
     
    697654      CASE ( -1 ) 
    698655         DO jl = 1, jprecj 
    699             pt2d(:,ijhom+jl) = t2ns(:,jl,2) 
     656            pt2d(:,ijhom+jl) = zt2ns(:,jl,2) 
    700657         END DO 
    701658      CASE ( 0 ) 
    702659         DO jl = 1, jprecj 
    703             pt2d(:,jl      ) = t2sn(:,jl,2) 
    704             pt2d(:,ijhom+jl) = t2ns(:,jl,2) 
     660            pt2d(:,jl      ) = zt2sn(:,jl,2) 
     661            pt2d(:,ijhom+jl) = zt2ns(:,jl,2) 
    705662         END DO 
    706663      CASE ( 1 )  
    707664         DO jl = 1, jprecj 
    708             pt2d(:,jl      ) = t2sn(:,jl,2) 
     665            pt2d(:,jl      ) = zt2sn(:,jl,2) 
    709666         END DO 
    710667      END SELECT 
     
    722679         ! 
    723680      ENDIF 
     681      ! 
     682      DEALLOCATE( zt2ns, zt2sn, zt2ew, zt2we ) 
    724683      ! 
    725684   END SUBROUTINE mpp_lnk_obc_2d 
     
    759718      REAL(wp) ::   zland 
    760719      INTEGER, DIMENSION(MPI_STATUS_SIZE) ::   ml_stat   ! for key_mpi_isend 
    761       !!---------------------------------------------------------------------- 
    762  
     720      ! 
     721      REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::   zt3ns, zt3sn   ! 3d for north-south & south-north 
     722      REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::   zt3ew, zt3we   ! 3d for east-west & west-east 
     723 
     724      !!---------------------------------------------------------------------- 
     725       
     726      ALLOCATE( zt3ns(jpi,jprecj,jpk,2), zt3sn(jpi,jprecj,jpk,2),   & 
     727         &      zt3ew(jpj,jpreci,jpk,2), zt3we(jpj,jpreci,jpk,2)  ) 
     728 
     729      ! 
    763730      IF( PRESENT( pval ) ) THEN   ;   zland = pval      ! set land value 
    764731      ELSE                         ;   zland = 0.e0      ! zero by default 
     
    808775         iihom = nlci-nreci 
    809776         DO jl = 1, jpreci 
    810             t3ew(:,jl,:,1) = ptab(jpreci+jl,:,:) 
    811             t3we(:,jl,:,1) = ptab(iihom +jl,:,:) 
     777            zt3ew(:,jl,:,1) = ptab(jpreci+jl,:,:) 
     778            zt3we(:,jl,:,1) = ptab(iihom +jl,:,:) 
    812779         END DO 
    813780      END SELECT 
     
    818785      SELECT CASE ( nbondi ) 
    819786      CASE ( -1 ) 
    820          CALL mppsend( 2, t3we(1,1,1,1), imigr, noea, ml_req1 ) 
    821          CALL mpprecv( 1, t3ew(1,1,1,2), imigr, noea ) 
     787         CALL mppsend( 2, zt3we(1,1,1,1), imigr, noea, ml_req1 ) 
     788         CALL mpprecv( 1, zt3ew(1,1,1,2), imigr, noea ) 
    822789         IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err) 
    823790      CASE ( 0 ) 
    824          CALL mppsend( 1, t3ew(1,1,1,1), imigr, nowe, ml_req1 ) 
    825          CALL mppsend( 2, t3we(1,1,1,1), imigr, noea, ml_req2 ) 
    826          CALL mpprecv( 1, t3ew(1,1,1,2), imigr, noea ) 
    827          CALL mpprecv( 2, t3we(1,1,1,2), imigr, nowe ) 
     791         CALL mppsend( 1, zt3ew(1,1,1,1), imigr, nowe, ml_req1 ) 
     792         CALL mppsend( 2, zt3we(1,1,1,1), imigr, noea, ml_req2 ) 
     793         CALL mpprecv( 1, zt3ew(1,1,1,2), imigr, noea ) 
     794         CALL mpprecv( 2, zt3we(1,1,1,2), imigr, nowe ) 
    828795         IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err) 
    829796         IF(l_isend) CALL mpi_wait(ml_req2, ml_stat, ml_err) 
    830797      CASE ( 1 ) 
    831          CALL mppsend( 1, t3ew(1,1,1,1), imigr, nowe, ml_req1 ) 
    832          CALL mpprecv( 2, t3we(1,1,1,2), imigr, nowe ) 
     798         CALL mppsend( 1, zt3ew(1,1,1,1), imigr, nowe, ml_req1 ) 
     799         CALL mpprecv( 2, zt3we(1,1,1,2), imigr, nowe ) 
    833800         IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err) 
    834801      END SELECT 
     
    840807      CASE ( -1 ) 
    841808         DO jl = 1, jpreci 
    842             ptab(iihom+jl,:,:) = t3ew(:,jl,:,2) 
     809            ptab(iihom+jl,:,:) = zt3ew(:,jl,:,2) 
    843810         END DO 
    844811      CASE ( 0 ) 
    845812         DO jl = 1, jpreci 
    846             ptab(jl      ,:,:) = t3we(:,jl,:,2) 
    847             ptab(iihom+jl,:,:) = t3ew(:,jl,:,2) 
     813            ptab(jl      ,:,:) = zt3we(:,jl,:,2) 
     814            ptab(iihom+jl,:,:) = zt3ew(:,jl,:,2) 
    848815         END DO 
    849816      CASE ( 1 ) 
    850817         DO jl = 1, jpreci 
    851             ptab(jl      ,:,:) = t3we(:,jl,:,2) 
     818            ptab(jl      ,:,:) = zt3we(:,jl,:,2) 
    852819         END DO 
    853820      END SELECT 
     
    861828         ijhom = nlcj-nrecj 
    862829         DO jl = 1, jprecj 
    863             t3sn(:,jl,:,1) = ptab(:,ijhom +jl,:) 
    864             t3ns(:,jl,:,1) = ptab(:,jprecj+jl,:) 
     830            zt3sn(:,jl,:,1) = ptab(:,ijhom +jl,:) 
     831            zt3ns(:,jl,:,1) = ptab(:,jprecj+jl,:) 
    865832         END DO 
    866833      ENDIF 
     
    871838      SELECT CASE ( nbondj ) 
    872839      CASE ( -1 ) 
    873          CALL mppsend( 4, t3sn(1,1,1,1), imigr, nono, ml_req1 ) 
    874          CALL mpprecv( 3, t3ns(1,1,1,2), imigr, nono ) 
     840         CALL mppsend( 4, zt3sn(1,1,1,1), imigr, nono, ml_req1 ) 
     841         CALL mpprecv( 3, zt3ns(1,1,1,2), imigr, nono ) 
    875842         IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err) 
    876843      CASE ( 0 ) 
    877          CALL mppsend( 3, t3ns(1,1,1,1), imigr, noso, ml_req1 ) 
    878          CALL mppsend( 4, t3sn(1,1,1,1), imigr, nono, ml_req2 ) 
    879          CALL mpprecv( 3, t3ns(1,1,1,2), imigr, nono ) 
    880          CALL mpprecv( 4, t3sn(1,1,1,2), imigr, noso ) 
     844         CALL mppsend( 3, zt3ns(1,1,1,1), imigr, noso, ml_req1 ) 
     845         CALL mppsend( 4, zt3sn(1,1,1,1), imigr, nono, ml_req2 ) 
     846         CALL mpprecv( 3, zt3ns(1,1,1,2), imigr, nono ) 
     847         CALL mpprecv( 4, zt3sn(1,1,1,2), imigr, noso ) 
    881848         IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err) 
    882849         IF(l_isend) CALL mpi_wait(ml_req2, ml_stat, ml_err) 
    883850      CASE ( 1 ) 
    884          CALL mppsend( 3, t3ns(1,1,1,1), imigr, noso, ml_req1 ) 
    885          CALL mpprecv( 4, t3sn(1,1,1,2), imigr, noso ) 
     851         CALL mppsend( 3, zt3ns(1,1,1,1), imigr, noso, ml_req1 ) 
     852         CALL mpprecv( 4, zt3sn(1,1,1,2), imigr, noso ) 
    886853         IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err) 
    887854      END SELECT 
     
    893860      CASE ( -1 ) 
    894861         DO jl = 1, jprecj 
    895             ptab(:,ijhom+jl,:) = t3ns(:,jl,:,2) 
     862            ptab(:,ijhom+jl,:) = zt3ns(:,jl,:,2) 
    896863         END DO 
    897864      CASE ( 0 ) 
    898865         DO jl = 1, jprecj 
    899             ptab(:,jl      ,:) = t3sn(:,jl,:,2) 
    900             ptab(:,ijhom+jl,:) = t3ns(:,jl,:,2) 
     866            ptab(:,jl      ,:) = zt3sn(:,jl,:,2) 
     867            ptab(:,ijhom+jl,:) = zt3ns(:,jl,:,2) 
    901868         END DO 
    902869      CASE ( 1 ) 
    903870         DO jl = 1, jprecj 
    904             ptab(:,jl,:) = t3sn(:,jl,:,2) 
     871            ptab(:,jl,:) = zt3sn(:,jl,:,2) 
    905872         END DO 
    906873      END SELECT 
     
    918885         ! 
    919886      ENDIF 
     887      ! 
     888      DEALLOCATE( zt3ns, zt3sn, zt3ew, zt3we ) 
    920889      ! 
    921890   END SUBROUTINE mpp_lnk_3d 
     
    954923      REAL(wp) ::   zland 
    955924      INTEGER, DIMENSION(MPI_STATUS_SIZE) ::   ml_stat   ! for key_mpi_isend 
    956       !!---------------------------------------------------------------------- 
    957  
     925      ! 
     926      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  zt2ns, zt2sn   ! 2d for north-south & south-north 
     927      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  zt2ew, zt2we   ! 2d for east-west & west-east 
     928 
     929      !!---------------------------------------------------------------------- 
     930 
     931      ALLOCATE( zt2ns(jpi,jprecj,2), zt2sn(jpi,jprecj,2),  & 
     932         &      zt2ew(jpj,jpreci,2), zt2we(jpj,jpreci,2)   ) 
     933 
     934      ! 
    958935      IF( PRESENT( pval ) ) THEN   ;   zland = pval      ! set land value 
    959936      ELSE                         ;   zland = 0.e0      ! zero by default 
     
    1002979         iihom = nlci-nreci 
    1003980         DO jl = 1, jpreci 
    1004             t2ew(:,jl,1) = pt2d(jpreci+jl,:) 
    1005             t2we(:,jl,1) = pt2d(iihom +jl,:) 
     981            zt2ew(:,jl,1) = pt2d(jpreci+jl,:) 
     982            zt2we(:,jl,1) = pt2d(iihom +jl,:) 
    1006983         END DO 
    1007984      END SELECT 
     
    1012989      SELECT CASE ( nbondi ) 
    1013990      CASE ( -1 ) 
    1014          CALL mppsend( 2, t2we(1,1,1), imigr, noea, ml_req1 ) 
    1015          CALL mpprecv( 1, t2ew(1,1,2), imigr, noea ) 
     991         CALL mppsend( 2, zt2we(1,1,1), imigr, noea, ml_req1 ) 
     992         CALL mpprecv( 1, zt2ew(1,1,2), imigr, noea ) 
    1016993         IF(l_isend) CALL mpi_wait(ml_req1,ml_stat,ml_err) 
    1017994      CASE ( 0 ) 
    1018          CALL mppsend( 1, t2ew(1,1,1), imigr, nowe, ml_req1 ) 
    1019          CALL mppsend( 2, t2we(1,1,1), imigr, noea, ml_req2 ) 
    1020          CALL mpprecv( 1, t2ew(1,1,2), imigr, noea ) 
    1021          CALL mpprecv( 2, t2we(1,1,2), imigr, nowe ) 
     995         CALL mppsend( 1, zt2ew(1,1,1), imigr, nowe, ml_req1 ) 
     996         CALL mppsend( 2, zt2we(1,1,1), imigr, noea, ml_req2 ) 
     997         CALL mpprecv( 1, zt2ew(1,1,2), imigr, noea ) 
     998         CALL mpprecv( 2, zt2we(1,1,2), imigr, nowe ) 
    1022999         IF(l_isend) CALL mpi_wait(ml_req1,ml_stat,ml_err) 
    10231000         IF(l_isend) CALL mpi_wait(ml_req2,ml_stat,ml_err) 
    10241001      CASE ( 1 ) 
    1025          CALL mppsend( 1, t2ew(1,1,1), imigr, nowe, ml_req1 ) 
    1026          CALL mpprecv( 2, t2we(1,1,2), imigr, nowe ) 
     1002         CALL mppsend( 1, zt2ew(1,1,1), imigr, nowe, ml_req1 ) 
     1003         CALL mpprecv( 2, zt2we(1,1,2), imigr, nowe ) 
    10271004         IF(l_isend) CALL mpi_wait(ml_req1,ml_stat,ml_err) 
    10281005      END SELECT 
     
    10341011      CASE ( -1 ) 
    10351012         DO jl = 1, jpreci 
    1036             pt2d(iihom+jl,:) = t2ew(:,jl,2) 
     1013            pt2d(iihom+jl,:) = zt2ew(:,jl,2) 
    10371014         END DO 
    10381015      CASE ( 0 ) 
    10391016         DO jl = 1, jpreci 
    1040             pt2d(jl      ,:) = t2we(:,jl,2) 
    1041             pt2d(iihom+jl,:) = t2ew(:,jl,2) 
     1017            pt2d(jl      ,:) = zt2we(:,jl,2) 
     1018            pt2d(iihom+jl,:) = zt2ew(:,jl,2) 
    10421019         END DO 
    10431020      CASE ( 1 ) 
    10441021         DO jl = 1, jpreci 
    1045             pt2d(jl      ,:) = t2we(:,jl,2) 
     1022            pt2d(jl      ,:) = zt2we(:,jl,2) 
    10461023         END DO 
    10471024      END SELECT 
     
    10551032         ijhom = nlcj-nrecj 
    10561033         DO jl = 1, jprecj 
    1057             t2sn(:,jl,1) = pt2d(:,ijhom +jl) 
    1058             t2ns(:,jl,1) = pt2d(:,jprecj+jl) 
     1034            zt2sn(:,jl,1) = pt2d(:,ijhom +jl) 
     1035            zt2ns(:,jl,1) = pt2d(:,jprecj+jl) 
    10591036         END DO 
    10601037      ENDIF 
     
    10651042      SELECT CASE ( nbondj ) 
    10661043      CASE ( -1 ) 
    1067          CALL mppsend( 4, t2sn(1,1,1), imigr, nono, ml_req1 ) 
    1068          CALL mpprecv( 3, t2ns(1,1,2), imigr, nono ) 
     1044         CALL mppsend( 4, zt2sn(1,1,1), imigr, nono, ml_req1 ) 
     1045         CALL mpprecv( 3, zt2ns(1,1,2), imigr, nono ) 
    10691046         IF(l_isend) CALL mpi_wait(ml_req1,ml_stat,ml_err) 
    10701047      CASE ( 0 ) 
    1071          CALL mppsend( 3, t2ns(1,1,1), imigr, noso, ml_req1 ) 
    1072          CALL mppsend( 4, t2sn(1,1,1), imigr, nono, ml_req2 ) 
    1073          CALL mpprecv( 3, t2ns(1,1,2), imigr, nono ) 
    1074          CALL mpprecv( 4, t2sn(1,1,2), imigr, noso ) 
     1048         CALL mppsend( 3, zt2ns(1,1,1), imigr, noso, ml_req1 ) 
     1049         CALL mppsend( 4, zt2sn(1,1,1), imigr, nono, ml_req2 ) 
     1050         CALL mpprecv( 3, zt2ns(1,1,2), imigr, nono ) 
     1051         CALL mpprecv( 4, zt2sn(1,1,2), imigr, noso ) 
    10751052         IF(l_isend) CALL mpi_wait(ml_req1,ml_stat,ml_err) 
    10761053         IF(l_isend) CALL mpi_wait(ml_req2,ml_stat,ml_err) 
    10771054      CASE ( 1 ) 
    1078          CALL mppsend( 3, t2ns(1,1,1), imigr, noso, ml_req1 ) 
    1079          CALL mpprecv( 4, t2sn(1,1,2), imigr, noso ) 
     1055         CALL mppsend( 3, zt2ns(1,1,1), imigr, noso, ml_req1 ) 
     1056         CALL mpprecv( 4, zt2sn(1,1,2), imigr, noso ) 
    10801057         IF(l_isend) CALL mpi_wait(ml_req1,ml_stat,ml_err) 
    10811058      END SELECT 
     
    10871064      CASE ( -1 ) 
    10881065         DO jl = 1, jprecj 
    1089             pt2d(:,ijhom+jl) = t2ns(:,jl,2) 
     1066            pt2d(:,ijhom+jl) = zt2ns(:,jl,2) 
    10901067         END DO 
    10911068      CASE ( 0 ) 
    10921069         DO jl = 1, jprecj 
    1093             pt2d(:,jl      ) = t2sn(:,jl,2) 
    1094             pt2d(:,ijhom+jl) = t2ns(:,jl,2) 
     1070            pt2d(:,jl      ) = zt2sn(:,jl,2) 
     1071            pt2d(:,ijhom+jl) = zt2ns(:,jl,2) 
    10951072         END DO 
    10961073      CASE ( 1 ) 
    10971074         DO jl = 1, jprecj 
    1098             pt2d(:,jl      ) = t2sn(:,jl,2) 
     1075            pt2d(:,jl      ) = zt2sn(:,jl,2) 
    10991076         END DO 
    11001077      END SELECT 
     
    11121089         ! 
    11131090      ENDIF 
     1091      ! 
     1092      DEALLOCATE( zt2ns, zt2sn, zt2ew, zt2we ) 
    11141093      ! 
    11151094   END SUBROUTINE mpp_lnk_2d 
     
    11471126      INTEGER  ::   ml_req1, ml_req2, ml_err   ! for key_mpi_isend 
    11481127      INTEGER, DIMENSION(MPI_STATUS_SIZE) ::   ml_stat   ! for key_mpi_isend 
    1149       !!---------------------------------------------------------------------- 
     1128      ! 
     1129      REAL(wp), DIMENSION(:,:,:,:,:), ALLOCATABLE ::   zt4ns, zt4sn   ! 2 x 3d for north-south & south-north 
     1130      REAL(wp), DIMENSION(:,:,:,:,:), ALLOCATABLE ::   zt4ew, zt4we   ! 2 x 3d for east-west & west-east 
     1131 
     1132      !!---------------------------------------------------------------------- 
     1133      ALLOCATE( zt4ns(jpi,jprecj,jpk,2,2), zt4sn(jpi,jprecj,jpk,2,2) ,    & 
     1134         &      zt4ew(jpj,jpreci,jpk,2,2), zt4we(jpj,jpreci,jpk,2,2) ) 
     1135 
    11501136 
    11511137      ! 1. standard boundary treatment 
     
    11811167         iihom = nlci-nreci 
    11821168         DO jl = 1, jpreci 
    1183             t4ew(:,jl,:,1,1) = ptab1(jpreci+jl,:,:) 
    1184             t4we(:,jl,:,1,1) = ptab1(iihom +jl,:,:) 
    1185             t4ew(:,jl,:,2,1) = ptab2(jpreci+jl,:,:) 
    1186             t4we(:,jl,:,2,1) = ptab2(iihom +jl,:,:) 
     1169            zt4ew(:,jl,:,1,1) = ptab1(jpreci+jl,:,:) 
     1170            zt4we(:,jl,:,1,1) = ptab1(iihom +jl,:,:) 
     1171            zt4ew(:,jl,:,2,1) = ptab2(jpreci+jl,:,:) 
     1172            zt4we(:,jl,:,2,1) = ptab2(iihom +jl,:,:) 
    11871173         END DO 
    11881174      END SELECT 
     
    11931179      SELECT CASE ( nbondi ) 
    11941180      CASE ( -1 ) 
    1195          CALL mppsend( 2, t4we(1,1,1,1,1), imigr, noea, ml_req1 ) 
    1196          CALL mpprecv( 1, t4ew(1,1,1,1,2), imigr, noea ) 
     1181         CALL mppsend( 2, zt4we(1,1,1,1,1), imigr, noea, ml_req1 ) 
     1182         CALL mpprecv( 1, zt4ew(1,1,1,1,2), imigr, noea ) 
    11971183         IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err) 
    11981184      CASE ( 0 ) 
    1199          CALL mppsend( 1, t4ew(1,1,1,1,1), imigr, nowe, ml_req1 ) 
    1200          CALL mppsend( 2, t4we(1,1,1,1,1), imigr, noea, ml_req2 ) 
    1201          CALL mpprecv( 1, t4ew(1,1,1,1,2), imigr, noea ) 
    1202          CALL mpprecv( 2, t4we(1,1,1,1,2), imigr, nowe ) 
     1185         CALL mppsend( 1, zt4ew(1,1,1,1,1), imigr, nowe, ml_req1 ) 
     1186         CALL mppsend( 2, zt4we(1,1,1,1,1), imigr, noea, ml_req2 ) 
     1187         CALL mpprecv( 1, zt4ew(1,1,1,1,2), imigr, noea ) 
     1188         CALL mpprecv( 2, zt4we(1,1,1,1,2), imigr, nowe ) 
    12031189         IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err) 
    12041190         IF(l_isend) CALL mpi_wait(ml_req2, ml_stat, ml_err) 
    12051191      CASE ( 1 ) 
    1206          CALL mppsend( 1, t4ew(1,1,1,1,1), imigr, nowe, ml_req1 ) 
    1207          CALL mpprecv( 2, t4we(1,1,1,1,2), imigr, nowe ) 
     1192         CALL mppsend( 1, zt4ew(1,1,1,1,1), imigr, nowe, ml_req1 ) 
     1193         CALL mpprecv( 2, zt4we(1,1,1,1,2), imigr, nowe ) 
    12081194         IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err) 
    12091195      END SELECT 
     
    12151201      CASE ( -1 ) 
    12161202         DO jl = 1, jpreci 
    1217             ptab1(iihom+jl,:,:) = t4ew(:,jl,:,1,2) 
    1218             ptab2(iihom+jl,:,:) = t4ew(:,jl,:,2,2) 
     1203            ptab1(iihom+jl,:,:) = zt4ew(:,jl,:,1,2) 
     1204            ptab2(iihom+jl,:,:) = zt4ew(:,jl,:,2,2) 
    12191205         END DO 
    12201206      CASE ( 0 ) 
    12211207         DO jl = 1, jpreci 
    1222             ptab1(jl      ,:,:) = t4we(:,jl,:,1,2) 
    1223             ptab1(iihom+jl,:,:) = t4ew(:,jl,:,1,2) 
    1224             ptab2(jl      ,:,:) = t4we(:,jl,:,2,2) 
    1225             ptab2(iihom+jl,:,:) = t4ew(:,jl,:,2,2) 
     1208            ptab1(jl      ,:,:) = zt4we(:,jl,:,1,2) 
     1209            ptab1(iihom+jl,:,:) = zt4ew(:,jl,:,1,2) 
     1210            ptab2(jl      ,:,:) = zt4we(:,jl,:,2,2) 
     1211            ptab2(iihom+jl,:,:) = zt4ew(:,jl,:,2,2) 
    12261212         END DO 
    12271213      CASE ( 1 ) 
    12281214         DO jl = 1, jpreci 
    1229             ptab1(jl      ,:,:) = t4we(:,jl,:,1,2) 
    1230             ptab2(jl      ,:,:) = t4we(:,jl,:,2,2) 
     1215            ptab1(jl      ,:,:) = zt4we(:,jl,:,1,2) 
     1216            ptab2(jl      ,:,:) = zt4we(:,jl,:,2,2) 
    12311217         END DO 
    12321218      END SELECT 
     
    12401226         ijhom = nlcj - nrecj 
    12411227         DO jl = 1, jprecj 
    1242             t4sn(:,jl,:,1,1) = ptab1(:,ijhom +jl,:) 
    1243             t4ns(:,jl,:,1,1) = ptab1(:,jprecj+jl,:) 
    1244             t4sn(:,jl,:,2,1) = ptab2(:,ijhom +jl,:) 
    1245             t4ns(:,jl,:,2,1) = ptab2(:,jprecj+jl,:) 
     1228            zt4sn(:,jl,:,1,1) = ptab1(:,ijhom +jl,:) 
     1229            zt4ns(:,jl,:,1,1) = ptab1(:,jprecj+jl,:) 
     1230            zt4sn(:,jl,:,2,1) = ptab2(:,ijhom +jl,:) 
     1231            zt4ns(:,jl,:,2,1) = ptab2(:,jprecj+jl,:) 
    12461232         END DO 
    12471233      ENDIF 
     
    12521238      SELECT CASE ( nbondj ) 
    12531239      CASE ( -1 ) 
    1254          CALL mppsend( 4, t4sn(1,1,1,1,1), imigr, nono, ml_req1 ) 
    1255          CALL mpprecv( 3, t4ns(1,1,1,1,2), imigr, nono ) 
     1240         CALL mppsend( 4, zt4sn(1,1,1,1,1), imigr, nono, ml_req1 ) 
     1241         CALL mpprecv( 3, zt4ns(1,1,1,1,2), imigr, nono ) 
    12561242         IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err) 
    12571243      CASE ( 0 ) 
    1258          CALL mppsend( 3, t4ns(1,1,1,1,1), imigr, noso, ml_req1 ) 
    1259          CALL mppsend( 4, t4sn(1,1,1,1,1), imigr, nono, ml_req2 ) 
    1260          CALL mpprecv( 3, t4ns(1,1,1,1,2), imigr, nono ) 
    1261          CALL mpprecv( 4, t4sn(1,1,1,1,2), imigr, noso ) 
     1244         CALL mppsend( 3, zt4ns(1,1,1,1,1), imigr, noso, ml_req1 ) 
     1245         CALL mppsend( 4, zt4sn(1,1,1,1,1), imigr, nono, ml_req2 ) 
     1246         CALL mpprecv( 3, zt4ns(1,1,1,1,2), imigr, nono ) 
     1247         CALL mpprecv( 4, zt4sn(1,1,1,1,2), imigr, noso ) 
    12621248         IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err) 
    12631249         IF(l_isend) CALL mpi_wait(ml_req2, ml_stat, ml_err) 
    12641250      CASE ( 1 ) 
    1265          CALL mppsend( 3, t4ns(1,1,1,1,1), imigr, noso, ml_req1 ) 
    1266          CALL mpprecv( 4, t4sn(1,1,1,1,2), imigr, noso ) 
     1251         CALL mppsend( 3, zt4ns(1,1,1,1,1), imigr, noso, ml_req1 ) 
     1252         CALL mpprecv( 4, zt4sn(1,1,1,1,2), imigr, noso ) 
    12671253         IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err) 
    12681254      END SELECT 
     
    12741260      CASE ( -1 ) 
    12751261         DO jl = 1, jprecj 
    1276             ptab1(:,ijhom+jl,:) = t4ns(:,jl,:,1,2) 
    1277             ptab2(:,ijhom+jl,:) = t4ns(:,jl,:,2,2) 
     1262            ptab1(:,ijhom+jl,:) = zt4ns(:,jl,:,1,2) 
     1263            ptab2(:,ijhom+jl,:) = zt4ns(:,jl,:,2,2) 
    12781264         END DO 
    12791265      CASE ( 0 ) 
    12801266         DO jl = 1, jprecj 
    1281             ptab1(:,jl      ,:) = t4sn(:,jl,:,1,2) 
    1282             ptab1(:,ijhom+jl,:) = t4ns(:,jl,:,1,2) 
    1283             ptab2(:,jl      ,:) = t4sn(:,jl,:,2,2) 
    1284             ptab2(:,ijhom+jl,:) = t4ns(:,jl,:,2,2) 
     1267            ptab1(:,jl      ,:) = zt4sn(:,jl,:,1,2) 
     1268            ptab1(:,ijhom+jl,:) = zt4ns(:,jl,:,1,2) 
     1269            ptab2(:,jl      ,:) = zt4sn(:,jl,:,2,2) 
     1270            ptab2(:,ijhom+jl,:) = zt4ns(:,jl,:,2,2) 
    12851271         END DO 
    12861272      CASE ( 1 ) 
    12871273         DO jl = 1, jprecj 
    1288             ptab1(:,jl,:) = t4sn(:,jl,:,1,2) 
    1289             ptab2(:,jl,:) = t4sn(:,jl,:,2,2) 
     1274            ptab1(:,jl,:) = zt4sn(:,jl,:,1,2) 
     1275            ptab2(:,jl,:) = zt4sn(:,jl,:,2,2) 
    12901276         END DO 
    12911277      END SELECT 
     
    13061292         ! 
    13071293      ENDIF 
     1294      ! 
     1295      DEALLOCATE( zt4ns, zt4sn, zt4ew, zt4we ) 
    13081296      ! 
    13091297   END SUBROUTINE mpp_lnk_3d_gather 
     
    21582146      INTEGER ::   ml_stat(MPI_STATUS_SIZE)    ! for key_mpi_isend 
    21592147      REAL(wp), POINTER, DIMENSION(:,:) ::   ztab   ! temporary workspace 
     2148      ! 
     2149      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  zt2ns, zt2sn   ! 2d for north-south & south-north 
     2150      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  zt2ew, zt2we   ! 2d for east-west & west-east 
    21602151      LOGICAL :: lmigr ! is true for those processors that have to migrate the OB 
    2161       !!---------------------------------------------------------------------- 
     2152 
     2153      !!---------------------------------------------------------------------- 
     2154 
     2155      ALLOCATE( zt2ns(jpi,jprecj,2), zt2sn(jpi,jprecj,2),   & 
     2156         &      zt2ew(jpj,jpreci,2), zt2we(jpj,jpreci,2)   ) 
    21622157 
    21632158      CALL wrk_alloc( jpi,jpj, ztab ) 
     
    22232218         IF( nbondi /= 2 ) THEN         ! Read Dirichlet lateral conditions 
    22242219            iihom = nlci-nreci 
    2225             t2ew(1:jpreci,1,1) = ztab(jpreci+1:nreci, ijpt0) 
    2226             t2we(1:jpreci,1,1) = ztab(iihom+1:iihom+jpreci, ijpt0) 
     2220            zt2ew(1:jpreci,1,1) = ztab(jpreci+1:nreci, ijpt0) 
     2221            zt2we(1:jpreci,1,1) = ztab(iihom+1:iihom+jpreci, ijpt0) 
    22272222         ENDIF 
    22282223         ! 
     
    22312226         ! 
    22322227         IF( nbondi == -1 ) THEN 
    2233             CALL mppsend( 2, t2we(1,1,1), imigr, noea, ml_req1 ) 
    2234             CALL mpprecv( 1, t2ew(1,1,2), imigr, noea ) 
     2228            CALL mppsend( 2, zt2we(1,1,1), imigr, noea, ml_req1 ) 
     2229            CALL mpprecv( 1, zt2ew(1,1,2), imigr, noea ) 
    22352230            IF(l_isend)   CALL mpi_wait( ml_req1, ml_stat, ml_err ) 
    22362231         ELSEIF( nbondi == 0 ) THEN 
    2237             CALL mppsend( 1, t2ew(1,1,1), imigr, nowe, ml_req1 ) 
    2238             CALL mppsend( 2, t2we(1,1,1), imigr, noea, ml_req2 ) 
    2239             CALL mpprecv( 1, t2ew(1,1,2), imigr, noea ) 
    2240             CALL mpprecv( 2, t2we(1,1,2), imigr, nowe ) 
     2232            CALL mppsend( 1, zt2ew(1,1,1), imigr, nowe, ml_req1 ) 
     2233            CALL mppsend( 2, zt2we(1,1,1), imigr, noea, ml_req2 ) 
     2234            CALL mpprecv( 1, zt2ew(1,1,2), imigr, noea ) 
     2235            CALL mpprecv( 2, zt2we(1,1,2), imigr, nowe ) 
    22412236            IF(l_isend)   CALL mpi_wait( ml_req1, ml_stat, ml_err ) 
    22422237            IF(l_isend)   CALL mpi_wait( ml_req2, ml_stat, ml_err ) 
    22432238         ELSEIF( nbondi == 1 ) THEN 
    2244             CALL mppsend( 1, t2ew(1,1,1), imigr, nowe, ml_req1 ) 
    2245             CALL mpprecv( 2, t2we(1,1,2), imigr, nowe ) 
     2239            CALL mppsend( 1, zt2ew(1,1,1), imigr, nowe, ml_req1 ) 
     2240            CALL mpprecv( 2, zt2we(1,1,2), imigr, nowe ) 
    22462241            IF(l_isend) CALL mpi_wait( ml_req1, ml_stat, ml_err ) 
    22472242         ENDIF 
     
    22512246         ! 
    22522247         IF( nbondi == 0 .OR. nbondi == 1 ) THEN 
    2253             ztab(1:jpreci, ijpt0) = t2we(1:jpreci,1,2) 
     2248            ztab(1:jpreci, ijpt0) = zt2we(1:jpreci,1,2) 
    22542249         ENDIF 
    22552250         IF( nbondi == -1 .OR. nbondi == 0 ) THEN 
    2256             ztab(iihom+1:iihom+jpreci, ijpt0) = t2ew(1:jpreci,1,2) 
     2251            ztab(iihom+1:iihom+jpreci, ijpt0) = zt2ew(1:jpreci,1,2) 
    22572252         ENDIF 
    22582253       ENDIF  ! (ktype == 1) 
     
    22642259         IF( nbondj /= 2 ) THEN         ! Read Dirichlet lateral conditions 
    22652260            ijhom = nlcj-nrecj 
    2266             t2sn(1:jprecj,1,1) = ztab(iipt0, ijhom+1:ijhom+jprecj) 
    2267             t2ns(1:jprecj,1,1) = ztab(iipt0, jprecj+1:nrecj) 
     2261            zt2sn(1:jprecj,1,1) = ztab(iipt0, ijhom+1:ijhom+jprecj) 
     2262            zt2ns(1:jprecj,1,1) = ztab(iipt0, jprecj+1:nrecj) 
    22682263         ENDIF 
    22692264         ! 
     
    22722267         ! 
    22732268         IF( nbondj == -1 ) THEN 
    2274             CALL mppsend( 4, t2sn(1,1,1), imigr, nono, ml_req1 ) 
    2275             CALL mpprecv( 3, t2ns(1,1,2), imigr, nono ) 
     2269            CALL mppsend( 4, zt2sn(1,1,1), imigr, nono, ml_req1 ) 
     2270            CALL mpprecv( 3, zt2ns(1,1,2), imigr, nono ) 
    22762271            IF(l_isend) CALL mpi_wait( ml_req1, ml_stat, ml_err ) 
    22772272         ELSEIF( nbondj == 0 ) THEN 
    2278             CALL mppsend( 3, t2ns(1,1,1), imigr, noso, ml_req1 ) 
    2279             CALL mppsend( 4, t2sn(1,1,1), imigr, nono, ml_req2 ) 
    2280             CALL mpprecv( 3, t2ns(1,1,2), imigr, nono ) 
    2281             CALL mpprecv( 4, t2sn(1,1,2), imigr, noso ) 
     2273            CALL mppsend( 3, zt2ns(1,1,1), imigr, noso, ml_req1 ) 
     2274            CALL mppsend( 4, zt2sn(1,1,1), imigr, nono, ml_req2 ) 
     2275            CALL mpprecv( 3, zt2ns(1,1,2), imigr, nono ) 
     2276            CALL mpprecv( 4, zt2sn(1,1,2), imigr, noso ) 
    22822277            IF( l_isend )   CALL mpi_wait( ml_req1, ml_stat, ml_err ) 
    22832278            IF( l_isend )   CALL mpi_wait( ml_req2, ml_stat, ml_err ) 
    22842279         ELSEIF( nbondj == 1 ) THEN 
    2285             CALL mppsend( 3, t2ns(1,1,1), imigr, noso, ml_req1 ) 
    2286             CALL mpprecv( 4, t2sn(1,1,2), imigr, noso) 
     2280            CALL mppsend( 3, zt2ns(1,1,1), imigr, noso, ml_req1 ) 
     2281            CALL mpprecv( 4, zt2sn(1,1,2), imigr, noso) 
    22872282            IF( l_isend )   CALL mpi_wait( ml_req1, ml_stat, ml_err ) 
    22882283         ENDIF 
     
    22912286         ijhom = nlcj - jprecj 
    22922287         IF( nbondj == 0 .OR. nbondj == 1 ) THEN 
    2293             ztab(iipt0,1:jprecj) = t2sn(1:jprecj,1,2) 
     2288            ztab(iipt0,1:jprecj) = zt2sn(1:jprecj,1,2) 
    22942289         ENDIF 
    22952290         IF( nbondj == 0 .OR. nbondj == -1 ) THEN 
    2296             ztab(iipt0, ijhom+1:ijhom+jprecj) = t2ns(1:jprecj,1,2) 
     2291            ztab(iipt0, ijhom+1:ijhom+jprecj) = zt2ns(1:jprecj,1,2) 
    22972292         ENDIF 
    22982293         ENDIF    ! (ktype == 2) 
     
    23142309      ! 
    23152310      ENDIF ! ( lmigr ) 
     2311      ! 
     2312      DEALLOCATE( zt2ns, zt2sn, zt2ew, zt2we ) 
    23162313      CALL wrk_dealloc( jpi,jpj, ztab ) 
    23172314      ! 
     
    26032600      INTEGER                                ::   ml_err             ! for mpi_isend when avoiding mpi_allgather 
    26042601      INTEGER, DIMENSION(MPI_STATUS_SIZE)    ::   ml_stat            ! for mpi_isend when avoiding mpi_allgather 
    2605       !!---------------------------------------------------------------------- 
    2606       ! 
     2602      !                                                              ! Workspace for message transfers avoiding mpi_allgather 
     2603      REAL(wp), DIMENSION(:,:,:)  , ALLOCATABLE   :: ztab 
     2604      REAL(wp), DIMENSION(:,:,:)  , ALLOCATABLE   :: znorthloc, zfoldwk       
     2605      REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE   :: znorthgloio 
     2606 
     2607      !!---------------------------------------------------------------------- 
     2608      ! 
     2609      ALLOCATE( ztab(jpiglo,4,jpk), znorthloc(jpi,4,jpk), zfoldwk(jpi,4,jpk), znorthgloio(jpi,4,jpk,jpni) ) 
     2610 
    26072611      ijpj   = 4 
    26082612      ityp = -1 
    26092613      ijpjm1 = 3 
    2610       tab_3d(:,:,:) = 0.e0 
    2611       ! 
    2612       DO jj = nlcj - ijpj +1, nlcj          ! put in xnorthloc the last 4 jlines of pt3d 
     2614      ztab(:,:,:) = 0.e0 
     2615      ! 
     2616      DO jj = nlcj - ijpj +1, nlcj          ! put in znorthloc the last 4 jlines of pt3d 
    26132617         ij = jj - nlcj + ijpj 
    2614          xnorthloc(:,ij,:) = pt3d(:,jj,:) 
     2618         znorthloc(:,ij,:) = pt3d(:,jj,:) 
    26152619      END DO 
    26162620      ! 
    2617       !                                     ! Build in procs of ncomm_north the xnorthgloio 
     2621      !                                     ! Build in procs of ncomm_north the znorthgloio 
    26182622      itaille = jpi * jpk * ijpj 
    26192623      IF ( l_north_nogather ) THEN 
     
    26252629            ij = jj - nlcj + ijpj 
    26262630            DO ji = 1, nlci 
    2627                tab_3d(ji+nimpp-1,ij,:) = pt3d(ji,jj,:) 
     2631               ztab(ji+nimpp-1,ij,:) = pt3d(ji,jj,:) 
    26282632            END DO 
    26292633         END DO 
     
    26502654 
    26512655            DO jr = 1,nsndto(ityp) 
    2652                CALL mppsend(5, xnorthloc, itaille, isendto(jr,ityp), ml_req_nf(jr) ) 
     2656               CALL mppsend(5, znorthloc, itaille, isendto(jr,ityp), ml_req_nf(jr) ) 
    26532657            END DO 
    26542658            DO jr = 1,nsndto(ityp) 
    2655                CALL mpprecv(5, foldwk, itaille, isendto(jr,ityp)) 
     2659               CALL mpprecv(5, zfoldwk, itaille, isendto(jr,ityp)) 
    26562660               iproc = isendto(jr,ityp) + 1 
    26572661               ildi = nldit (iproc) 
     
    26602664               DO jj = 1, ijpj 
    26612665                  DO ji = ildi, ilei 
    2662                      tab_3d(ji+iilb-1,jj,:) = foldwk(ji,jj,:) 
     2666                     ztab(ji+iilb-1,jj,:) = zfoldwk(ji,jj,:) 
    26632667                  END DO 
    26642668               END DO 
     
    26752679 
    26762680      IF ( ityp .lt. 0 ) THEN 
    2677          CALL MPI_ALLGATHER( xnorthloc  , itaille, MPI_DOUBLE_PRECISION,                & 
    2678             &                xnorthgloio, itaille, MPI_DOUBLE_PRECISION, ncomm_north, ierr ) 
     2681         CALL MPI_ALLGATHER( znorthloc  , itaille, MPI_DOUBLE_PRECISION,                & 
     2682            &                znorthgloio, itaille, MPI_DOUBLE_PRECISION, ncomm_north, ierr ) 
    26792683         ! 
    26802684         DO jr = 1, ndim_rank_north         ! recover the global north array 
     
    26852689            DO jj = 1, ijpj 
    26862690               DO ji = ildi, ilei 
    2687                   tab_3d(ji+iilb-1,jj,:) = xnorthgloio(ji,jj,:,jr) 
     2691                  ztab(ji+iilb-1,jj,:) = znorthgloio(ji,jj,:,jr) 
    26882692               END DO 
    26892693            END DO 
     
    26912695      ENDIF 
    26922696      ! 
    2693       ! The tab_3d array has been either: 
     2697      ! The ztab array has been either: 
    26942698      !  a. Fully populated by the mpi_allgather operation or 
    26952699      !  b. Had the active points for this domain and northern neighbours populated 
     
    26982702      ! this domain will be identical. 
    26992703      ! 
    2700       CALL lbc_nfd( tab_3d, cd_type, psgn )   ! North fold boundary condition 
     2704      CALL lbc_nfd( ztab, cd_type, psgn )   ! North fold boundary condition 
    27012705      ! 
    27022706      DO jj = nlcj-ijpj+1, nlcj             ! Scatter back to pt3d 
    27032707         ij = jj - nlcj + ijpj 
    27042708         DO ji= 1, nlci 
    2705             pt3d(ji,jj,:) = tab_3d(ji+nimpp-1,ij,:) 
     2709            pt3d(ji,jj,:) = ztab(ji+nimpp-1,ij,:) 
    27062710         END DO 
    27072711      END DO 
     2712      ! 
     2713      DEALLOCATE( ztab, znorthloc, zfoldwk, znorthgloio ) 
    27082714      ! 
    27092715   END SUBROUTINE mpp_lbc_north_3d 
     
    27352741      INTEGER                            ::   ml_err             ! for mpi_isend when avoiding mpi_allgather 
    27362742      INTEGER, DIMENSION(MPI_STATUS_SIZE)::   ml_stat            ! for mpi_isend when avoiding mpi_allgather 
    2737       !!---------------------------------------------------------------------- 
     2743      !                                                              ! Workspace for message transfers avoiding mpi_allgather 
     2744      REAL(wp), DIMENSION(:,:)  , ALLOCATABLE   :: ztab 
     2745      REAL(wp), DIMENSION(:,:)  , ALLOCATABLE   :: znorthloc, zfoldwk       
     2746      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE   :: znorthgloio 
     2747      !!---------------------------------------------------------------------- 
     2748      ! 
     2749      ALLOCATE( ztab(jpiglo,4), znorthloc(jpi,4), zfoldwk(jpi,4), znorthgloio(jpi,4,jpni) ) 
    27382750      ! 
    27392751      ijpj   = 4 
    27402752      ityp = -1 
    27412753      ijpjm1 = 3 
    2742       tab_2d(:,:) = 0.e0 
    2743       ! 
    2744       DO jj = nlcj-ijpj+1, nlcj             ! put in xnorthloc_2d the last 4 jlines of pt2d 
     2754      ztab(:,:) = 0.e0 
     2755      ! 
     2756      DO jj = nlcj-ijpj+1, nlcj             ! put in znorthloc the last 4 jlines of pt2d 
    27452757         ij = jj - nlcj + ijpj 
    2746          xnorthloc_2d(:,ij) = pt2d(:,jj) 
     2758         znorthloc(:,ij) = pt2d(:,jj) 
    27472759      END DO 
    27482760 
    2749       !                                     ! Build in procs of ncomm_north the xnorthgloio_2d 
     2761      !                                     ! Build in procs of ncomm_north the znorthgloio 
    27502762      itaille = jpi * ijpj 
    27512763      IF ( l_north_nogather ) THEN 
     
    27572769            ij = jj - nlcj + ijpj 
    27582770            DO ji = 1, nlci 
    2759                tab_2d(ji+nimpp-1,ij) = pt2d(ji,jj) 
     2771               ztab(ji+nimpp-1,ij) = pt2d(ji,jj) 
    27602772            END DO 
    27612773         END DO 
     
    27832795 
    27842796            DO jr = 1,nsndto(ityp) 
    2785                CALL mppsend(5, xnorthloc_2d, itaille, isendto(jr,ityp), ml_req_nf(jr) ) 
     2797               CALL mppsend(5, znorthloc, itaille, isendto(jr,ityp), ml_req_nf(jr) ) 
    27862798            END DO 
    27872799            DO jr = 1,nsndto(ityp) 
    2788                CALL mpprecv(5, foldwk_2d, itaille, isendto(jr,ityp)) 
     2800               CALL mpprecv(5, zfoldwk, itaille, isendto(jr,ityp)) 
    27892801               iproc = isendto(jr,ityp) + 1 
    27902802               ildi = nldit (iproc) 
     
    27932805               DO jj = 1, ijpj 
    27942806                  DO ji = ildi, ilei 
    2795                      tab_2d(ji+iilb-1,jj) = foldwk_2d(ji,jj) 
     2807                     ztab(ji+iilb-1,jj) = zfoldwk(ji,jj) 
    27962808                  END DO 
    27972809               END DO 
     
    28082820 
    28092821      IF ( ityp .lt. 0 ) THEN 
    2810          CALL MPI_ALLGATHER( xnorthloc_2d  , itaille, MPI_DOUBLE_PRECISION,        & 
    2811             &                xnorthgloio_2d, itaille, MPI_DOUBLE_PRECISION, ncomm_north, ierr ) 
     2822         CALL MPI_ALLGATHER( znorthloc  , itaille, MPI_DOUBLE_PRECISION,        & 
     2823            &                znorthgloio, itaille, MPI_DOUBLE_PRECISION, ncomm_north, ierr ) 
    28122824         ! 
    28132825         DO jr = 1, ndim_rank_north            ! recover the global north array 
     
    28182830            DO jj = 1, ijpj 
    28192831               DO ji = ildi, ilei 
    2820                   tab_2d(ji+iilb-1,jj) = xnorthgloio_2d(ji,jj,jr) 
     2832                  ztab(ji+iilb-1,jj) = znorthgloio(ji,jj,jr) 
    28212833               END DO 
    28222834            END DO 
     
    28242836      ENDIF 
    28252837      ! 
    2826       ! The tab array has been either: 
     2838      ! The ztab array has been either: 
    28272839      !  a. Fully populated by the mpi_allgather operation or 
    28282840      !  b. Had the active points for this domain and northern neighbours populated 
     
    28312843      ! this domain will be identical. 
    28322844      ! 
    2833       CALL lbc_nfd( tab_2d, cd_type, psgn )   ! North fold boundary condition 
     2845      CALL lbc_nfd( ztab, cd_type, psgn )   ! North fold boundary condition 
    28342846      ! 
    28352847      ! 
     
    28372849         ij = jj - nlcj + ijpj 
    28382850         DO ji = 1, nlci 
    2839             pt2d(ji,jj) = tab_2d(ji+nimpp-1,ij) 
     2851            pt2d(ji,jj) = ztab(ji+nimpp-1,ij) 
    28402852         END DO 
    28412853      END DO 
     2854      ! 
     2855      DEALLOCATE( ztab, znorthloc, zfoldwk, znorthgloio ) 
    28422856      ! 
    28432857   END SUBROUTINE mpp_lbc_north_2d 
     
    28672881      INTEGER ::   ierr, itaille, ildi, ilei, iilb 
    28682882      INTEGER ::   ijpj, ij, iproc 
    2869       !!---------------------------------------------------------------------- 
     2883      ! 
     2884      REAL(wp), DIMENSION(:,:)  , ALLOCATABLE  ::  ztab_e, znorthloc_e 
     2885      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE  ::  znorthgloio_e 
     2886 
     2887      !!---------------------------------------------------------------------- 
     2888      ! 
     2889      ALLOCATE( ztab_e(jpiglo,4+2*jpr2dj), znorthloc_e(jpi,4+2*jpr2dj), znorthgloio_e(jpi,4+2*jpr2dj,jpni) ) 
     2890 
    28702891      ! 
    28712892      ijpj=4 
    2872       tab_e(:,:) = 0.e0 
     2893      ztab_e(:,:) = 0.e0 
    28732894 
    28742895      ij=0 
    2875       ! put in xnorthloc_e the last 4 jlines of pt2d 
     2896      ! put in znorthloc_e the last 4 jlines of pt2d 
    28762897      DO jj = nlcj - ijpj + 1 - jpr2dj, nlcj +jpr2dj 
    28772898         ij = ij + 1 
    28782899         DO ji = 1, jpi 
    2879             xnorthloc_e(ji,ij)=pt2d(ji,jj) 
     2900            znorthloc_e(ji,ij)=pt2d(ji,jj) 
    28802901         END DO 
    28812902      END DO 
    28822903      ! 
    28832904      itaille = jpi * ( ijpj + 2 * jpr2dj ) 
    2884       CALL MPI_ALLGATHER( xnorthloc_e(1,1)  , itaille, MPI_DOUBLE_PRECISION,    & 
    2885          &                xnorthgloio_e(1,1,1), itaille, MPI_DOUBLE_PRECISION, ncomm_north, ierr ) 
     2905      CALL MPI_ALLGATHER( znorthloc_e(1,1)  , itaille, MPI_DOUBLE_PRECISION,    & 
     2906         &                znorthgloio_e(1,1,1), itaille, MPI_DOUBLE_PRECISION, ncomm_north, ierr ) 
    28862907      ! 
    28872908      DO jr = 1, ndim_rank_north            ! recover the global north array 
     
    28922913         DO jj = 1, ijpj+2*jpr2dj 
    28932914            DO ji = ildi, ilei 
    2894                tab_e(ji+iilb-1,jj) = xnorthgloio_e(ji,jj,jr) 
     2915               ztab_e(ji+iilb-1,jj) = znorthgloio_e(ji,jj,jr) 
    28952916            END DO 
    28962917         END DO 
     
    29002921      ! 2. North-Fold boundary conditions 
    29012922      ! ---------------------------------- 
    2902       CALL lbc_nfd( tab_e(:,:), cd_type, psgn, pr2dj = jpr2dj ) 
     2923      CALL lbc_nfd( ztab_e(:,:), cd_type, psgn, pr2dj = jpr2dj ) 
    29032924 
    29042925      ij = jpr2dj 
     
    29072928      ij  = ij +1 
    29082929         DO ji= 1, nlci 
    2909             pt2d(ji,jj) = tab_e(ji+nimpp-1,ij) 
     2930            pt2d(ji,jj) = ztab_e(ji+nimpp-1,ij) 
    29102931         END DO 
    29112932      END DO 
     2933      ! 
     2934      DEALLOCATE( ztab_e, znorthloc_e, znorthgloio_e ) 
    29122935      ! 
    29132936   END SUBROUTINE mpp_lbc_north_e 
     
    29502973      REAL(wp) ::   zland 
    29512974      INTEGER, DIMENSION(MPI_STATUS_SIZE) ::   ml_stat   ! for key_mpi_isend 
    2952       !!---------------------------------------------------------------------- 
     2975      ! 
     2976      REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::   zt3ns, zt3sn   ! 3d for north-south & south-north 
     2977      REAL(wp), DIMENSION(:,:,:,:), ALLOCATABLE ::   zt3ew, zt3we   ! 3d for east-west & west-east 
     2978 
     2979      !!---------------------------------------------------------------------- 
     2980       
     2981      ALLOCATE( zt3ns(jpi,jprecj,jpk,2), zt3sn(jpi,jprecj,jpk,2),   & 
     2982         &      zt3ew(jpj,jpreci,jpk,2), zt3we(jpj,jpreci,jpk,2)  ) 
    29532983 
    29542984      zland = 0.e0 
     
    29903020         iihom = nlci-nreci 
    29913021         DO jl = 1, jpreci 
    2992             t3ew(:,jl,:,1) = ptab(jpreci+jl,:,:) 
    2993             t3we(:,jl,:,1) = ptab(iihom +jl,:,:) 
     3022            zt3ew(:,jl,:,1) = ptab(jpreci+jl,:,:) 
     3023            zt3we(:,jl,:,1) = ptab(iihom +jl,:,:) 
    29943024         END DO 
    29953025      END SELECT 
     
    30003030      SELECT CASE ( nbondi_bdy(ib_bdy) ) 
    30013031      CASE ( -1 ) 
    3002          CALL mppsend( 2, t3we(1,1,1,1), imigr, noea, ml_req1 ) 
    3003       CASE ( 0 ) 
    3004          CALL mppsend( 1, t3ew(1,1,1,1), imigr, nowe, ml_req1 ) 
    3005          CALL mppsend( 2, t3we(1,1,1,1), imigr, noea, ml_req2 ) 
     3032         CALL mppsend( 2, zt3we(1,1,1,1), imigr, noea, ml_req1 ) 
     3033      CASE ( 0 ) 
     3034         CALL mppsend( 1, zt3ew(1,1,1,1), imigr, nowe, ml_req1 ) 
     3035         CALL mppsend( 2, zt3we(1,1,1,1), imigr, noea, ml_req2 ) 
    30063036      CASE ( 1 ) 
    3007          CALL mppsend( 1, t3ew(1,1,1,1), imigr, nowe, ml_req1 ) 
     3037         CALL mppsend( 1, zt3ew(1,1,1,1), imigr, nowe, ml_req1 ) 
    30083038      END SELECT 
    30093039      ! 
    30103040      SELECT CASE ( nbondi_bdy_b(ib_bdy) ) 
    30113041      CASE ( -1 ) 
    3012          CALL mpprecv( 1, t3ew(1,1,1,2), imigr, noea ) 
    3013       CASE ( 0 ) 
    3014          CALL mpprecv( 1, t3ew(1,1,1,2), imigr, noea ) 
    3015          CALL mpprecv( 2, t3we(1,1,1,2), imigr, nowe ) 
     3042         CALL mpprecv( 1, zt3ew(1,1,1,2), imigr, noea ) 
     3043      CASE ( 0 ) 
     3044         CALL mpprecv( 1, zt3ew(1,1,1,2), imigr, noea ) 
     3045         CALL mpprecv( 2, zt3we(1,1,1,2), imigr, nowe ) 
    30163046      CASE ( 1 ) 
    3017          CALL mpprecv( 2, t3we(1,1,1,2), imigr, nowe ) 
     3047         CALL mpprecv( 2, zt3we(1,1,1,2), imigr, nowe ) 
    30183048      END SELECT 
    30193049      ! 
     
    30343064      CASE ( -1 ) 
    30353065         DO jl = 1, jpreci 
    3036             ptab(iihom+jl,:,:) = t3ew(:,jl,:,2) 
     3066            ptab(iihom+jl,:,:) = zt3ew(:,jl,:,2) 
    30373067         END DO 
    30383068      CASE ( 0 ) 
    30393069         DO jl = 1, jpreci 
    3040             ptab(jl      ,:,:) = t3we(:,jl,:,2) 
    3041             ptab(iihom+jl,:,:) = t3ew(:,jl,:,2) 
     3070            ptab(jl      ,:,:) = zt3we(:,jl,:,2) 
     3071            ptab(iihom+jl,:,:) = zt3ew(:,jl,:,2) 
    30423072         END DO 
    30433073      CASE ( 1 ) 
    30443074         DO jl = 1, jpreci 
    3045             ptab(jl      ,:,:) = t3we(:,jl,:,2) 
     3075            ptab(jl      ,:,:) = zt3we(:,jl,:,2) 
    30463076         END DO 
    30473077      END SELECT 
     
    30553085         ijhom = nlcj-nrecj 
    30563086         DO jl = 1, jprecj 
    3057             t3sn(:,jl,:,1) = ptab(:,ijhom +jl,:) 
    3058             t3ns(:,jl,:,1) = ptab(:,jprecj+jl,:) 
     3087            zt3sn(:,jl,:,1) = ptab(:,ijhom +jl,:) 
     3088            zt3ns(:,jl,:,1) = ptab(:,jprecj+jl,:) 
    30593089         END DO 
    30603090      ENDIF 
     
    30653095      SELECT CASE ( nbondj_bdy(ib_bdy) ) 
    30663096      CASE ( -1 ) 
    3067          CALL mppsend( 4, t3sn(1,1,1,1), imigr, nono, ml_req1 ) 
    3068       CASE ( 0 ) 
    3069          CALL mppsend( 3, t3ns(1,1,1,1), imigr, noso, ml_req1 ) 
    3070          CALL mppsend( 4, t3sn(1,1,1,1), imigr, nono, ml_req2 ) 
     3097         CALL mppsend( 4, zt3sn(1,1,1,1), imigr, nono, ml_req1 ) 
     3098      CASE ( 0 ) 
     3099         CALL mppsend( 3, zt3ns(1,1,1,1), imigr, noso, ml_req1 ) 
     3100         CALL mppsend( 4, zt3sn(1,1,1,1), imigr, nono, ml_req2 ) 
    30713101      CASE ( 1 ) 
    3072          CALL mppsend( 3, t3ns(1,1,1,1), imigr, noso, ml_req1 ) 
     3102         CALL mppsend( 3, zt3ns(1,1,1,1), imigr, noso, ml_req1 ) 
    30733103      END SELECT 
    30743104      ! 
    30753105      SELECT CASE ( nbondj_bdy_b(ib_bdy) ) 
    30763106      CASE ( -1 ) 
    3077          CALL mpprecv( 3, t3ns(1,1,1,2), imigr, nono ) 
    3078       CASE ( 0 ) 
    3079          CALL mpprecv( 3, t3ns(1,1,1,2), imigr, nono ) 
    3080          CALL mpprecv( 4, t3sn(1,1,1,2), imigr, noso ) 
     3107         CALL mpprecv( 3, zt3ns(1,1,1,2), imigr, nono ) 
     3108      CASE ( 0 ) 
     3109         CALL mpprecv( 3, zt3ns(1,1,1,2), imigr, nono ) 
     3110         CALL mpprecv( 4, zt3sn(1,1,1,2), imigr, noso ) 
    30813111      CASE ( 1 ) 
    3082          CALL mpprecv( 4, t3sn(1,1,1,2), imigr, noso ) 
     3112         CALL mpprecv( 4, zt3sn(1,1,1,2), imigr, noso ) 
    30833113      END SELECT 
    30843114      ! 
     
    30993129      CASE ( -1 ) 
    31003130         DO jl = 1, jprecj 
    3101             ptab(:,ijhom+jl,:) = t3ns(:,jl,:,2) 
     3131            ptab(:,ijhom+jl,:) = zt3ns(:,jl,:,2) 
    31023132         END DO 
    31033133      CASE ( 0 ) 
    31043134         DO jl = 1, jprecj 
    3105             ptab(:,jl      ,:) = t3sn(:,jl,:,2) 
    3106             ptab(:,ijhom+jl,:) = t3ns(:,jl,:,2) 
     3135            ptab(:,jl      ,:) = zt3sn(:,jl,:,2) 
     3136            ptab(:,ijhom+jl,:) = zt3ns(:,jl,:,2) 
    31073137         END DO 
    31083138      CASE ( 1 ) 
    31093139         DO jl = 1, jprecj 
    3110             ptab(:,jl,:) = t3sn(:,jl,:,2) 
     3140            ptab(:,jl,:) = zt3sn(:,jl,:,2) 
    31113141         END DO 
    31123142      END SELECT 
     
    31243154         ! 
    31253155      ENDIF 
     3156      ! 
     3157      DEALLOCATE( zt3ns, zt3sn, zt3ew, zt3we  ) 
    31263158      ! 
    31273159   END SUBROUTINE mpp_lnk_bdy_3d 
     
    31643196      REAL(wp) ::   zland 
    31653197      INTEGER, DIMENSION(MPI_STATUS_SIZE) ::   ml_stat   ! for key_mpi_isend 
    3166       !!---------------------------------------------------------------------- 
     3198      ! 
     3199      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  zt2ns, zt2sn   ! 2d for north-south & south-north 
     3200      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE ::  zt2ew, zt2we   ! 2d for east-west & west-east 
     3201 
     3202      !!---------------------------------------------------------------------- 
     3203 
     3204      ALLOCATE( zt2ns(jpi,jprecj,2), zt2sn(jpi,jprecj,2),  & 
     3205         &      zt2ew(jpj,jpreci,2), zt2we(jpj,jpreci,2)   ) 
    31673206 
    31683207      zland = 0.e0 
     
    32043243         iihom = nlci-nreci 
    32053244         DO jl = 1, jpreci 
    3206             t2ew(:,jl,1) = ptab(jpreci+jl,:) 
    3207             t2we(:,jl,1) = ptab(iihom +jl,:) 
     3245            zt2ew(:,jl,1) = ptab(jpreci+jl,:) 
     3246            zt2we(:,jl,1) = ptab(iihom +jl,:) 
    32083247         END DO 
    32093248      END SELECT 
     
    32143253      SELECT CASE ( nbondi_bdy(ib_bdy) ) 
    32153254      CASE ( -1 ) 
    3216          CALL mppsend( 2, t2we(1,1,1), imigr, noea, ml_req1 ) 
    3217       CASE ( 0 ) 
    3218          CALL mppsend( 1, t2ew(1,1,1), imigr, nowe, ml_req1 ) 
    3219          CALL mppsend( 2, t2we(1,1,1), imigr, noea, ml_req2 ) 
     3255         CALL mppsend( 2, zt2we(1,1,1), imigr, noea, ml_req1 ) 
     3256      CASE ( 0 ) 
     3257         CALL mppsend( 1, zt2ew(1,1,1), imigr, nowe, ml_req1 ) 
     3258         CALL mppsend( 2, zt2we(1,1,1), imigr, noea, ml_req2 ) 
    32203259      CASE ( 1 ) 
    3221          CALL mppsend( 1, t2ew(1,1,1), imigr, nowe, ml_req1 ) 
     3260         CALL mppsend( 1, zt2ew(1,1,1), imigr, nowe, ml_req1 ) 
    32223261      END SELECT 
    32233262      ! 
    32243263      SELECT CASE ( nbondi_bdy_b(ib_bdy) ) 
    32253264      CASE ( -1 ) 
    3226          CALL mpprecv( 1, t2ew(1,1,2), imigr, noea ) 
    3227       CASE ( 0 ) 
    3228          CALL mpprecv( 1, t2ew(1,1,2), imigr, noea ) 
    3229          CALL mpprecv( 2, t2we(1,1,2), imigr, nowe ) 
     3265         CALL mpprecv( 1, zt2ew(1,1,2), imigr, noea ) 
     3266      CASE ( 0 ) 
     3267         CALL mpprecv( 1, zt2ew(1,1,2), imigr, noea ) 
     3268         CALL mpprecv( 2, zt2we(1,1,2), imigr, nowe ) 
    32303269      CASE ( 1 ) 
    3231          CALL mpprecv( 2, t2we(1,1,2), imigr, nowe ) 
     3270         CALL mpprecv( 2, zt2we(1,1,2), imigr, nowe ) 
    32323271      END SELECT 
    32333272      ! 
     
    32483287      CASE ( -1 ) 
    32493288         DO jl = 1, jpreci 
    3250             ptab(iihom+jl,:) = t2ew(:,jl,2) 
     3289            ptab(iihom+jl,:) = zt2ew(:,jl,2) 
    32513290         END DO 
    32523291      CASE ( 0 ) 
    32533292         DO jl = 1, jpreci 
    3254             ptab(jl      ,:) = t2we(:,jl,2) 
    3255             ptab(iihom+jl,:) = t2ew(:,jl,2) 
     3293            ptab(jl      ,:) = zt2we(:,jl,2) 
     3294            ptab(iihom+jl,:) = zt2ew(:,jl,2) 
    32563295         END DO 
    32573296      CASE ( 1 ) 
    32583297         DO jl = 1, jpreci 
    3259             ptab(jl      ,:) = t2we(:,jl,2) 
     3298            ptab(jl      ,:) = zt2we(:,jl,2) 
    32603299         END DO 
    32613300      END SELECT 
     
    32693308         ijhom = nlcj-nrecj 
    32703309         DO jl = 1, jprecj 
    3271             t2sn(:,jl,1) = ptab(:,ijhom +jl) 
    3272             t2ns(:,jl,1) = ptab(:,jprecj+jl) 
     3310            zt2sn(:,jl,1) = ptab(:,ijhom +jl) 
     3311            zt2ns(:,jl,1) = ptab(:,jprecj+jl) 
    32733312         END DO 
    32743313      ENDIF 
     
    32793318      SELECT CASE ( nbondj_bdy(ib_bdy) ) 
    32803319      CASE ( -1 ) 
    3281          CALL mppsend( 4, t2sn(1,1,1), imigr, nono, ml_req1 ) 
    3282       CASE ( 0 ) 
    3283          CALL mppsend( 3, t2ns(1,1,1), imigr, noso, ml_req1 ) 
    3284          CALL mppsend( 4, t2sn(1,1,1), imigr, nono, ml_req2 ) 
     3320         CALL mppsend( 4, zt2sn(1,1,1), imigr, nono, ml_req1 ) 
     3321      CASE ( 0 ) 
     3322         CALL mppsend( 3, zt2ns(1,1,1), imigr, noso, ml_req1 ) 
     3323         CALL mppsend( 4, zt2sn(1,1,1), imigr, nono, ml_req2 ) 
    32853324      CASE ( 1 ) 
    3286          CALL mppsend( 3, t2ns(1,1,1), imigr, noso, ml_req1 ) 
     3325         CALL mppsend( 3, zt2ns(1,1,1), imigr, noso, ml_req1 ) 
    32873326      END SELECT 
    32883327      ! 
    32893328      SELECT CASE ( nbondj_bdy_b(ib_bdy) ) 
    32903329      CASE ( -1 ) 
    3291          CALL mpprecv( 3, t2ns(1,1,2), imigr, nono ) 
    3292       CASE ( 0 ) 
    3293          CALL mpprecv( 3, t2ns(1,1,2), imigr, nono ) 
    3294          CALL mpprecv( 4, t2sn(1,1,2), imigr, noso ) 
     3330         CALL mpprecv( 3, zt2ns(1,1,2), imigr, nono ) 
     3331      CASE ( 0 ) 
     3332         CALL mpprecv( 3, zt2ns(1,1,2), imigr, nono ) 
     3333         CALL mpprecv( 4, zt2sn(1,1,2), imigr, noso ) 
    32953334      CASE ( 1 ) 
    3296          CALL mpprecv( 4, t2sn(1,1,2), imigr, noso ) 
     3335         CALL mpprecv( 4, zt2sn(1,1,2), imigr, noso ) 
    32973336      END SELECT 
    32983337      ! 
     
    33133352      CASE ( -1 ) 
    33143353         DO jl = 1, jprecj 
    3315             ptab(:,ijhom+jl) = t2ns(:,jl,2) 
     3354            ptab(:,ijhom+jl) = zt2ns(:,jl,2) 
    33163355         END DO 
    33173356      CASE ( 0 ) 
    33183357         DO jl = 1, jprecj 
    3319             ptab(:,jl      ) = t2sn(:,jl,2) 
    3320             ptab(:,ijhom+jl) = t2ns(:,jl,2) 
     3358            ptab(:,jl      ) = zt2sn(:,jl,2) 
     3359            ptab(:,ijhom+jl) = zt2ns(:,jl,2) 
    33213360         END DO 
    33223361      CASE ( 1 ) 
    33233362         DO jl = 1, jprecj 
    3324             ptab(:,jl) = t2sn(:,jl,2) 
     3363            ptab(:,jl) = zt2sn(:,jl,2) 
    33253364         END DO 
    33263365      END SELECT 
     
    33383377         ! 
    33393378      ENDIF 
     3379      ! 
     3380      DEALLOCATE( zt2ns, zt2sn, zt2ew, zt2we  ) 
    33403381      ! 
    33413382   END SUBROUTINE mpp_lnk_bdy_2d 
Note: See TracChangeset for help on using the changeset viewer.