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 13295 for NEMO/trunk/src/OCE/LDF/ldfslp.F90 – NEMO

Ignore:
Timestamp:
2020-07-10T20:24:21+02:00 (4 years ago)
Author:
acc
Message:

Replace do-loop macros in the trunk with alternative forms with greater flexibility for extra halo applications. This alters a lot of routines but does not change any behaviour or results. do_loop_substitute.h90 is greatly simplified by this change. SETTE results are identical to those with the previous revision

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/src/OCE/LDF/ldfslp.F90

    r13237 r13295  
    137137      zwz(:,:,:) = 0._wp 
    138138      ! 
    139       DO_3D_10_10( 1, jpk ) 
     139      DO_3D( 1, 0, 1, 0, 1, jpk ) 
    140140         zgru(ji,jj,jk) = umask(ji,jj,jk) * ( prd(ji+1,jj  ,jk) - prd(ji,jj,jk) ) 
    141141         zgrv(ji,jj,jk) = vmask(ji,jj,jk) * ( prd(ji  ,jj+1,jk) - prd(ji,jj,jk) ) 
    142142      END_3D 
    143143      IF( ln_zps ) THEN                           ! partial steps correction at the bottom ocean level 
    144          DO_2D_10_10 
     144         DO_2D( 1, 0, 1, 0 ) 
    145145            zgru(ji,jj,mbku(ji,jj)) = gru(ji,jj) 
    146146            zgrv(ji,jj,mbkv(ji,jj)) = grv(ji,jj) 
     
    148148      ENDIF 
    149149      IF( ln_zps .AND. ln_isfcav ) THEN           ! partial steps correction at the bottom ocean level 
    150          DO_2D_10_10 
     150         DO_2D( 1, 0, 1, 0 ) 
    151151            IF( miku(ji,jj) > 1 )   zgru(ji,jj,miku(ji,jj)) = grui(ji,jj)  
    152152            IF( mikv(ji,jj) > 1 )   zgrv(ji,jj,mikv(ji,jj)) = grvi(ji,jj) 
     
    173173      ! 
    174174      IF ( ln_isfcav ) THEN 
    175          DO_2D_00_00 
     175         DO_2D( 0, 0, 0, 0 ) 
    176176            zslpml_hmlpu(ji,jj) = uslpml(ji,jj) / ( MAX(hmlpt  (ji,jj), hmlpt  (ji+1,jj  ), 5._wp) & 
    177177               &                                  - MAX(risfdep(ji,jj), risfdep(ji+1,jj  )       ) )  
     
    180180         END_2D 
    181181      ELSE 
    182          DO_2D_00_00 
     182         DO_2D( 0, 0, 0, 0 ) 
    183183            zslpml_hmlpu(ji,jj) = uslpml(ji,jj) / MAX(hmlpt(ji,jj), hmlpt(ji+1,jj  ), 5._wp) 
    184184            zslpml_hmlpv(ji,jj) = vslpml(ji,jj) / MAX(hmlpt(ji,jj), hmlpt(ji  ,jj+1), 5._wp) 
     
    186186      END IF 
    187187 
    188       DO_3D_00_00( 2, jpkm1 ) 
     188      DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    189189         !                                      ! horizontal and vertical density gradient at u- and v-points 
    190190         zau = zgru(ji,jj,jk) * r1_e1u(ji,jj) 
     
    233233      !                                            !* horizontal Shapiro filter 
    234234      DO jk = 2, jpkm1 
    235          DO_2D_00_00 
     235         DO_2D( 0, 0, 0, 0 ) 
    236236            uslp(ji,jj,jk) = z1_16 * (        zwz(ji-1,jj-1,jk) + zwz(ji+1,jj-1,jk)      & 
    237237               &                       +      zwz(ji-1,jj+1,jk) + zwz(ji+1,jj+1,jk)      & 
     
    260260         END DO 
    261261         !                                        !* decrease along coastal boundaries 
    262          DO_2D_00_00 
     262         DO_2D( 0, 0, 0, 0 ) 
    263263            uslp(ji,jj,jk) = uslp(ji,jj,jk) * ( umask(ji,jj+1,jk) + umask(ji,jj-1,jk  ) ) * 0.5_wp   & 
    264264               &                            * ( umask(ji,jj  ,jk) + umask(ji,jj  ,jk+1) ) * 0.5_wp 
     
    272272      ! ===========================      | wslpj = mij( d/dj( prd ) / d/dz( prd ) 
    273273      ! 
    274       DO_3D_00_00( 2, jpkm1 ) 
     274      DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    275275         !                                  !* Local vertical density gradient evaluated from N^2 
    276276         zbw = zm1_2g * pn2 (ji,jj,jk) * ( prd (ji,jj,jk) + prd (ji,jj,jk-1) + 2. ) 
     
    307307      !                                           !* horizontal Shapiro filter 
    308308      DO jk = 2, jpkm1 
    309          DO_2D_00_00 
     309         DO_2D( 0, 0, 0, 0 ) 
    310310            zcofw = wmask(ji,jj,jk) * z1_16 
    311311            wslpi(ji,jj,jk) = (         zwz(ji-1,jj-1,jk) + zwz(ji+1,jj-1,jk)     & 
     
    338338         END DO 
    339339         !                                        !* decrease in vicinity of topography 
    340          DO_2D_00_00 
     340         DO_2D( 0, 0, 0, 0 ) 
    341341            zck =   ( umask(ji,jj,jk) + umask(ji-1,jj,jk) )   & 
    342342               &  * ( vmask(ji,jj,jk) + vmask(ji,jj-1,jk) ) * 0.25 
     
    401401         ! 
    402402         ip = jl   ;   jp = jl                ! guaranteed nonzero gradients ( absolute value larger than repsln) 
    403          DO_3D_10_10( 1, jpkm1 ) 
     403         DO_3D( 1, 0, 1, 0, 1, jpkm1 ) 
    404404            zdit = ( ts(ji+1,jj,jk,jp_tem,Kbb) - ts(ji,jj,jk,jp_tem,Kbb) )    ! i-gradient of T & S at u-point 
    405405            zdis = ( ts(ji+1,jj,jk,jp_sal,Kbb) - ts(ji,jj,jk,jp_sal,Kbb) ) 
     
    413413         ! 
    414414         IF( ln_zps .AND. l_grad_zps ) THEN     ! partial steps: correction of i- & j-grad on bottom 
    415             DO_2D_10_10 
     415            DO_2D( 1, 0, 1, 0 ) 
    416416               iku  = mbku(ji,jj)          ;   ikv  = mbkv(ji,jj)             ! last ocean level (u- & v-points) 
    417417               zdit = gtsu(ji,jj,jp_tem)   ;   zdjt = gtsv(ji,jj,jp_tem)      ! i- & j-gradient of Temperature 
     
    427427 
    428428      DO kp = 0, 1                            !==  unmasked before density i- j-, k-gradients  ==! 
    429          DO_3D_11_11( 1, jpkm1 ) 
     429         DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    430430            IF( jk+kp > 1 ) THEN        ! k-gradient of T & S a jk+kp 
    431431               zdkt = ( ts(ji,jj,jk+kp-1,jp_tem,Kbb) - ts(ji,jj,jk+kp,jp_tem,Kbb) ) 
     
    442442      END DO 
    443443      ! 
    444       DO_2D_11_11 
     444      DO_2D( 1, 1, 1, 1 ) 
    445445         jk = MIN( nmln(ji,jj), mbkt(ji,jj) ) + 1     ! MIN in case ML depth is the ocean depth 
    446446         z1_mlbw(ji,jj) = 1._wp / gdepw(ji,jj,jk,Kmm) 
     
    462462      DO jl = 0, 1                            ! calculate slope of the 4 triads immediately ONE level below mixed-layer base 
    463463         DO kp = 0, 1                         ! with only the slope-max limit   and   MASKED 
    464             DO_2D_10_10 
     464            DO_2D( 1, 0, 1, 0 ) 
    465465               ip = jl   ;   jp = jl 
    466466               ! 
     
    499499               ! Must mask contribution to slope from dz/dx at constant s for triads jk=1,kp=0 that poke up though ocean surface 
    500500               znot_thru_surface = REAL( 1-1/(jk+kp), wp )  !jk+kp=1,=0.; otherwise=1.0 
    501                DO_2D_10_10 
     501               DO_2D( 1, 0, 1, 0 ) 
    502502                  ! 
    503503                  ! Calculate slope relative to geopotentials used for GM skew fluxes 
     
    628628      ! 
    629629      !                                            !==   surface mixed layer mask   ! 
    630       DO_3D_11_11( 1, jpk ) 
     630      DO_3D( 1, 1, 1, 1, 1, jpk ) 
    631631         ik = nmln(ji,jj) - 1 
    632632         IF( jk <= ik ) THEN   ;   omlmask(ji,jj,jk) = 1._wp 
     
    646646      !----------------------------------------------------------------------- 
    647647      ! 
    648       DO_2D_00_00 
     648      DO_2D( 0, 0, 0, 0 ) 
    649649         !                        !==   Slope at u- & v-points just below the Mixed Layer   ==! 
    650650         ! 
Note: See TracChangeset for help on using the changeset viewer.