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.
Diff from NEMO/branches/2021/dev_r14393_HPC-03_Mele_Comm_Cleanup/src/OCE/TRA/traldf_iso.F90@14757 to NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/TRA/traldf_iso.F90@14765 – NEMO

Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/TRA/traldf_iso.F90

    r14757 r14765  
    132132      INTEGER  ::  ji, jj, jk, jn   ! dummy loop indices 
    133133      INTEGER  ::  ikt 
    134       INTEGER  ::  ierr             ! local integer 
     134      INTEGER  ::  ierr, iij        ! local integer 
    135135      REAL(wp) ::  zmsku, zahu_w, zabe1, zcof1, zcoef3   ! local scalars 
    136136      REAL(wp) ::  zmskv, zahv_w, zabe2, zcof2, zcoef4   !   -      - 
     
    141141      ! 
    142142      IF( kpass == 1 .AND. kt == kit000 )  THEN 
    143          IF( ntile == 0 .OR. ntile == 1 )  THEN                       ! Do only on the first tile 
     143         IF( .NOT. l_istiled .OR. ntile == 1 )  THEN                       ! Do only on the first tile 
    144144            IF(lwp) WRITE(numout,*) 
    145145            IF(lwp) WRITE(numout,*) 'tra_ldf_iso : rotated laplacian diffusion operator on ', cdtype 
     
    147147         ENDIF 
    148148         ! 
    149          DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpk )  
     149         DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpk ) 
    150150            akz     (ji,jj,jk) = 0._wp 
    151151            ah_wslp2(ji,jj,jk) = 0._wp 
     
    153153      ENDIF 
    154154      ! 
    155       IF( ntile == 0 .OR. ntile == 1 )  THEN                           ! Do only on the first tile 
     155      IF( .NOT. l_istiled .OR. ntile == 1 )  THEN                           ! Do only on the first tile 
    156156         l_hst = .FALSE. 
    157157         l_ptr = .FALSE. 
     
    161161      ENDIF 
    162162      ! 
     163      ! Define pt_rhs halo points for multi-point haloes in bilaplacian case 
     164      IF( nldf_tra == np_blp_i .AND. kpass == 1 ) THEN ; iij = nn_hls 
     165      ELSE                                             ; iij = 1 
     166      ENDIF 
     167 
    163168      ! 
    164169      IF( kpass == 1 ) THEN   ;   zsign =  1._wp      ! bilaplacian operator require a minus sign (eddy diffusivity >0) 
     
    172177      IF( kpass == 1 ) THEN                  !==  first pass only  ==! 
    173178         ! 
    174          DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )  
     179         DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 
    175180            ! 
    176181            zmsku = wmask(ji,jj,jk) / MAX(   umask(ji  ,jj,jk-1) + umask(ji-1,jj,jk)          & 
     
    186191            zahv_w = ( (  pahv(ji,jj  ,jk-1) + pahv(ji,jj-1,jk)                    & 
    187192               &       )                                                           & ! bracket for halo 1 - halo 2 compatibility 
    188                &       + ( pahv(ji,jj-1,jk-1) + pahv(ji,jj  ,jk)                   &  
     193               &       + ( pahv(ji,jj-1,jk-1) + pahv(ji,jj  ,jk)                   & 
    189194               &         ) ) * zmskv                                                 ! bracket for halo 1 - halo 2 compatibility 
    190195               ! 
     
    194199         ! 
    195200         IF( ln_traldf_msc ) THEN                ! stabilizing vertical diffusivity coefficient 
    196             DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )  
     201            DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 
    197202               ! round brackets added to fix the order of floating point operations 
    198203               ! needed to ensure halo 1 - halo 2 compatibility 
     
    202207                  &            )                                                                               & ! bracket for halo 1 - halo 2 compatibility 
    203208                  &            + ( ( pahv(ji,jj  ,jk) + pahv(ji,jj  ,jk-1) ) / ( e2v(ji,jj  ) * e2v(ji,jj  ) ) & 
    204                   &              + ( pahv(ji,jj-1,jk) + pahv(ji,jj-1,jk-1) ) / ( e2v(ji,jj-1) * e2v(ji,jj-1) ) &   
     209                  &              + ( pahv(ji,jj-1,jk) + pahv(ji,jj-1,jk-1) ) / ( e2v(ji,jj-1) * e2v(ji,jj-1) ) & 
    205210                  &              ) )                                                                             ! bracket for halo 1 - halo 2 compatibility 
    206211            END_3D 
    207212            ! 
    208213            IF( ln_traldf_blp ) THEN                ! bilaplacian operator 
    209                DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )  
     214               DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 
    210215                  akz(ji,jj,jk) = 16._wp   & 
    211216                     &   * ah_wslp2   (ji,jj,jk)   & 
     
    215220               END_3D 
    216221            ELSEIF( ln_traldf_lap ) THEN              ! laplacian operator 
    217                DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )  
     222               DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 
    218223                  ze3w_2 = e3w(ji,jj,jk,Kmm) * e3w(ji,jj,jk,Kmm) 
    219224                  zcoef0 = rDt * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2  ) 
     
    223228           ! 
    224229         ELSE                                    ! 33 flux set to zero with akz=ah_wslp2 ==>> computed in full implicit 
    225             DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpk )  
     230            DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpk ) 
    226231               akz(ji,jj,jk) = ah_wslp2(ji,jj,jk) 
    227232            END_3D 
     
    236241         !!   I - masked horizontal derivative 
    237242         !!---------------------------------------------------------------------- 
    238 !!gm : bug.... why (x,:,:)?   (1,jpj,:) and (jpi,1,:) should be sufficient.... 
    239          zdit (ntsi-nn_hls,:,:) = 0._wp     ;     zdit (ntei+nn_hls,:,:) = 0._wp 
    240          zdjt (ntsi-nn_hls,:,:) = 0._wp     ;     zdjt (ntei+nn_hls,:,:) = 0._wp 
    241          !!end 
     243         zdit(:,:,:) = 0._wp 
     244         zdjt(:,:,:) = 0._wp 
    242245 
    243246         ! Horizontal tracer gradient 
    244          DO_3D( nn_hls, nn_hls-1, nn_hls, nn_hls-1, 1, jpkm1 )  
     247         DO_3D( iij, iij-1, iij, iij-1, 1, jpkm1 ) 
    245248            zdit(ji,jj,jk) = ( pt(ji+1,jj  ,jk,jn) - pt(ji,jj,jk,jn) ) * umask(ji,jj,jk) 
    246249            zdjt(ji,jj,jk) = ( pt(ji  ,jj+1,jk,jn) - pt(ji,jj,jk,jn) ) * vmask(ji,jj,jk) 
    247250         END_3D 
    248251         IF( ln_zps ) THEN      ! botton and surface ocean correction of the horizontal gradient 
    249                DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 )            ! bottom correction (partial bottom cell) 
     252            DO_2D( iij, iij-1, iij, iij-1 )            ! bottom correction (partial bottom cell) 
    250253               zdit(ji,jj,mbku(ji,jj)) = pgu(ji,jj,jn) 
    251254               zdjt(ji,jj,mbkv(ji,jj)) = pgv(ji,jj,jn) 
    252255            END_2D 
    253256            IF( ln_isfcav ) THEN      ! first wet level beneath a cavity 
    254                DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 )  
     257               DO_2D( iij, iij-1, iij, iij-1 ) 
    255258                  IF( miku(ji,jj) > 1 )   zdit(ji,jj,miku(ji,jj)) = pgui(ji,jj,jn) 
    256259                  IF( mikv(ji,jj) > 1 )   zdjt(ji,jj,mikv(ji,jj)) = pgvi(ji,jj,jn) 
     
    265268         DO jk = 1, jpkm1                                 ! Horizontal slab 
    266269            ! 
    267             DO_2D( nn_hls, nn_hls, nn_hls, nn_hls ) 
     270            DO_2D( iij, iij, iij, iij ) 
    268271               !                             !== Vertical tracer gradient 
    269272               zdk1t(ji,jj) = ( pt(ji,jj,jk,jn) - pt(ji,jj,jk+1,jn) ) * wmask(ji,jj,jk+1)     ! level jk+1 
     
    274277            END_2D 
    275278            ! 
    276             DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 )           !==  Horizontal fluxes 
     279            DO_2D( iij, iij-1, iij, iij-1 )           !==  Horizontal fluxes 
    277280               zabe1 = pahu(ji,jj,jk) * e2_e1u(ji,jj) * e3u(ji,jj,jk,Kmm) 
    278281               zabe2 = pahv(ji,jj,jk) * e1_e2v(ji,jj) * e3v(ji,jj,jk,Kmm) 
     
    292295                  &               + zcof1 * ( ( zdkt (ji+1,jj) + zdk1t(ji,jj)    & 
    293296                  &                           )                                  & ! bracket for halo 1 - halo 2 compatibility 
    294                   &                         + ( zdk1t(ji+1,jj) + zdkt (ji,jj)    &  
     297                  &                         + ( zdk1t(ji+1,jj) + zdkt (ji,jj)    & 
    295298                  &                           )                                  & ! bracket for halo 1 - halo 2 compatibility 
    296299                  &                         ) ) * umask(ji,jj,jk) 
     
    300303                  &                         + ( zdk1t(ji,jj+1) + zdkt (ji,jj)    & 
    301304                  &                           )                                  & ! bracket for halo 1 - halo 2 compatibility 
    302                   &                         ) ) * vmask(ji,jj,jk)       
     305                  &                         ) ) * vmask(ji,jj,jk) 
    303306            END_2D 
    304307            ! 
    305             DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 )           !== horizontal divergence and add to pta 
     308            DO_2D( iij-1, iij-1, iij-1, iij-1 )           !== horizontal divergence and add to pta 
    306309               ! round brackets added to fix the order of floating point operations 
    307310               ! needed to ensure halo 1 - halo 2 compatibility 
     
    324327         ztfw(:,:, 1 ) = 0._wp      ;      ztfw(:,:,jpk) = 0._wp 
    325328 
    326          DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )    ! interior (2=<jk=<jpk-1) 
     329         DO_3D( iij-1, iij-1, iij-1, iij-1, 2, jpkm1 )    ! interior (2=<jk=<jpk-1) 
    327330            ! 
    328331            zmsku = wmask(ji,jj,jk) / MAX(   umask(ji  ,jj,jk-1) + umask(ji-1,jj,jk)          & 
     
    344347                  &                     )                                              & ! bracket for halo 1 - halo 2 compatibility 
    345348                  &                   + ( zdit(ji-1,jj  ,jk-1) + zdit(ji  ,jj  ,jk)    & 
    346                   &                     )                                              & ! bracket for halo 1 - halo 2 compatibility  
     349                  &                     )                                              & ! bracket for halo 1 - halo 2 compatibility 
    347350                  &                   )                                                & 
    348351                  &        + zcoef4 * ( ( zdjt(ji  ,jj  ,jk-1) + zdjt(ji  ,jj-1,jk)    & 
     
    354357         !                                !==  add the vertical 33 flux  ==! 
    355358         IF( ln_traldf_lap ) THEN               ! laplacian case: eddy coef = ah_wslp2 - akz 
    356             DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )  
     359            DO_3D( iij-1, iij-1, iij-1, iij-1, 2, jpkm1 ) 
    357360               ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * wmask(ji,jj,jk)   & 
    358361                  &                            * ( ah_wslp2(ji,jj,jk) - akz(ji,jj,jk) )               & 
     
    363366            SELECT CASE( kpass ) 
    364367            CASE(  1  )                            ! 1st pass : eddy coef = ah_wslp2 
    365                DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )  
     368               DO_3D( iij-1, iij-1, iij-1, iij-1, 2, jpkm1 ) 
    366369                  ztfw(ji,jj,jk) =   & 
    367370                     &  ztfw(ji,jj,jk) + ah_wslp2(ji,jj,jk) * e1e2t(ji,jj)   & 
     
    369372               END_3D 
    370373            CASE(  2  )                         ! 2nd pass : eddy flux = ah_wslp2 and akz applied on pt  and pt2 gradients, resp. 
    371                DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )  
     374               DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    372375                  ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * wmask(ji,jj,jk)                  & 
    373376                     &                            * (  ah_wslp2(ji,jj,jk) * ( pt (ji,jj,jk-1,jn) - pt (ji,jj,jk,jn) )   & 
     
    377380         ENDIF 
    378381         ! 
    379          DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 )    !==  Divergence of vertical fluxes added to pta  ==!  
     382         DO_3D( iij-1, iij-1, iij-1, iij-1, 1, jpkm1 )    !==  Divergence of vertical fluxes added to pta  ==! 
    380383            pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + zsign * (  ztfw (ji,jj,jk) - ztfw(ji,jj,jk+1)  ) * r1_e1e2t(ji,jj)   & 
    381384               &                                             / e3t(ji,jj,jk,Kmm) 
Note: See TracChangeset for help on using the changeset viewer.