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 14631 for NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/TRA/traldf_lap_blp.F90 – NEMO

Ignore:
Timestamp:
2021-03-23T17:55:26+01:00 (3 years ago)
Author:
hadcv
Message:

#2600: Update TRA tiling after [14576] merge (includes tra_ldf_triad changes missing from [14607])

File:
1 edited

Legend:

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

    r14576 r14631  
    103103      ! 
    104104      INTEGER  ::   ji, jj, jk, jn      ! dummy loop indices 
     105      ! NOTE: [halo1-halo2] 
     106      INTEGER  ::   iij 
    105107      REAL(wp) ::   zsign               ! local scalars 
    106108      REAL(wp), DIMENSION(A2D(nn_hls),jpk) ::   ztu, ztv, zaheeu, zaheev 
     
    121123      ENDIF 
    122124      ! 
     125      ! NOTE: [halo1-halo2] 
     126      ! Define pt_rhs halo points for multi-point haloes in bilaplacian case 
     127      IF( nldf_tra == np_blp .AND. kpass == 1 ) THEN ; iij = nn_hls 
     128      ELSE                                           ; iij = 1 
     129      ENDIF 
     130 
    123131      !                                !==  Initialization of metric arrays used for all tracers  ==! 
    124132      IF( kpass == 1 ) THEN   ;   zsign =  1._wp      ! bilaplacian operator require a minus sign (eddy diffusivity >0) 
     
    126134      ENDIF 
    127135 
    128       DO_3D( nn_hls, nn_hls-1, nn_hls, nn_hls-1, 1, jpkm1 )            !== First derivative (gradient)  ==! 
     136      ! NOTE: [halo1-halo2] 
     137      DO_3D( iij, iij-1, iij, iij-1, 1, jpkm1 )            !== First derivative (gradient)  ==! 
    129138         zaheeu(ji,jj,jk) = zsign * pahu(ji,jj,jk) * e2_e1u(ji,jj) * e3u(ji,jj,jk,Kmm)   !!gm   * umask(ji,jj,jk) pah masked! 
    130139         zaheev(ji,jj,jk) = zsign * pahv(ji,jj,jk) * e1_e2v(ji,jj) * e3v(ji,jj,jk,Kmm)   !!gm   * vmask(ji,jj,jk) 
     
    135144         !                          ! =========== ! 
    136145         ! 
    137          DO_3D( nn_hls, nn_hls-1, nn_hls, nn_hls-1, 1, jpkm1 )            !== First derivative (gradient)  ==! 
     146         ! NOTE: [halo1-halo2] 
     147         DO_3D( iij, iij-1, iij, iij-1, 1, jpkm1 )            !== First derivative (gradient)  ==! 
    138148            ztu(ji,jj,jk) = zaheeu(ji,jj,jk) * ( pt(ji+1,jj  ,jk,jn) - pt(ji,jj,jk,jn) ) 
    139149            ztv(ji,jj,jk) = zaheev(ji,jj,jk) * ( pt(ji  ,jj+1,jk,jn) - pt(ji,jj,jk,jn) ) 
    140150         END_3D 
    141151         IF( ln_zps ) THEN                             ! set gradient at bottom/top ocean level 
    142             DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 )                              ! bottom 
     152            ! NOTE: [halo1-halo2] 
     153            DO_2D( iij, iij-1, iij, iij-1 )                              ! bottom 
    143154               ztu(ji,jj,mbku(ji,jj)) = zaheeu(ji,jj,mbku(ji,jj)) * pgu(ji,jj,jn) 
    144155               ztv(ji,jj,mbkv(ji,jj)) = zaheev(ji,jj,mbkv(ji,jj)) * pgv(ji,jj,jn) 
    145156            END_2D 
    146157            IF( ln_isfcav ) THEN                             ! top in ocean cavities only 
    147                DO_2D( nn_hls, nn_hls-1, nn_hls, nn_hls-1 ) 
     158               ! NOTE: [halo1-halo2] 
     159               DO_2D( iij, iij-1, iij, iij-1 ) 
    148160                  IF( miku(ji,jj) > 1 )   ztu(ji,jj,miku(ji,jj)) = zaheeu(ji,jj,miku(ji,jj)) * pgui(ji,jj,jn) 
    149161                  IF( mikv(ji,jj) > 1 )   ztv(ji,jj,mikv(ji,jj)) = zaheev(ji,jj,mikv(ji,jj)) * pgvi(ji,jj,jn) 
     
    152164         ENDIF 
    153165         ! 
    154          DO_3D_OVR( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 )        !== Second derivative (divergence) added to the general tracer trends  ==! 
    155             pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + (  ztu(ji,jj,jk) - ztu(ji-1,jj,jk)     & 
    156                &                                      +    ztv(ji,jj,jk) - ztv(ji,jj-1,jk) )   & 
     166         ! NOTE: [halo1-halo2] 
     167         DO_3D( iij-1, iij-1, iij-1, iij-1, 1, jpkm1 )        !== Second derivative (divergence) added to the general tracer trends  ==! 
     168            ! NOTE: [halo1-halo2] 
     169            ! Extra brackets required to ensure consistent floating point arithmetic for different nn_hls for bilaplacian 
     170            pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + (  (ztu(ji,jj,jk) - ztu(ji-1,jj,jk))     & 
     171               &                                      +    (ztv(ji,jj,jk) - ztv(ji,jj-1,jk)) )   & 
    157172               &                                      / ( e1e2t(ji,jj) * e3t(ji,jj,jk,Kmm) ) 
    158173         END_3D 
     
    229244      END SELECT 
    230245      ! 
    231       ! [comm_cleanup]  
     246      ! [comm_cleanup] 
    232247      IF (nn_hls.EQ.1) CALL lbc_lnk( 'traldf_lap_blp', zlap(:,:,:,:) , 'T', 1.0_wp )     ! Lateral boundary conditions (unchanged sign) 
    233248      !                                               ! Partial top/bottom cell: GRADh( zlap ) 
Note: See TracChangeset for help on using the changeset viewer.