Changeset 10329


Ignore:
Timestamp:
2018-11-19T10:33:35+01:00 (21 months ago)
Author:
smasson
Message:

dev_r10164_HPC09_ESIWACE_PREP_MERGE: action 3c: slight cleanning/optimisation of lbc_lnk, see #2133

Location:
NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/LBC
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/LBC/lbc_lnk_generic.h90

    r10314 r10329  
    7878      ! ------------------------------- ! 
    7979      ! 
    80       IF( PRESENT( cd_mpp ) ) THEN     !==  halos filled with inner values  ==! 
    81          ! 
    82          ! only fill the overlap area and extra allows  
    83          ! this is in mpp case. In this module, just do nothing 
    84          ! 
    85       ELSE                             !==  standard close or cyclic treatment  ==! 
     80      IF( .NOT. PRESENT( cd_mpp ) ) THEN  !==  standard close or cyclic treatment  ==! 
    8681         ! 
    8782         DO jf = 1, ipf                   ! number of arrays to be treated 
  • NEMO/branches/2018/dev_r10164_HPC09_ESIWACE_PREP_MERGE/src/OCE/LBC/mpp_lnk_generic.h90

    r10314 r10329  
    7575      IF( narea == 1 .AND. numcom == -1 ) CALL mpp_report( cdname, ipk, ipl, ipf, ld_lbc = .TRUE. ) 
    7676      ! 
    77       ALLOCATE( zt3ns(jpi,nn_hls,ipk,ipl,ipf,2), zt3sn(jpi,nn_hls,ipk,ipl,ipf,2),   & 
    78          &      zt3ew(jpj,nn_hls,ipk,ipl,ipf,2), zt3we(jpj,nn_hls,ipk,ipl,ipf,2)  ) 
    79       ! 
    8077      IF( PRESENT( pval ) ) THEN   ;   zland = pval      ! set land value 
    8178      ELSE                         ;   zland = 0._wp     ! zero by default 
     
    8683      ! ------------------------------- ! 
    8784      ! 
    88       IF( PRESENT( cd_mpp ) ) THEN     !==  halos filled with inner values  ==! 
    89          ! 
    90          DO jf = 1, ipf                      ! number of arrays to be treated 
    91             ! 
    92             DO jl = 1, ipl                   ! CAUTION: ptab is defined only between nld and nle 
    93                DO jk = 1, ipk 
    94                   DO jj = nlcj+1, jpj                 ! added line(s)   (inner only) 
    95                      ARRAY_IN(nldi  :nlei  ,jj,jk,jl,jf) = ARRAY_IN(nldi:nlei,nlej,jk,jl,jf) 
    96                      ARRAY_IN(1     :nldi-1,jj,jk,jl,jf) = ARRAY_IN(nldi     ,nlej,jk,jl,jf) 
    97                      ARRAY_IN(nlei+1:nlci  ,jj,jk,jl,jf) = ARRAY_IN(     nlei,nlej,jk,jl,jf) 
    98                   END DO 
    99                   DO ji = nlci+1, jpi                 ! added column(s) (full) 
    100                      ARRAY_IN(ji,nldj  :nlej  ,jk,jl,jf) = ARRAY_IN(nlei,nldj:nlej,jk,jl,jf) 
    101                      ARRAY_IN(ji,1     :nldj-1,jk,jl,jf) = ARRAY_IN(nlei,nldj     ,jk,jl,jf) 
    102                      ARRAY_IN(ji,nlej+1:jpj   ,jk,jl,jf) = ARRAY_IN(nlei,     nlej,jk,jl,jf) 
    103                   END DO 
    104                END DO 
    105             END DO 
    106             ! 
    107          END DO 
    108          ! 
    109       ELSE                              !==  standard close or cyclic treatment  ==! 
     85      IF( .NOT. PRESENT( cd_mpp ) ) THEN     !==  standard close or cyclic treatment  ==! 
    11086         ! 
    11187         DO jf = 1, ipf                      ! number of arrays to be treated 
     
    136112      ! we play with the neigbours AND the row number because of the periodicity 
    137113      ! 
     114      IF( ABS(nbondi) == 1 ) ALLOCATE( zt3ew(jpj,nn_hls,ipk,ipl,ipf,1), zt3we(jpj,nn_hls,ipk,ipl,ipf,1) ) 
     115      IF(     nbondi  == 0 ) ALLOCATE( zt3ew(jpj,nn_hls,ipk,ipl,ipf,2), zt3we(jpj,nn_hls,ipk,ipl,ipf,2) ) 
     116      ! 
    138117      SELECT CASE ( nbondi )      ! Read Dirichlet lateral conditions 
    139       CASE ( -1, 0, 1 )                ! all exept 2 (i.e. close case) 
     118      CASE ( -1 ) 
     119         iihom = nlci-nreci 
     120         DO jf = 1, ipf 
     121            DO jl = 1, ipl 
     122               DO jk = 1, ipk 
     123                  DO jh = 1, nn_hls 
     124                     zt3we(:,jh,jk,jl,jf,1) = ARRAY_IN(iihom +jh,:,jk,jl,jf) 
     125                  END DO 
     126               END DO 
     127            END DO 
     128         END DO 
     129      CASE ( 0 ) 
    140130         iihom = nlci-nreci 
    141131         DO jf = 1, ipf 
     
    149139            END DO 
    150140         END DO 
    151       END SELECT 
    152       ! 
     141      CASE ( 1 ) 
     142         iihom = nlci-nreci 
     143         DO jf = 1, ipf 
     144            DO jl = 1, ipl 
     145               DO jk = 1, ipk 
     146                  DO jh = 1, nn_hls 
     147                     zt3ew(:,jh,jk,jl,jf,1) = ARRAY_IN(nn_hls+jh,:,jk,jl,jf) 
     148                  END DO 
     149               END DO 
     150            END DO 
     151         END DO 
     152      END SELECT 
    153153      !                           ! Migrations 
    154154      imigr = nn_hls * jpj * ipk * ipl * ipf       
     
    159159      CASE ( -1 ) 
    160160         CALL mppsend( 2, zt3we(1,1,1,1,1,1), imigr, noea, ml_req1 ) 
    161          CALL mpprecv( 1, zt3ew(1,1,1,1,1,2), imigr, noea ) 
     161         CALL mpprecv( 1, zt3ew(1,1,1,1,1,1), imigr, noea ) 
    162162         IF(l_isend)   CALL mpi_wait(ml_req1, ml_stat, ml_err) 
    163163      CASE ( 0 ) 
     
    170170      CASE ( 1 ) 
    171171         CALL mppsend( 1, zt3ew(1,1,1,1,1,1), imigr, nowe, ml_req1 ) 
    172          CALL mpprecv( 2, zt3we(1,1,1,1,1,2), imigr, nowe ) 
     172         CALL mpprecv( 2, zt3we(1,1,1,1,1,1), imigr, nowe ) 
    173173         IF(l_isend)   CALL mpi_wait(ml_req1, ml_stat, ml_err ) 
    174174      END SELECT 
    175175      ! 
    176176      IF( ln_timing ) CALL tic_tac(.FALSE.) 
    177       ! 
    178177      ! 
    179178      !                           ! Write Dirichlet lateral conditions 
     
    186185               DO jk = 1, ipk 
    187186                  DO jh = 1, nn_hls 
    188                      ARRAY_IN(iihom+jh,:,jk,jl,jf) = zt3ew(:,jh,jk,jl,jf,2) 
     187                     ARRAY_IN(iihom+jh,:,jk,jl,jf) = zt3ew(:,jh,jk,jl,jf,1) 
    189188                  END DO 
    190189               END DO 
     
    207206               DO jk = 1, ipk 
    208207                  DO jh = 1, nn_hls 
    209                      ARRAY_IN(jh      ,:,jk,jl,jf) = zt3we(:,jh,jk,jl,jf,2) 
    210                   END DO 
    211                END DO 
    212             END DO 
    213          END DO 
    214       END SELECT 
     208                     ARRAY_IN(jh      ,:,jk,jl,jf) = zt3we(:,jh,jk,jl,jf,1) 
     209                  END DO 
     210               END DO 
     211            END DO 
     212         END DO 
     213      END SELECT 
     214      ! 
     215      IF( nbondi /= 2 ) DEALLOCATE( zt3ew, zt3we ) 
    215216 
    216217      ! 3. North and south directions 
     
    218219      ! always closed : we play only with the neigbours 
    219220      ! 
    220       IF( nbondj /= 2 ) THEN      ! Read Dirichlet lateral conditions 
     221      IF( ABS(nbondj) == 1 ) ALLOCATE( zt3ns(jpi,nn_hls,ipk,ipl,ipf,1), zt3sn(jpi,nn_hls,ipk,ipl,ipf,1) ) 
     222      IF(     nbondj  == 0 ) ALLOCATE( zt3ns(jpi,nn_hls,ipk,ipl,ipf,2), zt3sn(jpi,nn_hls,ipk,ipl,ipf,2) ) 
     223      ! 
     224      SELECT CASE ( nbondj ) 
     225      CASE ( -1 ) 
     226         ijhom = nlcj-nrecj 
     227         DO jf = 1, ipf 
     228            DO jl = 1, ipl 
     229               DO jk = 1, ipk 
     230                  DO jh = 1, nn_hls 
     231                     zt3sn(:,jh,jk,jl,jf,1) = ARRAY_IN(:,ijhom +jh,jk,jl,jf) 
     232                  END DO 
     233               END DO 
     234            END DO 
     235         END DO 
     236      CASE ( 0 ) 
    221237         ijhom = nlcj-nrecj 
    222238         DO jf = 1, ipf 
     
    230246            END DO 
    231247         END DO 
    232       ENDIF 
     248      CASE ( 1 ) 
     249         ijhom = nlcj-nrecj 
     250         DO jf = 1, ipf 
     251            DO jl = 1, ipl 
     252               DO jk = 1, ipk 
     253                  DO jh = 1, nn_hls 
     254                     zt3ns(:,jh,jk,jl,jf,1) = ARRAY_IN(:,nn_hls+jh,jk,jl,jf) 
     255                  END DO 
     256               END DO 
     257            END DO 
     258         END DO 
     259      END SELECT 
    233260      ! 
    234261      !                           ! Migrations 
     
    240267      CASE ( -1 ) 
    241268         CALL mppsend( 4, zt3sn(1,1,1,1,1,1), imigr, nono, ml_req1 ) 
    242          CALL mpprecv( 3, zt3ns(1,1,1,1,1,2), imigr, nono ) 
     269         CALL mpprecv( 3, zt3ns(1,1,1,1,1,1), imigr, nono ) 
    243270         IF(l_isend) CALL mpi_wait(ml_req1, ml_stat, ml_err ) 
    244271      CASE ( 0 ) 
     
    251278      CASE ( 1 ) 
    252279         CALL mppsend( 3, zt3ns(1,1,1,1,1,1), imigr, noso, ml_req1 ) 
    253          CALL mpprecv( 4, zt3sn(1,1,1,1,1,2), imigr, noso ) 
     280         CALL mpprecv( 4, zt3sn(1,1,1,1,1,1), imigr, noso ) 
    254281         IF(l_isend)   CALL mpi_wait(ml_req1, ml_stat, ml_err ) 
    255282      END SELECT 
     
    265292               DO jk = 1, ipk 
    266293                  DO jh = 1, nn_hls 
    267                      ARRAY_IN(:,ijhom+jh,jk,jl,jf) = zt3ns(:,jh,jk,jl,jf,2) 
     294                     ARRAY_IN(:,ijhom+jh,jk,jl,jf) = zt3ns(:,jh,jk,jl,jf,1) 
    268295                  END DO 
    269296               END DO 
     
    286313               DO jk = 1, ipk 
    287314                  DO jh = 1, nn_hls 
    288                      ARRAY_IN(:,jh,jk,jl,jf) = zt3sn(:,jh,jk,jl,jf,2) 
    289                   END DO 
    290                END DO 
    291             END DO 
    292          END DO 
    293       END SELECT 
     315                     ARRAY_IN(:,jh,jk,jl,jf) = zt3sn(:,jh,jk,jl,jf,1) 
     316                  END DO 
     317               END DO 
     318            END DO 
     319         END DO 
     320      END SELECT 
     321      ! 
     322      IF( nbondj /= 2 ) DEALLOCATE( zt3ns, zt3sn ) 
    294323 
    295324      ! 4. north fold treatment 
     
    305334      ENDIF 
    306335      ! 
    307       DEALLOCATE( zt3ns, zt3sn, zt3ew, zt3we ) 
    308       ! 
    309336   END SUBROUTINE ROUTINE_LNK 
    310337 
Note: See TracChangeset for help on using the changeset viewer.