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 13540 for NEMO/branches/2020/r12377_ticket2386/src/OCE/TRA – NEMO

Ignore:
Timestamp:
2020-09-29T12:41:06+02:00 (4 years ago)
Author:
andmirek
Message:

Ticket #2386: update to latest trunk

Location:
NEMO/branches/2020/r12377_ticket2386
Files:
22 edited
1 copied

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/r12377_ticket2386

    • Property svn:externals
      •  

        old new  
        33^/utils/build/mk@HEAD         mk 
        44^/utils/tools@HEAD            tools 
        5 ^/vendors/AGRIF/dev@HEAD      ext/AGRIF 
         5^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS      ext/AGRIF 
        66^/vendors/FCM@HEAD            ext/FCM 
        77^/vendors/IOIPSL@HEAD         ext/IOIPSL 
        88 
        99# SETTE 
        10 ^/utils/CI/sette@HEAD         sette 
         10^/utils/CI/sette@13507        sette 
  • NEMO/branches/2020/r12377_ticket2386/src/OCE/TRA/eosbn2.F90

    r12511 r13540  
    180180   !! * Substitutions 
    181181#  include "do_loop_substitute.h90" 
     182#  include "domzgr_substitute.h90" 
    182183   !!---------------------------------------------------------------------- 
    183184   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    237238      CASE( np_teos10, np_eos80 )                !==  polynomial TEOS-10 / EOS-80 ==! 
    238239         ! 
    239          DO_3D_11_11( 1, jpkm1 ) 
     240         DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    240241            ! 
    241242            zh  = pdep(ji,jj,jk) * r1_Z0                                  ! depth 
     
    273274      CASE( np_seos )                !==  simplified EOS  ==! 
    274275         ! 
    275          DO_3D_11_11( 1, jpkm1 ) 
     276         DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    276277            zt  = pts  (ji,jj,jk,jp_tem) - 10._wp 
    277278            zs  = pts  (ji,jj,jk,jp_sal) - 35._wp 
     
    337338            END DO 
    338339            ! 
    339             DO_3D_11_11( 1, jpkm1 ) 
     340            DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    340341               ! 
    341342               ! compute density (2*nn_sto_eos) times: 
     
    387388         ! Non-stochastic equation of state 
    388389         ELSE 
    389             DO_3D_11_11( 1, jpkm1 ) 
     390            DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    390391               ! 
    391392               zh  = pdep(ji,jj,jk) * r1_Z0                                  ! depth 
     
    425426      CASE( np_seos )                !==  simplified EOS  ==! 
    426427         ! 
    427          DO_3D_11_11( 1, jpkm1 ) 
     428         DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    428429            zt  = pts  (ji,jj,jk,jp_tem) - 10._wp 
    429430            zs  = pts  (ji,jj,jk,jp_sal) - 35._wp 
     
    479480      CASE( np_teos10, np_eos80 )                !==  polynomial TEOS-10 / EOS-80 ==! 
    480481         ! 
    481          DO_2D_11_11 
     482         DO_2D( 1, 1, 1, 1 ) 
    482483            ! 
    483484            zh  = pdep(ji,jj) * r1_Z0                                  ! depth 
     
    514515      CASE( np_seos )                !==  simplified EOS  ==! 
    515516         ! 
    516          DO_2D_11_11 
     517         DO_2D( 1, 1, 1, 1 ) 
    517518            ! 
    518519            zt    = pts  (ji,jj,jp_tem)  - 10._wp 
     
    562563      CASE( np_teos10, np_eos80 )                !==  polynomial TEOS-10 / EOS-80 ==! 
    563564         ! 
    564          DO_3D_11_11( 1, jpkm1 ) 
     565         DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    565566            ! 
    566567            zh  = gdept(ji,jj,jk,Kmm) * r1_Z0                                ! depth 
     
    615616      CASE( np_seos )                  !==  simplified EOS  ==! 
    616617         ! 
    617          DO_3D_11_11( 1, jpkm1 ) 
     618         DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    618619            zt  = pts (ji,jj,jk,jp_tem) - 10._wp   ! pot. temperature anomaly (t-T0) 
    619620            zs  = pts (ji,jj,jk,jp_sal) - 35._wp   ! abs. salinity anomaly (s-S0) 
     
    669670      CASE( np_teos10, np_eos80 )                !==  polynomial TEOS-10 / EOS-80 ==! 
    670671         ! 
    671          DO_2D_11_11 
     672         DO_2D( 1, 1, 1, 1 ) 
    672673            ! 
    673674            zh  = pdep(ji,jj) * r1_Z0                                  ! depth 
     
    722723      CASE( np_seos )                  !==  simplified EOS  ==! 
    723724         ! 
    724          DO_2D_11_11 
     725         DO_2D( 1, 1, 1, 1 ) 
    725726            ! 
    726727            zt    = pts  (ji,jj,jp_tem) - 10._wp   ! pot. temperature anomaly (t-T0) 
     
    872873      IF( ln_timing )   CALL timing_start('bn2') 
    873874      ! 
    874       DO_3D_11_11( 2, jpkm1 ) 
     875      DO_3D( 1, 1, 1, 1, 2, jpkm1 )      ! interior points only (2=< jk =< jpkm1 ); surface and bottom value set to zero one for all in istate.F90 
    875876         zrw =   ( gdepw(ji,jj,jk  ,Kmm) - gdept(ji,jj,jk,Kmm) )   & 
    876877            &  / ( gdept(ji,jj,jk-1,Kmm) - gdept(ji,jj,jk,Kmm) )  
     
    920921      z1_T0   = 1._wp/40._wp 
    921922      ! 
    922       DO_2D_11_11 
     923      DO_2D( 1, 1, 1, 1 ) 
    923924         ! 
    924925         zt  = ctmp   (ji,jj) * z1_T0 
     
    973974         ! 
    974975         z1_S0 = 1._wp / 35.16504_wp 
    975          DO_2D_11_11 
     976         DO_2D( 1, 1, 1, 1 ) 
    976977            zs= SQRT( ABS( psal(ji,jj) ) * z1_S0 )           ! square root salinity 
    977978            ptf(ji,jj) = ((((1.46873e-03_wp*zs-9.64972e-03_wp)*zs+2.28348e-02_wp)*zs & 
     
    10801081      CASE( np_teos10, np_eos80 )                !==  polynomial TEOS-10 / EOS-80 ==! 
    10811082         ! 
    1082          DO_3D_11_11( 1, jpkm1 ) 
     1083         DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    10831084            ! 
    10841085            zh  = gdept(ji,jj,jk,Kmm) * r1_Z0                                ! depth 
     
    11391140      CASE( np_seos )                !==  Vallis (2006) simplified EOS  ==! 
    11401141         ! 
    1141          DO_3D_11_11( 1, jpkm1 ) 
     1142         DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    11421143            zt  = pts(ji,jj,jk,jp_tem) - 10._wp  ! temperature anomaly (t-T0) 
    11431144            zs = pts (ji,jj,jk,jp_sal) - 35._wp  ! abs. salinity anomaly (s-S0) 
  • NEMO/branches/2020/r12377_ticket2386/src/OCE/TRA/traadv.F90

    r12511 r13540  
    6666   INTEGER, PARAMETER ::   np_QCK     = 5   ! QUICK scheme 
    6767    
     68#  include "domzgr_substitute.h90" 
    6869   !!---------------------------------------------------------------------- 
    6970   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    9899      IF( ln_wave .AND. ln_sdw )  THEN 
    99100         DO jk = 1, jpkm1                                                       ! eulerian transport + Stokes Drift 
    100             zuu(:,:,jk) = e2u  (:,:) * e3u(:,:,jk,Kmm) * ( uu(:,:,jk,Kmm) + usd(:,:,jk) ) 
    101             zvv(:,:,jk) = e1v  (:,:) * e3v(:,:,jk,Kmm) * ( vv(:,:,jk,Kmm) + vsd(:,:,jk) ) 
    102             zww(:,:,jk) = e1e2t(:,:)                 * ( ww(:,:,jk) + wsd(:,:,jk) ) 
     101            zuu(:,:,jk) =   & 
     102               &  e2u  (:,:) * e3u(:,:,jk,Kmm) * ( uu(:,:,jk,Kmm) + usd(:,:,jk) ) 
     103            zvv(:,:,jk) =   &  
     104               &  e1v  (:,:) * e3v(:,:,jk,Kmm) * ( vv(:,:,jk,Kmm) + vsd(:,:,jk) ) 
     105            zww(:,:,jk) =   &  
     106               &  e1e2t(:,:)                 * ( ww(:,:,jk) + wsd(:,:,jk) ) 
    103107         END DO 
    104108      ELSE 
  • NEMO/branches/2020/r12377_ticket2386/src/OCE/TRA/traadv_cen.F90

    r12377 r13540  
    3737   !! * Substitutions 
    3838#  include "do_loop_substitute.h90" 
     39#  include "domzgr_substitute.h90" 
    3940   !!---------------------------------------------------------------------- 
    4041   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    103104         ! 
    104105         CASE(  2  )                         !* 2nd order centered 
    105             DO_3D_10_10( 1, jpkm1 ) 
     106            DO_3D( 1, 0, 1, 0, 1, jpkm1 ) 
    106107               zwx(ji,jj,jk) = 0.5_wp * pU(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji+1,jj  ,jk,jn,Kmm) ) 
    107108               zwy(ji,jj,jk) = 0.5_wp * pV(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji  ,jj+1,jk,jn,Kmm) ) 
     
    111112            ztu(:,:,jpk) = 0._wp                   ! Bottom value : flux set to zero 
    112113            ztv(:,:,jpk) = 0._wp 
    113             DO_3D_00_00( 1, jpkm1 ) 
     114            DO_3D( 0, 0, 0, 0, 1, jpkm1 )          ! masked gradient 
    114115               ztu(ji,jj,jk) = ( pt(ji+1,jj  ,jk,jn,Kmm) - pt(ji,jj,jk,jn,Kmm) ) * umask(ji,jj,jk) 
    115116               ztv(ji,jj,jk) = ( pt(ji  ,jj+1,jk,jn,Kmm) - pt(ji,jj,jk,jn,Kmm) ) * vmask(ji,jj,jk) 
    116117            END_3D 
    117             CALL lbc_lnk_multi( 'traadv_cen', ztu, 'U', -1. , ztv, 'V', -1. )   ! Lateral boundary cond. 
     118            CALL lbc_lnk_multi( 'traadv_cen', ztu, 'U', -1.0_wp , ztv, 'V', -1.0_wp )   ! Lateral boundary cond. 
    118119            ! 
    119             DO_3D_00_10( 1, jpkm1 ) 
     120            DO_3D( 0, 0, 0, 0, 1, jpkm1 )           ! Horizontal advective fluxes 
    120121               zC2t_u = pt(ji,jj,jk,jn,Kmm) + pt(ji+1,jj  ,jk,jn,Kmm)   ! C2 interpolation of T at u- & v-points (x2) 
    121122               zC2t_v = pt(ji,jj,jk,jn,Kmm) + pt(ji  ,jj+1,jk,jn,Kmm) 
     
    127128               zwy(ji,jj,jk) =  0.5_wp * pV(ji,jj,jk) * zC4t_v 
    128129            END_3D 
     130            CALL lbc_lnk_multi( 'traadv_cen', zwx, 'U', -1. , zwy, 'V', -1. ) 
    129131            ! 
    130132         CASE DEFAULT 
    131             CALL ctl_stop( 'traadv_fct: wrong value for nn_fct' ) 
     133            CALL ctl_stop( 'traadv_cen: wrong value for nn_cen' ) 
    132134         END SELECT 
    133135         ! 
     
    135137         ! 
    136138         CASE(  2  )                         !* 2nd order centered 
    137             DO_3D_00_00( 2, jpk ) 
     139            DO_3D( 0, 0, 0, 0, 2, jpk ) 
    138140               zwz(ji,jj,jk) = 0.5 * pW(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji,jj,jk-1,jn,Kmm) ) * wmask(ji,jj,jk) 
    139141            END_3D 
     
    141143         CASE(  4  )                         !* 4th order compact 
    142144            CALL interp_4th_cpt( pt(:,:,:,jn,Kmm) , ztw )      ! ztw = interpolated value of T at w-point 
    143             DO_3D_00_00( 2, jpkm1 ) 
     145            DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    144146               zwz(ji,jj,jk) = pW(ji,jj,jk) * ztw(ji,jj,jk) * wmask(ji,jj,jk) 
    145147            END_3D 
     
    149151         IF( ln_linssh ) THEN                !* top value   (linear free surf. only as zwz is multiplied by wmask) 
    150152            IF( ln_isfcav ) THEN                  ! ice-shelf cavities (top of the ocean) 
    151                DO_2D_11_11 
     153               DO_2D( 1, 1, 1, 1 ) 
    152154                  zwz(ji,jj, mikt(ji,jj) ) = pW(ji,jj,mikt(ji,jj)) * pt(ji,jj,mikt(ji,jj),jn,Kmm)  
    153155               END_2D 
     
    157159         ENDIF 
    158160         !                
    159          DO_3D_00_00( 1, jpkm1 ) 
     161         DO_3D( 0, 0, 0, 0, 1, jpkm1 )   !--  Divergence of advective fluxes  --! 
    160162            pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs)    & 
    161163               &             - (  zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk  )    & 
    162164               &                + zwy(ji,jj,jk) - zwy(ji  ,jj-1,jk  )    & 
    163                &                + zwz(ji,jj,jk) - zwz(ji  ,jj  ,jk+1)  ) * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 
     165               &                + zwz(ji,jj,jk) - zwz(ji  ,jj  ,jk+1)  ) & 
     166               &                * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 
    164167         END_3D 
    165          !                             ! trend diagnostics 
     168         !                               ! trend diagnostics 
    166169         IF( l_trd ) THEN 
    167170            CALL trd_tra( kt, Kmm, Krhs, cdtype, jn, jptra_xad, zwx, pU, pt(:,:,:,jn,Kmm) ) 
  • NEMO/branches/2020/r12377_ticket2386/src/OCE/TRA/traadv_fct.F90

    r12511 r13540  
    4646   !! * Substitutions 
    4747#  include "do_loop_substitute.h90" 
     48#  include "domzgr_substitute.h90" 
    4849   !!---------------------------------------------------------------------- 
    4950   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    9697         IF(lwp) WRITE(numout,*) '~~~~~~~~~~~' 
    9798      ENDIF 
     99      !! -- init to 0 
     100      zwi(:,:,:) = 0._wp 
     101      zwx(:,:,:) = 0._wp 
     102      zwy(:,:,:) = 0._wp 
     103      zwz(:,:,:) = 0._wp 
     104      ztu(:,:,:) = 0._wp 
     105      ztv(:,:,:) = 0._wp 
     106      zltu(:,:,:) = 0._wp 
     107      zltv(:,:,:) = 0._wp 
     108      ztw(:,:,:) = 0._wp 
    98109      ! 
    99110      l_trd = .FALSE.            ! set local switches 
     
    128139      IF( ll_zAimp ) THEN 
    129140         ALLOCATE(zwdia(jpi,jpj,jpk), zwinf(jpi,jpj,jpk),zwsup(jpi,jpj,jpk)) 
    130          DO_3D_00_00( 1, jpkm1 ) 
    131             zwdia(ji,jj,jk) =  1._wp + p2dt * ( MAX( wi(ji,jj,jk  ) , 0._wp ) - MIN( wi(ji,jj,jk+1) , 0._wp ) ) / e3t(ji,jj,jk,Krhs) 
     141         DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
     142            zwdia(ji,jj,jk) =  1._wp + p2dt * ( MAX( wi(ji,jj,jk) , 0._wp ) - MIN( wi(ji,jj,jk+1) , 0._wp ) )   & 
     143            &                               / e3t(ji,jj,jk,Krhs) 
    132144            zwinf(ji,jj,jk) =  p2dt * MIN( wi(ji,jj,jk  ) , 0._wp ) / e3t(ji,jj,jk,Krhs) 
    133145            zwsup(ji,jj,jk) = -p2dt * MAX( wi(ji,jj,jk+1) , 0._wp ) / e3t(ji,jj,jk,Krhs) 
     
    139151         !        !==  upstream advection with initial mass fluxes & intermediate update  ==! 
    140152         !                    !* upstream tracer flux in the i and j direction  
    141          DO_3D_10_10( 1, jpkm1 ) 
     153         DO_3D( 1, 0, 1, 0, 1, jpkm1 ) 
    142154            ! upstream scheme 
    143155            zfp_ui = pU(ji,jj,jk) + ABS( pU(ji,jj,jk) ) 
     
    148160            zwy(ji,jj,jk) = 0.5 * ( zfp_vj * pt(ji,jj,jk,jn,Kbb) + zfm_vj * pt(ji  ,jj+1,jk,jn,Kbb) ) 
    149161         END_3D 
    150          !                    !* upstream tracer flux in the k direction *! 
    151          DO_3D_11_11( 2, jpkm1 ) 
     162         !                               !* upstream tracer flux in the k direction *! 
     163         DO_3D( 1, 1, 1, 1, 2, jpkm1 )      ! Interior value ( multiplied by wmask) 
    152164            zfp_wk = pW(ji,jj,jk) + ABS( pW(ji,jj,jk) ) 
    153165            zfm_wk = pW(ji,jj,jk) - ABS( pW(ji,jj,jk) ) 
    154166            zwz(ji,jj,jk) = 0.5 * ( zfp_wk * pt(ji,jj,jk,jn,Kbb) + zfm_wk * pt(ji,jj,jk-1,jn,Kbb) ) * wmask(ji,jj,jk) 
    155167         END_3D 
    156          IF( ln_linssh ) THEN    ! top ocean value (only in linear free surface as zwz has been w-masked) 
    157             IF( ln_isfcav ) THEN             ! top of the ice-shelf cavities and at the ocean surface 
    158                DO_2D_11_11 
     168         IF( ln_linssh ) THEN               ! top ocean value (only in linear free surface as zwz has been w-masked) 
     169            IF( ln_isfcav ) THEN                        ! top of the ice-shelf cavities and at the ocean surface 
     170               DO_2D( 1, 1, 1, 1 ) 
    159171                  zwz(ji,jj, mikt(ji,jj) ) = pW(ji,jj,mikt(ji,jj)) * pt(ji,jj,mikt(ji,jj),jn,Kbb)   ! linear free surface  
    160172               END_2D 
    161             ELSE                             ! no cavities: only at the ocean surface 
    162                zwz(:,:,1) = pW(:,:,1) * pt(:,:,1,jn,Kbb) 
     173            ELSE                                        ! no cavities: only at the ocean surface 
     174               DO_2D( 1, 1, 1, 1 ) 
     175                  zwz(ji,jj,1) = pW(ji,jj,1) * pt(ji,jj,1,jn,Kbb) 
     176               END_2D 
    163177            ENDIF 
    164178         ENDIF 
    165179         !                
    166          DO_3D_00_00( 1, jpkm1 ) 
    167             !                             ! total intermediate advective trends 
     180         DO_3D( 0, 0, 0, 0, 1, jpkm1 )   !* trend and after field with monotonic scheme 
     181            !                               ! total intermediate advective trends 
    168182            ztra = - (  zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk  )   & 
    169183               &      + zwy(ji,jj,jk) - zwy(ji  ,jj-1,jk  )   & 
    170184               &      + zwz(ji,jj,jk) - zwz(ji  ,jj  ,jk+1) ) * r1_e1e2t(ji,jj) 
    171             !                             ! update and guess with monotonic sheme 
    172             pt(ji,jj,jk,jn,Krhs) =                     pt(ji,jj,jk,jn,Krhs) +        ztra   / e3t(ji,jj,jk,Kmm) * tmask(ji,jj,jk) 
    173             zwi(ji,jj,jk)    = ( e3t(ji,jj,jk,Kbb) * pt(ji,jj,jk,jn,Kbb) + p2dt * ztra ) / e3t(ji,jj,jk,Krhs) * tmask(ji,jj,jk) 
     185            !                               ! update and guess with monotonic sheme 
     186            pt(ji,jj,jk,jn,Krhs) =                   pt(ji,jj,jk,jn,Krhs) +       ztra   & 
     187               &                                  / e3t(ji,jj,jk,Kmm ) * tmask(ji,jj,jk) 
     188            zwi(ji,jj,jk)    = ( e3t(ji,jj,jk,Kbb) * pt(ji,jj,jk,jn,Kbb) + p2dt * ztra ) & 
     189               &                                  / e3t(ji,jj,jk,Krhs) * tmask(ji,jj,jk) 
    174190         END_3D 
    175191          
     
    178194            ! 
    179195            ztw(:,:,1) = 0._wp ; ztw(:,:,jpk) = 0._wp ; 
    180             DO_3D_00_00( 2, jpkm1 ) 
     196            DO_3D( 0, 0, 0, 0, 2, jpkm1 )       ! Interior value ( multiplied by wmask) 
    181197               zfp_wk = wi(ji,jj,jk) + ABS( wi(ji,jj,jk) ) 
    182198               zfm_wk = wi(ji,jj,jk) - ABS( wi(ji,jj,jk) ) 
     
    184200               zwz(ji,jj,jk) = zwz(ji,jj,jk) + ztw(ji,jj,jk) ! update vertical fluxes 
    185201            END_3D 
    186             DO_3D_00_00( 1, jpkm1 ) 
     202            DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    187203               pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs) - ( ztw(ji,jj,jk) - ztw(ji  ,jj  ,jk+1) ) & 
    188204                  &                                        * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 
     
    202218         ! 
    203219         CASE(  2  )                   !- 2nd order centered 
    204             DO_3D_10_10( 1, jpkm1 ) 
     220            DO_3D( 1, 0, 1, 0, 1, jpkm1 ) 
    205221               zwx(ji,jj,jk) = 0.5_wp * pU(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji+1,jj,jk,jn,Kmm) ) - zwx(ji,jj,jk) 
    206222               zwy(ji,jj,jk) = 0.5_wp * pV(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji,jj+1,jk,jn,Kmm) ) - zwy(ji,jj,jk) 
     
    211227            zltv(:,:,jpk) = 0._wp 
    212228            DO jk = 1, jpkm1                 ! Laplacian 
    213                DO_2D_10_10 
     229               DO_2D( 1, 0, 1, 0 )                 ! 1st derivative (gradient) 
    214230                  ztu(ji,jj,jk) = ( pt(ji+1,jj  ,jk,jn,Kmm) - pt(ji,jj,jk,jn,Kmm) ) * umask(ji,jj,jk) 
    215231                  ztv(ji,jj,jk) = ( pt(ji  ,jj+1,jk,jn,Kmm) - pt(ji,jj,jk,jn,Kmm) ) * vmask(ji,jj,jk) 
    216232               END_2D 
    217                DO_2D_00_00 
     233               DO_2D( 0, 0, 0, 0 )                 ! 2nd derivative * 1/ 6 
    218234                  zltu(ji,jj,jk) = (  ztu(ji,jj,jk) + ztu(ji-1,jj,jk)  ) * r1_6 
    219235                  zltv(ji,jj,jk) = (  ztv(ji,jj,jk) + ztv(ji,jj-1,jk)  ) * r1_6 
    220236               END_2D 
    221237            END DO 
    222             CALL lbc_lnk_multi( 'traadv_fct', zltu, 'T', 1. , zltv, 'T', 1. )   ! Lateral boundary cond. (unchanged sgn) 
    223             ! 
    224             DO_3D_10_10( 1, jpkm1 ) 
     238            CALL lbc_lnk_multi( 'traadv_fct', zltu, 'T', 1.0_wp , zltv, 'T', 1.0_wp )   ! Lateral boundary cond. (unchanged sgn) 
     239            ! 
     240            DO_3D( 1, 0, 1, 0, 1, jpkm1 )    ! Horizontal advective fluxes 
    225241               zC2t_u = pt(ji,jj,jk,jn,Kmm) + pt(ji+1,jj  ,jk,jn,Kmm)   ! 2 x C2 interpolation of T at u- & v-points 
    226242               zC2t_v = pt(ji,jj,jk,jn,Kmm) + pt(ji  ,jj+1,jk,jn,Kmm) 
    227                !                                                  ! C4 minus upstream advective fluxes  
     243               !                                                        ! C4 minus upstream advective fluxes  
    228244               zwx(ji,jj,jk) =  0.5_wp * pU(ji,jj,jk) * ( zC2t_u + zltu(ji,jj,jk) - zltu(ji+1,jj,jk) ) - zwx(ji,jj,jk) 
    229245               zwy(ji,jj,jk) =  0.5_wp * pV(ji,jj,jk) * ( zC2t_v + zltv(ji,jj,jk) - zltv(ji,jj+1,jk) ) - zwy(ji,jj,jk) 
     
    233249            ztu(:,:,jpk) = 0._wp             ! Bottom value : flux set to zero 
    234250            ztv(:,:,jpk) = 0._wp 
    235             DO_3D_10_10( 1, jpkm1 ) 
     251            DO_3D( 1, 0, 1, 0, 1, jpkm1 )    ! 1st derivative (gradient) 
    236252               ztu(ji,jj,jk) = ( pt(ji+1,jj  ,jk,jn,Kmm) - pt(ji,jj,jk,jn,Kmm) ) * umask(ji,jj,jk) 
    237253               ztv(ji,jj,jk) = ( pt(ji  ,jj+1,jk,jn,Kmm) - pt(ji,jj,jk,jn,Kmm) ) * vmask(ji,jj,jk) 
    238254            END_3D 
    239             CALL lbc_lnk_multi( 'traadv_fct', ztu, 'U', -1. , ztv, 'V', -1. )   ! Lateral boundary cond. (unchanged sgn) 
    240             ! 
    241             DO_3D_00_00( 1, jpkm1 ) 
     255            CALL lbc_lnk_multi( 'traadv_fct', ztu, 'U', -1.0_wp , ztv, 'V', -1.0_wp )   ! Lateral boundary cond. (unchanged sgn) 
     256            ! 
     257            DO_3D( 0, 0, 0, 0, 1, jpkm1 )    ! Horizontal advective fluxes 
    242258               zC2t_u = pt(ji,jj,jk,jn,Kmm) + pt(ji+1,jj  ,jk,jn,Kmm)   ! 2 x C2 interpolation of T at u- & v-points (x2) 
    243259               zC2t_v = pt(ji,jj,jk,jn,Kmm) + pt(ji  ,jj+1,jk,jn,Kmm) 
     
    255271         ! 
    256272         CASE(  2  )                   !- 2nd order centered 
    257             DO_3D_00_00( 2, jpkm1 ) 
     273            DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    258274               zwz(ji,jj,jk) =  (  pW(ji,jj,jk) * 0.5_wp * ( pt(ji,jj,jk,jn,Kmm) + pt(ji,jj,jk-1,jn,Kmm) )   & 
    259275                  &              - zwz(ji,jj,jk)  ) * wmask(ji,jj,jk) 
     
    262278         CASE(  4  )                   !- 4th order COMPACT 
    263279            CALL interp_4th_cpt( pt(:,:,:,jn,Kmm) , ztw )   ! zwt = COMPACT interpolation of T at w-point 
    264             DO_3D_00_00( 2, jpkm1 ) 
     280            DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    265281               zwz(ji,jj,jk) = ( pW(ji,jj,jk) * ztw(ji,jj,jk) - zwz(ji,jj,jk) ) * wmask(ji,jj,jk) 
    266282            END_3D 
     
    272288         !          
    273289         IF ( ll_zAimp ) THEN 
    274             DO_3D_00_00( 1, jpkm1 ) 
    275                !                             ! total intermediate advective trends 
     290            DO_3D( 0, 0, 0, 0, 1, jpkm1 )    !* trend and after field with monotonic scheme 
     291               !                                                ! total intermediate advective trends 
    276292               ztra = - (  zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk  )   & 
    277293                  &      + zwy(ji,jj,jk) - zwy(ji  ,jj-1,jk  )   & 
     
    282298            CALL tridia_solver( zwdia, zwsup, zwinf, ztw, ztw , 0 ) 
    283299            ! 
    284             DO_3D_00_00( 2, jpkm1 ) 
     300            DO_3D( 0, 0, 0, 0, 2, jpkm1 )       ! Interior value ( multiplied by wmask) 
    285301               zfp_wk = wi(ji,jj,jk) + ABS( wi(ji,jj,jk) ) 
    286302               zfm_wk = wi(ji,jj,jk) - ABS( wi(ji,jj,jk) ) 
     
    289305         END IF 
    290306         ! 
    291          CALL lbc_lnk_multi( 'traadv_fct', zwi, 'T', 1., zwx, 'U', -1. , zwy, 'V', -1.,  zwz, 'W',  1. ) 
     307         CALL lbc_lnk_multi( 'traadv_fct', zwi, 'T', 1.0_wp, zwx, 'U', -1.0_wp , zwy, 'V', -1.0_wp,  zwz, 'W',  1.0_wp ) 
    292308         ! 
    293309         !        !==  monotonicity algorithm  ==! 
     
    297313         !        !==  final trend with corrected fluxes  ==! 
    298314         ! 
    299          DO_3D_00_00( 1, jpkm1 ) 
     315         DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    300316            ztra = - (  zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk  )   & 
    301317               &      + zwy(ji,jj,jk) - zwy(ji  ,jj-1,jk  )   & 
     
    308324            ! 
    309325            ztw(:,:,1) = 0._wp ; ztw(:,:,jpk) = 0._wp 
    310             DO_3D_00_00( 2, jpkm1 ) 
     326            DO_3D( 0, 0, 0, 0, 2, jpkm1 )      ! Interior value ( multiplied by wmask) 
    311327               zfp_wk = wi(ji,jj,jk) + ABS( wi(ji,jj,jk) ) 
    312328               zfm_wk = wi(ji,jj,jk) - ABS( wi(ji,jj,jk) ) 
     
    314330               zwz(ji,jj,jk) = zwz(ji,jj,jk) + ztw(ji,jj,jk) ! Update vertical fluxes for trend diagnostic 
    315331            END_3D 
    316             DO_3D_00_00( 1, jpkm1 ) 
     332            DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    317333               pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs) - ( ztw(ji,jj,jk) - ztw(ji  ,jj  ,jk+1) ) & 
    318334                  &                                        * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 
     
    374390      INTEGER  ::   ji, jj, jk   ! dummy loop indices 
    375391      INTEGER  ::   ikm1         ! local integer 
    376       REAL(wp) ::   zpos, zneg, zbt, za, zb, zc, zbig, zrtrn    ! local scalars 
    377       REAL(wp) ::   zau, zbu, zcu, zav, zbv, zcv, zup, zdo            !   -      - 
    378       REAL(wp), DIMENSION(jpi,jpj,jpk) :: zbetup, zbetdo, zbup, zbdo 
    379       !!---------------------------------------------------------------------- 
    380       ! 
    381       zbig  = 1.e+40_wp 
    382       zrtrn = 1.e-15_wp 
    383       zbetup(:,:,:) = 0._wp   ;   zbetdo(:,:,:) = 0._wp 
     392      REAL(dp) ::   zpos, zneg, zbt, za, zb, zc, zbig, zrtrn    ! local scalars 
     393      REAL(dp) ::   zau, zbu, zcu, zav, zbv, zcv, zup, zdo            !   -      - 
     394      REAL(dp), DIMENSION(jpi,jpj,jpk) :: zbetup, zbetdo, zbup, zbdo 
     395      !!---------------------------------------------------------------------- 
     396      ! 
     397      zbig  = 1.e+40_dp 
     398      zrtrn = 1.e-15_dp 
     399      zbetup(:,:,:) = 0._dp   ;   zbetdo(:,:,:) = 0._dp 
    384400 
    385401      ! Search local extrema 
     
    393409      DO jk = 1, jpkm1 
    394410         ikm1 = MAX(jk-1,1) 
    395          DO_2D_00_00 
     411         DO_2D( 0, 0, 0, 0 ) 
    396412 
    397413            ! search maximum in neighbourhood 
     
    423439         END_2D 
    424440      END DO 
    425       CALL lbc_lnk_multi( 'traadv_fct', zbetup, 'T', 1. , zbetdo, 'T', 1. )   ! lateral boundary cond. (unchanged sign) 
     441      CALL lbc_lnk_multi( 'traadv_fct', zbetup, 'T', 1.0_wp , zbetdo, 'T', 1.0_wp )   ! lateral boundary cond. (unchanged sign) 
    426442 
    427443      ! 3. monotonic flux in the i & j direction (paa & pbb) 
    428444      ! ---------------------------------------- 
    429       DO_3D_00_00( 1, jpkm1 ) 
     445      DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    430446         zau = MIN( 1._wp, zbetdo(ji,jj,jk), zbetup(ji+1,jj,jk) ) 
    431447         zbu = MIN( 1._wp, zbetup(ji,jj,jk), zbetdo(ji+1,jj,jk) ) 
    432          zcu =       ( 0.5  + SIGN( 0.5 , paa(ji,jj,jk) ) ) 
     448         zcu =       ( 0.5  + SIGN( 0.5_wp , paa(ji,jj,jk) ) ) 
    433449         paa(ji,jj,jk) = paa(ji,jj,jk) * ( zcu * zau + ( 1._wp - zcu) * zbu ) 
    434450 
    435451         zav = MIN( 1._wp, zbetdo(ji,jj,jk), zbetup(ji,jj+1,jk) ) 
    436452         zbv = MIN( 1._wp, zbetup(ji,jj,jk), zbetdo(ji,jj+1,jk) ) 
    437          zcv =       ( 0.5  + SIGN( 0.5 , pbb(ji,jj,jk) ) ) 
     453         zcv =       ( 0.5  + SIGN( 0.5_wp , pbb(ji,jj,jk) ) ) 
    438454         pbb(ji,jj,jk) = pbb(ji,jj,jk) * ( zcv * zav + ( 1._wp - zcv) * zbv ) 
    439455 
    440 ! monotonic flux in the k direction, i.e. pcc 
    441 ! ------------------------------------------- 
     456      ! monotonic flux in the k direction, i.e. pcc 
     457      ! ------------------------------------------- 
    442458         za = MIN( 1., zbetdo(ji,jj,jk+1), zbetup(ji,jj,jk) ) 
    443459         zb = MIN( 1., zbetup(ji,jj,jk+1), zbetdo(ji,jj,jk) ) 
    444          zc =       ( 0.5  + SIGN( 0.5 , pcc(ji,jj,jk+1) ) ) 
     460         zc =       ( 0.5  + SIGN( 0.5_wp , pcc(ji,jj,jk+1) ) ) 
    445461         pcc(ji,jj,jk+1) = pcc(ji,jj,jk+1) * ( zc * za + ( 1._wp - zc) * zb ) 
    446462      END_3D 
    447       CALL lbc_lnk_multi( 'traadv_fct', paa, 'U', -1. , pbb, 'V', -1. )   ! lateral boundary condition (changed sign) 
     463      CALL lbc_lnk_multi( 'traadv_fct', paa, 'U', -1.0_wp , pbb, 'V', -1.0_wp )   ! lateral boundary condition (changed sign) 
    448464      ! 
    449465   END SUBROUTINE nonosc 
     
    465481      !!---------------------------------------------------------------------- 
    466482       
    467       DO_3D_11_11( 3, jpkm1 ) 
     483      DO_3D( 1, 1, 1, 1, 3, jpkm1 )       !==  build the three diagonal matrix  ==! 
    468484         zwd (ji,jj,jk) = 4._wp 
    469485         zwi (ji,jj,jk) = 1._wp 
     
    479495      END_3D 
    480496      ! 
    481       jk = 2                                          ! Switch to second order centered at top 
    482       DO_2D_11_11 
     497      jk = 2                                    ! Switch to second order centered at top 
     498      DO_2D( 1, 1, 1, 1 ) 
    483499         zwd (ji,jj,jk) = 1._wp 
    484500         zwi (ji,jj,jk) = 0._wp 
     
    488504      ! 
    489505      !                       !==  tridiagonal solve  ==! 
    490       DO_2D_11_11 
     506      DO_2D( 1, 1, 1, 1 )           ! first recurrence 
    491507         zwt(ji,jj,2) = zwd(ji,jj,2) 
    492508      END_2D 
    493       DO_3D_11_11( 3, jpkm1 ) 
     509      DO_3D( 1, 1, 1, 1, 3, jpkm1 ) 
    494510         zwt(ji,jj,jk) = zwd(ji,jj,jk) - zwi(ji,jj,jk) * zws(ji,jj,jk-1) /zwt(ji,jj,jk-1) 
    495511      END_3D 
    496512      ! 
    497       DO_2D_11_11 
     513      DO_2D( 1, 1, 1, 1 )           ! second recurrence:    Zk = Yk - Ik / Tk-1  Zk-1 
    498514         pt_out(ji,jj,2) = zwrm(ji,jj,2) 
    499515      END_2D 
    500       DO_3D_11_11( 3, jpkm1 ) 
     516      DO_3D( 1, 1, 1, 1, 3, jpkm1 ) 
    501517         pt_out(ji,jj,jk) = zwrm(ji,jj,jk) - zwi(ji,jj,jk) / zwt(ji,jj,jk-1) *pt_out(ji,jj,jk-1)              
    502518      END_3D 
    503519 
    504       DO_2D_11_11 
     520      DO_2D( 1, 1, 1, 1 )           ! third recurrence: Xk = (Zk - Sk Xk+1 ) / Tk 
    505521         pt_out(ji,jj,jpkm1) = pt_out(ji,jj,jpkm1) / zwt(ji,jj,jpkm1) 
    506522      END_2D 
    507       DO_3DS_11_11( jpk-2, 2, -1 ) 
     523      DO_3DS( 1, 1, 1, 1, jpk-2, 2, -1 ) 
    508524         pt_out(ji,jj,jk) = ( pt_out(ji,jj,jk) - zws(ji,jj,jk) * pt_out(ji,jj,jk+1) ) / zwt(ji,jj,jk) 
    509525      END_3D 
     
    530546      !                      !==  build the three diagonal matrix & the RHS  ==! 
    531547      ! 
    532       DO_3D_00_00( 3, jpkm1 ) 
     548      DO_3D( 0, 0, 0, 0, 3, jpkm1 )    ! interior (from jk=3 to jpk-1) 
    533549         zwd (ji,jj,jk) = 3._wp * wmask(ji,jj,jk) + 1._wp                 !       diagonal 
    534550         zwi (ji,jj,jk) =         wmask(ji,jj,jk)                         ! lower diagonal 
     
    549565      END IF 
    550566      ! 
    551       DO_2D_00_00 
     567      DO_2D( 0, 0, 0, 0 )              ! 2nd order centered at top & bottom 
    552568         ikt = mikt(ji,jj) + 1            ! w-point below the 1st  wet point 
    553569         ikb = MAX(mbkt(ji,jj), 2)        !     -   above the last wet point 
     
    566582      !                       !==  tridiagonal solver  ==! 
    567583      ! 
    568       DO_2D_00_00 
     584      DO_2D( 0, 0, 0, 0 )           !* 1st recurrence:   Tk = Dk - Ik Sk-1 / Tk-1 
    569585         zwt(ji,jj,2) = zwd(ji,jj,2) 
    570586      END_2D 
    571       DO_3D_00_00( 3, jpkm1 ) 
     587      DO_3D( 0, 0, 0, 0, 3, jpkm1 ) 
    572588         zwt(ji,jj,jk) = zwd(ji,jj,jk) - zwi(ji,jj,jk) * zws(ji,jj,jk-1) /zwt(ji,jj,jk-1) 
    573589      END_3D 
    574590      ! 
    575       DO_2D_00_00 
     591      DO_2D( 0, 0, 0, 0 )           !* 2nd recurrence:    Zk = Yk - Ik / Tk-1  Zk-1 
    576592         pt_out(ji,jj,2) = zwrm(ji,jj,2) 
    577593      END_2D 
    578       DO_3D_00_00( 3, jpkm1 ) 
     594      DO_3D( 0, 0, 0, 0, 3, jpkm1 ) 
    579595         pt_out(ji,jj,jk) = zwrm(ji,jj,jk) - zwi(ji,jj,jk) / zwt(ji,jj,jk-1) *pt_out(ji,jj,jk-1)              
    580596      END_3D 
    581597 
    582       DO_2D_00_00 
     598      DO_2D( 0, 0, 0, 0 )           !* 3d recurrence:    Xk = (Zk - Sk Xk+1 ) / Tk 
    583599         pt_out(ji,jj,jpkm1) = pt_out(ji,jj,jpkm1) / zwt(ji,jj,jpkm1) 
    584600      END_2D 
    585       DO_3DS_00_00( jpk-2, 2, -1 ) 
     601      DO_3DS( 0, 0, 0, 0, jpk-2, 2, -1 ) 
    586602         pt_out(ji,jj,jk) = ( pt_out(ji,jj,jk) - zws(ji,jj,jk) * pt_out(ji,jj,jk+1) ) / zwt(ji,jj,jk) 
    587603      END_3D 
     
    622638      kstart =  1  + klev 
    623639      ! 
    624       DO_2D_00_00 
     640      DO_2D( 0, 0, 0, 0 )                         !* 1st recurrence:   Tk = Dk - Ik Sk-1 / Tk-1 
    625641         zwt(ji,jj,kstart) = pD(ji,jj,kstart) 
    626642      END_2D 
    627       DO_3D_00_00( kstart+1, jpkm1 ) 
     643      DO_3D( 0, 0, 0, 0, kstart+1, jpkm1 ) 
    628644         zwt(ji,jj,jk) = pD(ji,jj,jk) - pL(ji,jj,jk) * pU(ji,jj,jk-1) /zwt(ji,jj,jk-1) 
    629645      END_3D 
    630646      ! 
    631       DO_2D_00_00 
     647      DO_2D( 0, 0, 0, 0 )                        !* 2nd recurrence:    Zk = Yk - Ik / Tk-1  Zk-1 
    632648         pt_out(ji,jj,kstart) = pRHS(ji,jj,kstart) 
    633649      END_2D 
    634       DO_3D_00_00( kstart+1, jpkm1 ) 
     650      DO_3D( 0, 0, 0, 0, kstart+1, jpkm1 ) 
    635651         pt_out(ji,jj,jk) = pRHS(ji,jj,jk) - pL(ji,jj,jk) / zwt(ji,jj,jk-1) *pt_out(ji,jj,jk-1)              
    636652      END_3D 
    637653 
    638       DO_2D_00_00 
     654      DO_2D( 0, 0, 0, 0 )                       !* 3d recurrence:    Xk = (Zk - Sk Xk+1 ) / Tk 
    639655         pt_out(ji,jj,jpkm1) = pt_out(ji,jj,jpkm1) / zwt(ji,jj,jpkm1) 
    640656      END_2D 
    641       DO_3DS_00_00( jpk-2, kstart, -1 ) 
     657      DO_3DS( 0, 0, 0, 0, jpk-2, kstart, -1 ) 
    642658         pt_out(ji,jj,jk) = ( pt_out(ji,jj,jk) - pU(ji,jj,jk) * pt_out(ji,jj,jk+1) ) / zwt(ji,jj,jk) 
    643659      END_3D 
  • NEMO/branches/2020/r12377_ticket2386/src/OCE/TRA/traadv_mus.F90

    r12377 r13540  
    4747   !! * Substitutions 
    4848#  include "do_loop_substitute.h90" 
     49#  include "domzgr_substitute.h90" 
    4950   !!---------------------------------------------------------------------- 
    5051   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    131132         zwx(:,:,jpk) = 0._wp                   ! bottom values 
    132133         zwy(:,:,jpk) = 0._wp   
    133          DO_3D_10_10( 1, jpkm1 ) 
     134         DO_3D( 1, 0, 1, 0, 1, jpkm1 ) 
    134135            zwx(ji,jj,jk) = umask(ji,jj,jk) * ( pt(ji+1,jj,jk,jn,Kbb) - pt(ji,jj,jk,jn,Kbb) ) 
    135136            zwy(ji,jj,jk) = vmask(ji,jj,jk) * ( pt(ji,jj+1,jk,jn,Kbb) - pt(ji,jj,jk,jn,Kbb) ) 
    136137         END_3D 
    137138         ! lateral boundary conditions   (changed sign) 
    138          CALL lbc_lnk_multi( 'traadv_mus', zwx, 'U', -1. , zwy, 'V', -1. ) 
     139         CALL lbc_lnk_multi( 'traadv_mus', zwx, 'U', -1.0_wp , zwy, 'V', -1.0_wp ) 
    139140         !                                !-- Slopes of tracer 
    140141         zslpx(:,:,jpk) = 0._wp                 ! bottom values 
    141142         zslpy(:,:,jpk) = 0._wp 
    142          DO_3D_01_01( 1, jpkm1 ) 
    143             zslpx(ji,jj,jk) =                    ( zwx(ji,jj,jk) + zwx(ji-1,jj  ,jk) )   & 
    144                &            * ( 0.25 + SIGN( 0.25, zwx(ji,jj,jk) * zwx(ji-1,jj  ,jk) ) ) 
    145             zslpy(ji,jj,jk) =                    ( zwy(ji,jj,jk) + zwy(ji  ,jj-1,jk) )   & 
    146                &            * ( 0.25 + SIGN( 0.25, zwy(ji,jj,jk) * zwy(ji  ,jj-1,jk) ) ) 
    147          END_3D 
    148          ! 
    149          DO_3D_01_01( 1, jpkm1 ) 
    150             zslpx(ji,jj,jk) = SIGN( 1., zslpx(ji,jj,jk) ) * MIN(    ABS( zslpx(ji  ,jj,jk) ),   & 
    151                &                                                 2.*ABS( zwx  (ji-1,jj,jk) ),   & 
    152                &                                                 2.*ABS( zwx  (ji  ,jj,jk) ) ) 
    153             zslpy(ji,jj,jk) = SIGN( 1., zslpy(ji,jj,jk) ) * MIN(    ABS( zslpy(ji,jj  ,jk) ),   & 
    154                &                                                 2.*ABS( zwy  (ji,jj-1,jk) ),   & 
    155                &                                                 2.*ABS( zwy  (ji,jj  ,jk) ) ) 
    156          END_3D 
    157          ! 
    158          DO_3D_00_00( 1, jpkm1 ) 
     143         DO_3D( 0, 1, 0, 1, 1, jpkm1 ) 
     144            zslpx(ji,jj,jk) =                       ( zwx(ji,jj,jk) + zwx(ji-1,jj  ,jk) )   & 
     145               &            * ( 0.25 + SIGN( 0.25_wp, zwx(ji,jj,jk) * zwx(ji-1,jj  ,jk) ) ) 
     146            zslpy(ji,jj,jk) =                       ( zwy(ji,jj,jk) + zwy(ji  ,jj-1,jk) )   & 
     147               &            * ( 0.25 + SIGN( 0.25_wp, zwy(ji,jj,jk) * zwy(ji  ,jj-1,jk) ) ) 
     148         END_3D 
     149         ! 
     150         DO_3D( 0, 1, 0, 1, 1, jpkm1 )    !-- Slopes limitation 
     151            zslpx(ji,jj,jk) = SIGN( 1.0_wp, zslpx(ji,jj,jk) ) * MIN(    ABS( zslpx(ji  ,jj,jk) ),   & 
     152               &                                                     2.*ABS( zwx  (ji-1,jj,jk) ),   & 
     153               &                                                     2.*ABS( zwx  (ji  ,jj,jk) ) ) 
     154            zslpy(ji,jj,jk) = SIGN( 1.0_wp, zslpy(ji,jj,jk) ) * MIN(    ABS( zslpy(ji,jj  ,jk) ),   & 
     155               &                                                     2.*ABS( zwy  (ji,jj-1,jk) ),   & 
     156               &                                                     2.*ABS( zwy  (ji,jj  ,jk) ) ) 
     157         END_3D 
     158         ! 
     159         DO_3D( 0, 0, 0, 0, 1, jpkm1 )    !-- MUSCL horizontal advective fluxes 
    159160            ! MUSCL fluxes 
    160             z0u = SIGN( 0.5, pU(ji,jj,jk) ) 
     161            z0u = SIGN( 0.5_wp, pU(ji,jj,jk) ) 
    161162            zalpha = 0.5 - z0u 
    162163            zu  = z0u - 0.5 * pU(ji,jj,jk) * p2dt * r1_e1e2u(ji,jj) / e3u(ji,jj,jk,Kmm) 
     
    165166            zwx(ji,jj,jk) = pU(ji,jj,jk) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) 
    166167            ! 
    167             z0v = SIGN( 0.5, pV(ji,jj,jk) ) 
     168            z0v = SIGN( 0.5_wp, pV(ji,jj,jk) ) 
    168169            zalpha = 0.5 - z0v 
    169170            zv  = z0v - 0.5 * pV(ji,jj,jk) * p2dt * r1_e1e2v(ji,jj) / e3v(ji,jj,jk,Kmm) 
     
    172173            zwy(ji,jj,jk) = pV(ji,jj,jk) * ( zalpha * zzwx + (1.-zalpha) * zzwy ) 
    173174         END_3D 
    174          CALL lbc_lnk_multi( 'traadv_mus', zwx, 'U', -1. , zwy, 'V', -1. )   ! lateral boundary conditions   (changed sign) 
    175          ! 
    176          DO_3D_00_00( 1, jpkm1 ) 
     175         CALL lbc_lnk_multi( 'traadv_mus', zwx, 'U', -1.0_wp , zwy, 'V', -1.0_wp )   ! lateral boundary conditions   (changed sign) 
     176         ! 
     177         DO_3D( 0, 0, 0, 0, 1, jpkm1 )    !-- Tracer advective trend 
    177178            pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs) - ( zwx(ji,jj,jk) - zwx(ji-1,jj  ,jk  )       & 
    178179            &                                     + zwy(ji,jj,jk) - zwy(ji  ,jj-1,jk  ) )     & 
     
    199200         !                                !-- Slopes of tracer 
    200201         zslpx(:,:,1) = 0._wp                   ! surface values 
    201          DO_3D_11_11( 2, jpkm1 ) 
    202             zslpx(ji,jj,jk) =                     ( zwx(ji,jj,jk) + zwx(ji,jj,jk+1) )  & 
    203                &            * (  0.25 + SIGN( 0.25, zwx(ji,jj,jk) * zwx(ji,jj,jk+1) )  ) 
    204          END_3D 
    205          DO_3D_11_11( 2, jpkm1 ) 
    206             zslpx(ji,jj,jk) = SIGN( 1., zslpx(ji,jj,jk) ) * MIN(    ABS( zslpx(ji,jj,jk  ) ),   & 
    207                &                                                 2.*ABS( zwx  (ji,jj,jk+1) ),   & 
    208                &                                                 2.*ABS( zwx  (ji,jj,jk  ) )  ) 
    209          END_3D 
    210          DO_3D_00_00( 1, jpk-2 ) 
    211             z0w = SIGN( 0.5, pW(ji,jj,jk+1) ) 
     202         DO_3D( 1, 1, 1, 1, 2, jpkm1 ) 
     203            zslpx(ji,jj,jk) =                        ( zwx(ji,jj,jk) + zwx(ji,jj,jk+1) )  & 
     204               &            * (  0.25 + SIGN( 0.25_wp, zwx(ji,jj,jk) * zwx(ji,jj,jk+1) )  ) 
     205         END_3D 
     206         DO_3D( 1, 1, 1, 1, 2, jpkm1 )    !-- Slopes limitation 
     207            zslpx(ji,jj,jk) = SIGN( 1.0_wp, zslpx(ji,jj,jk) ) * MIN(    ABS( zslpx(ji,jj,jk  ) ),   & 
     208               &                                                     2.*ABS( zwx  (ji,jj,jk+1) ),   & 
     209               &                                                     2.*ABS( zwx  (ji,jj,jk  ) )  ) 
     210         END_3D 
     211         DO_3D( 0, 0, 0, 0, 1, jpk-2 )    !-- vertical advective flux 
     212            z0w = SIGN( 0.5_wp, pW(ji,jj,jk+1) ) 
    212213            zalpha = 0.5 + z0w 
    213214            zw  = z0w - 0.5 * pW(ji,jj,jk+1) * p2dt * r1_e1e2t(ji,jj) / e3w(ji,jj,jk+1,Kmm) 
     
    218219         IF( ln_linssh ) THEN                   ! top values, linear free surface only 
    219220            IF( ln_isfcav ) THEN                      ! ice-shelf cavities (top of the ocean) 
    220                DO_2D_11_11 
     221               DO_2D( 1, 1, 1, 1 ) 
    221222                  zwx(ji,jj, mikt(ji,jj) ) = pW(ji,jj,mikt(ji,jj)) * pt(ji,jj,mikt(ji,jj),jn,Kbb) 
    222223               END_2D 
     
    226227         ENDIF 
    227228         ! 
    228          DO_3D_00_00( 1, jpkm1 ) 
    229             pt(ji,jj,jk,jn,Krhs) =  pt(ji,jj,jk,jn,Krhs) - ( zwx(ji,jj,jk) - zwx(ji,jj,jk+1) ) * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 
     229         DO_3D( 0, 0, 0, 0, 1, jpkm1 )     !-- vertical advective trend 
     230            pt(ji,jj,jk,jn,Krhs) =  pt(ji,jj,jk,jn,Krhs) - ( zwx(ji,jj,jk) - zwx(ji,jj,jk+1) )   & 
     231               &                                      * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 
    230232         END_3D 
    231233         !                                ! send trends for diagnostic 
  • NEMO/branches/2020/r12377_ticket2386/src/OCE/TRA/traadv_qck.F90

    r12377 r13540  
    4141   !! * Substitutions 
    4242#  include "do_loop_substitute.h90" 
     43#  include "domzgr_substitute.h90" 
    4344   !!---------------------------------------------------------------------- 
    4445   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    141142         ! 
    142143!!gm why not using a SHIFT instruction... 
    143          DO_3D_00_00( 1, jpkm1 ) 
     144         DO_3D( 0, 0, 0, 0, 1, jpkm1 )     !--- Computation of the ustream and downstream value of the tracer and the mask 
    144145            zfc(ji,jj,jk) = pt(ji-1,jj,jk,jn,Kbb)        ! Upstream   in the x-direction for the tracer 
    145146            zfd(ji,jj,jk) = pt(ji+1,jj,jk,jn,Kbb)        ! Downstream in the x-direction for the tracer 
    146147         END_3D 
    147          CALL lbc_lnk_multi( 'traadv_qck', zfc(:,:,:), 'T', 1. , zfd(:,:,:), 'T', 1. )   ! Lateral boundary conditions  
     148         CALL lbc_lnk_multi( 'traadv_qck', zfc(:,:,:), 'T', 1.0_wp , zfd(:,:,:), 'T', 1.0_wp )   ! Lateral boundary conditions  
    148149          
    149150         ! 
    150151         ! Horizontal advective fluxes 
    151152         ! --------------------------- 
    152          DO_3D_00_00( 1, jpkm1 ) 
    153             zdir = 0.5 + SIGN( 0.5, pU(ji,jj,jk) )   ! if pU > 0 : zdir = 1 otherwise zdir = 0  
     153         DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
     154            zdir = 0.5 + SIGN( 0.5_wp, pU(ji,jj,jk) )   ! if pU > 0 : zdir = 1 otherwise zdir = 0  
    154155            zfu(ji,jj,jk) = zdir * zfc(ji,jj,jk ) + ( 1. - zdir ) * zfd(ji+1,jj,jk)  ! FU in the x-direction for T  
    155156         END_3D 
    156157         ! 
    157          DO_3D_00_00( 1, jpkm1 ) 
    158             zdir = 0.5 + SIGN( 0.5, pU(ji,jj,jk) )   ! if pU > 0 : zdir = 1 otherwise zdir = 0  
     158         DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
     159            zdir = 0.5 + SIGN( 0.5_wp, pU(ji,jj,jk) )   ! if pU > 0 : zdir = 1 otherwise zdir = 0  
    159160            zdx = ( zdir * e1t(ji,jj) + ( 1. - zdir ) * e1t(ji+1,jj) ) * e2u(ji,jj) * e3u(ji,jj,jk,Kmm) 
    160161            zwx(ji,jj,jk)  = ABS( pU(ji,jj,jk) ) * p2dt / zdx    ! (0<zc_cfl<1 : Courant number on x-direction) 
     
    163164         END_3D 
    164165         !--- Lateral boundary conditions  
    165          CALL lbc_lnk_multi( 'traadv_qck', zfu(:,:,:), 'T', 1. , zfd(:,:,:), 'T', 1., zfc(:,:,:), 'T', 1.,  zwx(:,:,:), 'T', 1. ) 
     166         CALL lbc_lnk_multi( 'traadv_qck', zfu(:,:,:), 'T', 1.0_wp , zfd(:,:,:), 'T', 1.0_wp, zfc(:,:,:), 'T', 1.0_wp,  zwx(:,:,:), 'T', 1.0_wp ) 
    166167 
    167168         !--- QUICKEST scheme 
     
    169170         ! 
    170171         ! Mask at the T-points in the x-direction (mask=0 or mask=1) 
    171          DO_3D_00_00( 1, jpkm1 ) 
     172         DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    172173            zfu(ji,jj,jk) = tmask(ji-1,jj,jk) + tmask(ji,jj,jk) + tmask(ji+1,jj,jk) - 2. 
    173174         END_3D 
    174          CALL lbc_lnk( 'traadv_qck', zfu(:,:,:), 'T', 1. )      ! Lateral boundary conditions  
     175         CALL lbc_lnk( 'traadv_qck', zfu(:,:,:), 'T', 1.0_wp )      ! Lateral boundary conditions  
    175176 
    176177         ! 
     
    178179         DO jk = 1, jpkm1   
    179180            ! 
    180             DO_2D_00_00 
    181                zdir = 0.5 + SIGN( 0.5, pU(ji,jj,jk) )   ! if pU > 0 : zdir = 1 otherwise zdir = 0  
     181            DO_2D( 0, 0, 0, 0 ) 
     182               zdir = 0.5 + SIGN( 0.5_wp, pU(ji,jj,jk) )   ! if pU > 0 : zdir = 1 otherwise zdir = 0  
    182183               !--- If the second ustream point is a land point 
    183184               !--- the flux is computed by the 1st order UPWIND scheme 
     
    188189         END DO 
    189190         ! 
    190          CALL lbc_lnk( 'traadv_qck', zwx(:,:,:), 'T', 1. ) ! Lateral boundary conditions 
     191         CALL lbc_lnk( 'traadv_qck', zwx(:,:,:), 'T', 1.0_wp ) ! Lateral boundary conditions 
    191192         ! 
    192193         ! Computation of the trend 
    193          DO_3D_00_00( 1, jpkm1 ) 
     194         DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    194195            zbtr = r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 
    195196            ! horizontal advective trends 
     
    232233            !                                              
    233234            !--- Computation of the ustream and downstream value of the tracer and the mask 
    234             DO_2D_00_00 
     235            DO_2D( 0, 0, 0, 0 ) 
    235236               ! Upstream in the x-direction for the tracer 
    236237               zfc(ji,jj,jk) = pt(ji,jj-1,jk,jn,Kbb) 
     
    239240            END_2D 
    240241         END DO 
    241          CALL lbc_lnk_multi( 'traadv_qck', zfc(:,:,:), 'T', 1. , zfd(:,:,:), 'T', 1. )   ! Lateral boundary conditions  
     242         CALL lbc_lnk_multi( 'traadv_qck', zfc(:,:,:), 'T', 1.0_wp , zfd(:,:,:), 'T', 1.0_wp )   ! Lateral boundary conditions  
    242243 
    243244          
     
    246247         ! --------------------------- 
    247248         ! 
    248          DO_3D_00_00( 1, jpkm1 ) 
    249             zdir = 0.5 + SIGN( 0.5, pV(ji,jj,jk) )   ! if pU > 0 : zdir = 1 otherwise zdir = 0  
     249         DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
     250            zdir = 0.5 + SIGN( 0.5_wp, pV(ji,jj,jk) )   ! if pU > 0 : zdir = 1 otherwise zdir = 0  
    250251            zfu(ji,jj,jk) = zdir * zfc(ji,jj,jk ) + ( 1. - zdir ) * zfd(ji,jj+1,jk)  ! FU in the x-direction for T  
    251252         END_3D 
    252253         ! 
    253          DO_3D_00_00( 1, jpkm1 ) 
    254             zdir = 0.5 + SIGN( 0.5, pV(ji,jj,jk) )   ! if pU > 0 : zdir = 1 otherwise zdir = 0  
     254         DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
     255            zdir = 0.5 + SIGN( 0.5_wp, pV(ji,jj,jk) )   ! if pU > 0 : zdir = 1 otherwise zdir = 0  
    255256            zdx = ( zdir * e2t(ji,jj) + ( 1. - zdir ) * e2t(ji,jj+1) ) * e1v(ji,jj) * e3v(ji,jj,jk,Kmm) 
    256257            zwy(ji,jj,jk)  = ABS( pV(ji,jj,jk) ) * p2dt / zdx    ! (0<zc_cfl<1 : Courant number on x-direction) 
     
    260261 
    261262         !--- Lateral boundary conditions  
    262          CALL lbc_lnk_multi( 'traadv_qck', zfu(:,:,:), 'T', 1. , zfd(:,:,:), 'T', 1., zfc(:,:,:), 'T', 1., zwy(:,:,:), 'T', 1. ) 
     263         CALL lbc_lnk_multi( 'traadv_qck', zfu(:,:,:), 'T', 1.0_wp , zfd(:,:,:), 'T', 1.0_wp, zfc(:,:,:), 'T', 1.0_wp, zwy(:,:,:), 'T', 1.0_wp ) 
    263264 
    264265         !--- QUICKEST scheme 
     
    266267         ! 
    267268         ! Mask at the T-points in the x-direction (mask=0 or mask=1) 
    268          DO_3D_00_00( 1, jpkm1 ) 
     269         DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    269270            zfu(ji,jj,jk) = tmask(ji,jj-1,jk) + tmask(ji,jj,jk) + tmask(ji,jj+1,jk) - 2. 
    270271         END_3D 
    271          CALL lbc_lnk( 'traadv_qck', zfu(:,:,:), 'T', 1. )    !--- Lateral boundary conditions  
     272         CALL lbc_lnk( 'traadv_qck', zfu(:,:,:), 'T', 1.0_wp )    !--- Lateral boundary conditions  
    272273         ! 
    273274         ! Tracer flux on the x-direction 
    274275         DO jk = 1, jpkm1   
    275276            ! 
    276             DO_2D_00_00 
    277                zdir = 0.5 + SIGN( 0.5, pV(ji,jj,jk) )   ! if pU > 0 : zdir = 1 otherwise zdir = 0  
     277            DO_2D( 0, 0, 0, 0 ) 
     278               zdir = 0.5 + SIGN( 0.5_wp, pV(ji,jj,jk) )   ! if pU > 0 : zdir = 1 otherwise zdir = 0  
    278279               !--- If the second ustream point is a land point 
    279280               !--- the flux is computed by the 1st order UPWIND scheme 
     
    284285         END DO 
    285286         ! 
    286          CALL lbc_lnk( 'traadv_qck', zwy(:,:,:), 'T', 1. ) ! Lateral boundary conditions 
     287         CALL lbc_lnk( 'traadv_qck', zwy(:,:,:), 'T', 1.0_wp ) ! Lateral boundary conditions 
    287288         ! 
    288289         ! Computation of the trend 
    289          DO_3D_00_00( 1, jpkm1 ) 
     290         DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    290291            zbtr = r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 
    291292            ! horizontal advective trends 
     
    326327         !                                                       ! =========== 
    327328         ! 
    328          DO_3D_00_00( 2, jpkm1 ) 
     329         DO_3D( 0, 0, 0, 0, 2, jpkm1 )       !* Interior point   (w-masked 2nd order centered flux) 
    329330            zwz(ji,jj,jk) = 0.5 * pW(ji,jj,jk) * ( pt(ji,jj,jk-1,jn,Kmm) + pt(ji,jj,jk,jn,Kmm) ) * wmask(ji,jj,jk) 
    330331         END_3D 
    331332         IF( ln_linssh ) THEN                !* top value   (only in linear free surf. as zwz is multiplied by wmask) 
    332333            IF( ln_isfcav ) THEN                  ! ice-shelf cavities (top of the ocean) 
    333                DO_2D_11_11 
     334               DO_2D( 1, 1, 1, 1 ) 
    334335                  zwz(ji,jj, mikt(ji,jj) ) = pW(ji,jj,mikt(ji,jj)) * pt(ji,jj,mikt(ji,jj),jn,Kmm)   ! linear free surface  
    335336               END_2D 
     
    339340         ENDIF 
    340341         ! 
    341          DO_3D_00_00( 1, jpkm1 ) 
     342         DO_3D( 0, 0, 0, 0, 1, jpkm1 )   !==  Tracer flux divergence added to the general trend  ==! 
    342343            pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs) - ( zwz(ji,jj,jk) - zwz(ji,jj,jk+1) )   & 
    343344               &                                * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 
     
    368369      !---------------------------------------------------------------------- 
    369370      ! 
    370       DO_3D_11_11( 1, jpkm1 ) 
     371      DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    371372         zc     = puc(ji,jj,jk)                         ! Courant number 
    372373         zcurv  = pfd(ji,jj,jk) + pfu(ji,jj,jk) - 2. * pfc(ji,jj,jk) 
  • NEMO/branches/2020/r12377_ticket2386/src/OCE/TRA/traadv_ubs.F90

    r12377 r13540  
    3939   !! * Substitutions 
    4040#  include "do_loop_substitute.h90" 
     41#  include "domzgr_substitute.h90" 
    4142   !!---------------------------------------------------------------------- 
    4243   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    8283      !! 
    8384      !! Reference : Shchepetkin, A. F., J. C. McWilliams, 2005, Ocean Modelling, 9, 347-404.  
    84       !!             Farrow, D.E., Stevens, D.P., 1995, J. Phys. Ocean. 25, 1731Ð1741.  
     85      !!             Farrow, D.E., Stevens, D.P., 1995, J. Phys. Ocean. 25, 1731�1741. 
    8586      !!---------------------------------------------------------------------- 
    8687      INTEGER                                  , INTENT(in   ) ::   kt              ! ocean time-step index 
     
    123124         !                                                       ! =========== 
    124125         !                                               
    125          DO jk = 1, jpkm1        !==  horizontal laplacian of before tracer ==! 
    126             DO_2D_10_10 
     126         DO jk = 1, jpkm1                !==  horizontal laplacian of before tracer ==! 
     127            DO_2D( 1, 0, 1, 0 )                   ! First derivative (masked gradient) 
    127128               zeeu = e2_e1u(ji,jj) * e3u(ji,jj,jk,Kmm) * umask(ji,jj,jk) 
    128129               zeev = e1_e2v(ji,jj) * e3v(ji,jj,jk,Kmm) * vmask(ji,jj,jk) 
     
    130131               ztv(ji,jj,jk) = zeev * ( pt(ji  ,jj+1,jk,jn,Kbb) - pt(ji,jj,jk,jn,Kbb) ) 
    131132            END_2D 
    132             DO_2D_00_00 
     133            DO_2D( 0, 0, 0, 0 )                   ! Second derivative (divergence) 
    133134               zcoef = 1._wp / ( 6._wp * e3t(ji,jj,jk,Kmm) ) 
    134135               zltu(ji,jj,jk) = (  ztu(ji,jj,jk) - ztu(ji-1,jj,jk)  ) * zcoef 
     
    137138            !                                     
    138139         END DO          
    139          CALL lbc_lnk( 'traadv_ubs', zltu, 'T', 1. )   ;    CALL lbc_lnk( 'traadv_ubs', zltv, 'T', 1. )   ! Lateral boundary cond. (unchanged sgn) 
     140         CALL lbc_lnk( 'traadv_ubs', zltu, 'T', 1.0_wp )   ;    CALL lbc_lnk( 'traadv_ubs', zltv, 'T', 1.0_wp )   ! Lateral boundary cond. (unchanged sgn) 
    140141         !     
    141          DO_3D_10_10( 1, jpkm1 ) 
    142             zfp_ui = pU(ji,jj,jk) + ABS( pU(ji,jj,jk) )      ! upstream transport (x2) 
     142         DO_3D( 1, 0, 1, 0, 1, jpkm1 )   !==  Horizontal advective fluxes  ==!     (UBS) 
     143            zfp_ui = pU(ji,jj,jk) + ABS( pU(ji,jj,jk) )        ! upstream transport (x2) 
    143144            zfm_ui = pU(ji,jj,jk) - ABS( pU(ji,jj,jk) ) 
    144145            zfp_vj = pV(ji,jj,jk) + ABS( pV(ji,jj,jk) ) 
     
    155156         ! 
    156157         DO jk = 1, jpkm1        !==  add the horizontal advective trend  ==! 
    157             DO_2D_00_00 
     158            DO_2D( 0, 0, 0, 0 ) 
    158159               pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs)                        & 
    159160                  &             - (  ztu(ji,jj,jk) - ztu(ji-1,jj  ,jk)    & 
    160                   &                + ztv(ji,jj,jk) - ztv(ji  ,jj-1,jk)  ) * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 
     161                  &                + ztv(ji,jj,jk) - ztv(ji  ,jj-1,jk)  ) & 
     162                  &                * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 
    161163            END_2D 
    162164            !                                              
     
    164166         ! 
    165167         zltu(:,:,:) = pt(:,:,:,jn,Krhs) - zltu(:,:,:)    ! Horizontal advective trend used in vertical 2nd order FCT case 
    166          !                                            ! and/or in trend diagnostic (l_trd=T)  
     168         !                                                ! and/or in trend diagnostic (l_trd=T)  
    167169         !                 
    168170         IF( l_trd ) THEN                  ! trend diagnostics 
     
    185187            IF( l_trd )   zltv(:,:,:) = pt(:,:,:,jn,Krhs)          ! store pt(:,:,:,:,Krhs) if trend diag. 
    186188            ! 
    187             !                          !*  upstream advection with initial mass fluxes & intermediate update  ==! 
    188             DO_3D_11_11( 2, jpkm1 ) 
     189            !                               !*  upstream advection with initial mass fluxes & intermediate update  ==! 
     190            DO_3D( 1, 1, 1, 1, 2, jpkm1 ) 
    189191               zfp_wk = pW(ji,jj,jk) + ABS( pW(ji,jj,jk) ) 
    190192               zfm_wk = pW(ji,jj,jk) - ABS( pW(ji,jj,jk) ) 
    191193               ztw(ji,jj,jk) = 0.5_wp * (  zfp_wk * pt(ji,jj,jk,jn,Kbb) + zfm_wk * pt(ji,jj,jk-1,jn,Kbb)  ) * wmask(ji,jj,jk) 
    192194            END_3D 
    193             IF( ln_linssh ) THEN             ! top ocean value (only in linear free surface as ztw has been w-masked) 
    194                IF( ln_isfcav ) THEN                ! top of the ice-shelf cavities and at the ocean surface 
    195                   DO_2D_11_11 
     195            IF( ln_linssh ) THEN                ! top ocean value (only in linear free surface as ztw has been w-masked) 
     196               IF( ln_isfcav ) THEN                   ! top of the ice-shelf cavities and at the ocean surface 
     197                  DO_2D( 1, 1, 1, 1 ) 
    196198                     ztw(ji,jj, mikt(ji,jj) ) = pW(ji,jj,mikt(ji,jj)) * pt(ji,jj,mikt(ji,jj),jn,Kbb)   ! linear free surface  
    197199                  END_2D 
    198                ELSE                                ! no cavities: only at the ocean surface 
     200               ELSE                                   ! no cavities: only at the ocean surface 
    199201                  ztw(:,:,1) = pW(:,:,1) * pt(:,:,1,jn,Kbb) 
    200202               ENDIF 
    201203            ENDIF 
    202204            ! 
    203             DO_3D_00_00( 1, jpkm1 ) 
    204                ztak = - ( ztw(ji,jj,jk) - ztw(ji,jj,jk+1) ) * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 
     205            DO_3D( 0, 0, 0, 0, 1, jpkm1 )   !* trend and after field with monotonic scheme 
     206               ztak = - ( ztw(ji,jj,jk) - ztw(ji,jj,jk+1) )    & 
     207                  &     * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 
    205208               pt(ji,jj,jk,jn,Krhs) =   pt(ji,jj,jk,jn,Krhs) +  ztak  
    206209               zti(ji,jj,jk)    = ( pt(ji,jj,jk,jn,Kbb) + p2dt * ( ztak + zltu(ji,jj,jk) ) ) * tmask(ji,jj,jk) 
    207210            END_3D 
    208             CALL lbc_lnk( 'traadv_ubs', zti, 'T', 1. )      ! Lateral boundary conditions on zti, zsi   (unchanged sign) 
     211            CALL lbc_lnk( 'traadv_ubs', zti, 'T', 1.0_wp )      ! Lateral boundary conditions on zti, zsi   (unchanged sign) 
    209212            ! 
    210213            !                          !*  anti-diffusive flux : high order minus low order 
    211             DO_3D_11_11( 2, jpkm1 ) 
     214            DO_3D( 1, 1, 1, 1, 2, jpkm1 ) 
    212215               ztw(ji,jj,jk) = (   0.5_wp * pW(ji,jj,jk) * ( pt(ji,jj,jk,jn,Kmm) + pt(ji,jj,jk-1,jn,Kmm) )   & 
    213216                  &              - ztw(ji,jj,jk)   ) * wmask(ji,jj,jk) 
     
    220223         CASE(  4  )                               ! 4th order COMPACT 
    221224            CALL interp_4th_cpt( pt(:,:,:,jn,Kmm) , ztw )         ! 4th order compact interpolation of T at w-point 
    222             DO_3D_00_00( 2, jpkm1 ) 
     225            DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    223226               ztw(ji,jj,jk) = pW(ji,jj,jk) * ztw(ji,jj,jk) * wmask(ji,jj,jk) 
    224227            END_3D 
     
    227230         END SELECT 
    228231         ! 
    229          DO_3D_00_00( 1, jpkm1 ) 
    230             pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs) - ( ztw(ji,jj,jk) - ztw(ji,jj,jk+1) ) * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 
     232         DO_3D( 0, 0, 0, 0, 1, jpkm1 )   !  final trend with corrected fluxes 
     233            pt(ji,jj,jk,jn,Krhs) = pt(ji,jj,jk,jn,Krhs) - ( ztw(ji,jj,jk) - ztw(ji,jj,jk+1) )    & 
     234               &                                        * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 
    231235         END_3D 
    232236         ! 
    233          IF( l_trd )  THEN       ! vertical advective trend diagnostics 
    234             DO_3D_00_00( 1, jpkm1 ) 
     237         IF( l_trd )  THEN               ! vertical advective trend diagnostics 
     238            DO_3D( 0, 0, 0, 0, 1, jpkm1 )                 ! (compute -w.dk[ptn]= -dk[w.ptn] + ptn.dk[w]) 
    235239               zltv(ji,jj,jk) = pt(ji,jj,jk,jn,Krhs) - zltv(ji,jj,jk)                          & 
    236240                  &           + pt(ji,jj,jk,jn,Kmm) * (  pW(ji,jj,jk) - pW(ji,jj,jk+1)  )   & 
     
    270274      !!---------------------------------------------------------------------- 
    271275      ! 
    272       zbig  = 1.e+40_wp 
     276      zbig  = 1.e+38_wp 
    273277      zrtrn = 1.e-15_wp 
    274278      zbetup(:,:,:) = 0._wp   ;   zbetdo(:,:,:) = 0._wp 
     
    282286      DO jk = 1, jpkm1     ! search maximum in neighbourhood 
    283287         ikm1 = MAX(jk-1,1) 
    284          DO_2D_00_00 
     288         DO_2D( 0, 0, 0, 0 ) 
    285289            zbetup(ji,jj,jk) = MAX(  pbef(ji  ,jj  ,jk  ), paft(ji  ,jj  ,jk  ),   & 
    286290               &                     pbef(ji  ,jj  ,ikm1), pbef(ji  ,jj  ,jk+1),   & 
     
    294298      DO jk = 1, jpkm1     ! search minimum in neighbourhood 
    295299         ikm1 = MAX(jk-1,1) 
    296          DO_2D_00_00 
     300         DO_2D( 0, 0, 0, 0 ) 
    297301            zbetdo(ji,jj,jk) = MIN(  pbef(ji  ,jj  ,jk  ), paft(ji  ,jj  ,jk  ),   & 
    298302               &                     pbef(ji  ,jj  ,ikm1), pbef(ji  ,jj  ,jk+1),   & 
     
    306310      ! Positive and negative part of fluxes and beta terms 
    307311      ! --------------------------------------------------- 
    308       DO_3D_00_00( 1, jpkm1 ) 
     312      DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    309313         ! positive & negative part of the flux 
    310314         zpos = MAX( 0., pcc(ji  ,jj  ,jk+1) ) - MIN( 0., pcc(ji  ,jj  ,jk  ) ) 
     
    318322      ! monotonic flux in the k direction, i.e. pcc 
    319323      ! ------------------------------------------- 
    320       DO_3D_00_00( 2, jpkm1 ) 
     324      DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    321325         za = MIN( 1., zbetdo(ji,jj,jk), zbetup(ji,jj,jk-1) ) 
    322326         zb = MIN( 1., zbetup(ji,jj,jk), zbetdo(ji,jj,jk-1) ) 
    323          zc = 0.5 * ( 1.e0 + SIGN( 1.e0, pcc(ji,jj,jk) ) ) 
     327         zc = 0.5 * ( 1.e0 + SIGN( 1.0_wp, pcc(ji,jj,jk) ) ) 
    324328         pcc(ji,jj,jk) = pcc(ji,jj,jk) * ( zc * za + ( 1.e0 - zc) * zb ) 
    325329      END_3D 
  • NEMO/branches/2020/r12377_ticket2386/src/OCE/TRA/traatf.F90

    r12511 r13540  
    5858   !! * Substitutions 
    5959#  include "do_loop_substitute.h90" 
     60#  include "domzgr_substitute.h90" 
    6061   !!---------------------------------------------------------------------- 
    6162   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    109110#endif 
    110111      !                                              ! local domain boundaries  (T-point, unchanged sign) 
    111       CALL lbc_lnk_multi( 'traatf', pts(:,:,:,jp_tem,Kaa), 'T', 1., pts(:,:,:,jp_sal,Kaa), 'T', 1. ) 
     112      CALL lbc_lnk_multi( 'traatf', pts(:,:,:,jp_tem,Kaa), 'T', 1.0_wp, pts(:,:,:,jp_sal,Kaa), 'T', 1.0_wp ) 
    112113      ! 
    113114      IF( ln_bdy )   CALL bdy_tra( kt, Kbb, pts, Kaa )  ! BDY open boundaries 
     
    155156         ENDIF 
    156157         ! 
    157          CALL lbc_lnk_multi( 'traatf', pts(:,:,:,jp_tem,Kbb) , 'T', 1., pts(:,:,:,jp_sal,Kbb) , 'T', 1., & 
    158                   &                    pts(:,:,:,jp_tem,Kmm) , 'T', 1., pts(:,:,:,jp_sal,Kmm) , 'T', 1., & 
    159                   &                    pts(:,:,:,jp_tem,Kaa), 'T', 1., pts(:,:,:,jp_sal,Kaa), 'T', 1.  ) 
     158         CALL lbc_lnk_multi( 'traatf', pts(:,:,:,jp_tem,Kbb) , 'T', 1.0_wp, pts(:,:,:,jp_sal,Kbb) , 'T', 1.0_wp, & 
     159                  &                    pts(:,:,:,jp_tem,Kmm) , 'T', 1.0_wp, pts(:,:,:,jp_sal,Kmm) , 'T', 1.0_wp, & 
     160                  &                    pts(:,:,:,jp_tem,Kaa), 'T', 1.0_wp, pts(:,:,:,jp_sal,Kaa), 'T', 1.0_wp  ) 
    160161         ! 
    161162      ENDIF      
    162163      ! 
    163164      IF( l_trdtra .AND. ln_linssh ) THEN      ! trend of the Asselin filter (tb filtered - tb)/dt      
    164          zfact = 1._wp / rDt              
    165165         DO jk = 1, jpkm1 
    166             ztrdt(:,:,jk) = ( pts(:,:,jk,jp_tem,Kmm) - ztrdt(:,:,jk) ) * zfact 
    167             ztrds(:,:,jk) = ( pts(:,:,jk,jp_sal,Kmm) - ztrds(:,:,jk) ) * zfact 
     166            ztrdt(:,:,jk) = ( pts(:,:,jk,jp_tem,Kmm) - ztrdt(:,:,jk) ) * r1_Dt 
     167            ztrds(:,:,jk) = ( pts(:,:,jk,jp_sal,Kmm) - ztrds(:,:,jk) ) * r1_Dt 
    168168         END DO 
    169169         CALL trd_tra( kt, Kmm, Kaa, 'TRA', jp_tem, jptra_atf, ztrdt ) 
     
    210210      DO jn = 1, kjpt 
    211211         ! 
    212          DO_3D_00_00( 1, jpkm1 ) 
     212         DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    213213            ztn = pt(ji,jj,jk,jn,Kmm)                                     
    214214            ztd = pt(ji,jj,jk,jn,Kaa) - 2._wp * ztn + pt(ji,jj,jk,jn,Kbb)  ! time laplacian on tracers 
     
    229229      !!  
    230230      !! ** Method  : - Apply a thickness weighted Asselin time filter on now fields. 
    231       !!             pt(Kmm)  = ( e3t(Kmm)*pt(Kmm) + rn_atfp*[ e3t(Kbb)*pt(Kbb) - 2 e3t(Kmm)*pt(Kmm) + e3t_a*pt(Kaa) ] ) 
    232       !!                       /( e3t(Kmm)         + rn_atfp*[ e3t(Kbb)         - 2 e3t(Kmm)         + e3t(Kaa)    ] ) 
     231      !!             pt(Kmm)  = ( e3t_Kmm*pt(Kmm) + rn_atfp*[ e3t_Kbb*pt(Kbb) - 2 e3t_Kmm*pt(Kmm) + e3t_Kaa*pt(Kaa) ] ) 
     232      !!                       /( e3t_Kmm         + rn_atfp*[ e3t_Kbb         - 2 e3t_Kmm         + e3t_Kaa    ] ) 
    233233      !! 
    234234      !! ** Action  : - pt(Kmm) ready for the next time step 
     
    275275      zfact2 = zfact1 * r1_rho0 
    276276      DO jn = 1, kjpt       
    277          DO_3D_00_00( 1, jpkm1 ) 
     277         DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    278278            ze3t_b = e3t(ji,jj,jk,Kbb) 
    279279            ze3t_n = e3t(ji,jj,jk,Kmm) 
  • NEMO/branches/2020/r12377_ticket2386/src/OCE/TRA/trabbc.F90

    r12511 r13540  
    4646   !! * Substitutions 
    4747#  include "do_loop_substitute.h90" 
     48#  include "domzgr_substitute.h90" 
    4849   !!---------------------------------------------------------------------- 
    4950   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    9091      ENDIF 
    9192      !                             !  Add the geothermal trend on temperature 
    92       DO_2D_00_00 
    93          pts(ji,jj,mbkt(ji,jj),jp_tem,Krhs) = pts(ji,jj,mbkt(ji,jj),jp_tem,Krhs) + qgh_trd0(ji,jj) / e3t(ji,jj,mbkt(ji,jj),Kmm) 
     93      DO_2D( 0, 0, 0, 0 ) 
     94         pts(ji,jj,mbkt(ji,jj),jp_tem,Krhs) = pts(ji,jj,mbkt(ji,jj),jp_tem,Krhs)   & 
     95            &             + qgh_trd0(ji,jj) / e3t(ji,jj,mbkt(ji,jj),Kmm) 
    9496      END_2D 
    9597      ! 
    96       CALL lbc_lnk( 'trabbc', pts(:,:,:,jp_tem,Krhs) , 'T', 1. ) 
     98      CALL lbc_lnk( 'trabbc', pts(:,:,:,jp_tem,Krhs) , 'T', 1.0_wp ) 
    9799      ! 
    98100      IF( l_trdtra ) THEN        ! Send the trend for diagnostics 
  • NEMO/branches/2020/r12377_ticket2386/src/OCE/TRA/trabbl.F90

    r12377 r13540  
    6868   !! * Substitutions 
    6969#  include "do_loop_substitute.h90" 
     70#  include "domzgr_substitute.h90" 
    7071   !!---------------------------------------------------------------------- 
    7172   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    125126            &          tab3d_2=pts(:,:,:,jp_sal,Krhs), clinfo2=           ' Sa: ', mask2=tmask, clinfo3='tra' ) 
    126127         ! lateral boundary conditions ; just need for outputs 
    127          CALL lbc_lnk_multi( 'trabbl', ahu_bbl, 'U', 1. , ahv_bbl, 'V', 1. ) 
     128         CALL lbc_lnk_multi( 'trabbl', ahu_bbl, 'U', 1.0_wp , ahv_bbl, 'V', 1.0_wp ) 
    128129         CALL iom_put( "ahu_bbl", ahu_bbl )   ! bbl diffusive flux i-coef 
    129130         CALL iom_put( "ahv_bbl", ahv_bbl )   ! bbl diffusive flux j-coef 
     
    138139            &          tab3d_2=pts(:,:,:,jp_sal,Krhs), clinfo2=           ' Sa: ', mask2=tmask, clinfo3='tra' ) 
    139140         ! lateral boundary conditions ; just need for outputs 
    140          CALL lbc_lnk_multi( 'trabbl', utr_bbl, 'U', 1. , vtr_bbl, 'V', 1. ) 
     141         CALL lbc_lnk_multi( 'trabbl', utr_bbl, 'U', 1.0_wp , vtr_bbl, 'V', 1.0_wp ) 
    141142         CALL iom_put( "uoce_bbl", utr_bbl )  ! bbl i-transport 
    142143         CALL iom_put( "voce_bbl", vtr_bbl )  ! bbl j-transport 
     
    191192      DO jn = 1, kjpt                                     ! tracer loop 
    192193         !                                                ! =========== 
    193          DO_2D_11_11 
     194         DO_2D( 1, 1, 1, 1 ) 
    194195            ik = mbkt(ji,jj)                             ! bottom T-level index 
    195196            zptb(ji,jj) = pt(ji,jj,ik,jn)                ! bottom before T and S 
    196197         END_2D 
    197198         !                
    198          DO_2D_00_00 
     199         DO_2D( 0, 0, 0, 0 )                               ! Compute the trend 
    199200            ik = mbkt(ji,jj)                            ! bottom T-level index 
    200201            pt_rhs(ji,jj,ik,jn) = pt_rhs(ji,jj,ik,jn)                                                  & 
     
    342343      ENDIF 
    343344      !                                        !* bottom variables (T, S, alpha, beta, depth, velocity) 
    344       DO_2D_11_11 
     345      DO_2D( 1, 1, 1, 1 ) 
    345346         ik = mbkt(ji,jj)                             ! bottom T-level index 
    346347         zts (ji,jj,jp_tem) = ts(ji,jj,ik,jp_tem,Kbb) ! bottom before T and S 
     
    357358      IF( nn_bbl_ldf == 1 ) THEN          !   diffusive bbl   ! 
    358359         !                                !-------------------! 
    359          DO_2D_10_10 
     360         DO_2D( 1, 0, 1, 0 )                   ! (criteria for non zero flux: grad(rho).grad(h) < 0 ) 
    360361            !                                                   ! i-direction 
    361362            za = zab(ji+1,jj,jp_tem) + zab(ji,jj,jp_tem)              ! 2*(alpha,beta) at u-point 
     
    365366               &      - zb * ( zts(ji+1,jj,jp_sal) - zts(ji,jj,jp_sal) )  ) * umask(ji,jj,1) 
    366367            ! 
    367             zsign  = SIGN(  0.5, -zgdrho * REAL( mgrhu(ji,jj) )  )    ! sign of ( i-gradient * i-slope ) 
     368            zsign  = SIGN(  0.5_wp, -zgdrho * REAL( mgrhu(ji,jj) )  )    ! sign of ( i-gradient * i-slope ) 
    368369            ahu_bbl(ji,jj) = ( 0.5 - zsign ) * ahu_bbl_0(ji,jj)       ! masked diffusive flux coeff. 
    369370            ! 
     
    375376               &      - zb * ( zts(ji,jj+1,jp_sal) - zts(ji,jj,jp_sal) )  ) * vmask(ji,jj,1) 
    376377            ! 
    377             zsign = SIGN(  0.5, -zgdrho * REAL( mgrhv(ji,jj) )  )     ! sign of ( j-gradient * j-slope ) 
     378            zsign = SIGN(  0.5_wp, -zgdrho * REAL( mgrhv(ji,jj) )  )     ! sign of ( j-gradient * j-slope ) 
    378379            ahv_bbl(ji,jj) = ( 0.5 - zsign ) * ahv_bbl_0(ji,jj) 
    379380         END_2D 
     
    387388         ! 
    388389         CASE( 1 )                                   != use of upper velocity 
    389             DO_2D_10_10 
     390            DO_2D( 1, 0, 1, 0 )                              ! criteria: grad(rho).grad(h)<0  and grad(rho).grad(h)<0 
    390391               !                                                  ! i-direction 
    391392               za = zab(ji+1,jj,jp_tem) + zab(ji,jj,jp_tem)               ! 2*(alpha,beta) at u-point 
     
    395396                         - zb * ( zts(ji+1,jj,jp_sal) - zts(ji,jj,jp_sal) )  ) * umask(ji,jj,1) 
    396397               ! 
    397                zsign = SIGN(  0.5, - zgdrho   * REAL( mgrhu(ji,jj) )  )   ! sign of i-gradient * i-slope 
    398                zsigna= SIGN(  0.5, zub(ji,jj) * REAL( mgrhu(ji,jj) )  )   ! sign of u * i-slope 
     398               zsign = SIGN(  0.5_wp, - zgdrho   * REAL( mgrhu(ji,jj) )  )   ! sign of i-gradient * i-slope 
     399               zsigna= SIGN(  0.5_wp, zub(ji,jj) * REAL( mgrhu(ji,jj) )  )   ! sign of u * i-slope 
    399400               ! 
    400401               !                                                          ! bbl velocity 
     
    407408               zgdrho = (  za * ( zts(ji,jj+1,jp_tem) - zts(ji,jj,jp_tem) )    & 
    408409                  &      - zb * ( zts(ji,jj+1,jp_sal) - zts(ji,jj,jp_sal) )  ) * vmask(ji,jj,1) 
    409                zsign = SIGN(  0.5, - zgdrho   * REAL( mgrhv(ji,jj) )  )   ! sign of j-gradient * j-slope 
    410                zsigna= SIGN(  0.5, zvb(ji,jj) * REAL( mgrhv(ji,jj) )  )   ! sign of u * i-slope 
     410               zsign = SIGN(  0.5_wp, - zgdrho   * REAL( mgrhv(ji,jj) )  )   ! sign of j-gradient * j-slope 
     411               zsigna= SIGN(  0.5_wp, zvb(ji,jj) * REAL( mgrhv(ji,jj) )  )   ! sign of u * i-slope 
    411412               ! 
    412413               !                                                          ! bbl transport 
     
    416417         CASE( 2 )                                 != bbl velocity = F( delta rho ) 
    417418            zgbbl = grav * rn_gambbl 
    418             DO_2D_10_10 
     419            DO_2D( 1, 0, 1, 0 )                         ! criteria: rho_up > rho_down 
    419420               !                                                  ! i-direction 
    420421               ! down-slope T-point i/k-index (deep)  &   up-slope T-point i/k-index (shelf) 
     
    504505      IF( tra_bbl_alloc() /= 0 )   CALL ctl_stop( 'STOP', 'tra_bbl_init : unable to allocate arrays' ) 
    505506      ! 
    506       IF( nn_bbl_adv == 1 )    WRITE(numout,*) '       * Advective BBL using upper velocity' 
    507       IF( nn_bbl_adv == 2 )    WRITE(numout,*) '       * Advective BBL using velocity = F( delta rho)' 
     507      IF(lwp) THEN 
     508         IF( nn_bbl_adv == 1 )    WRITE(numout,*) '       * Advective BBL using upper velocity' 
     509         IF( nn_bbl_adv == 2 )    WRITE(numout,*) '       * Advective BBL using velocity = F( delta rho)' 
     510      ENDIF 
    508511      ! 
    509512      !                             !* vertical index of  "deep" bottom u- and v-points 
    510       DO_2D_10_10 
     513      DO_2D( 1, 0, 1, 0 )                 ! (the "shelf" bottom k-indices are mbku and mbkv) 
    511514         mbku_d(ji,jj) = MAX(  mbkt(ji+1,jj  ) , mbkt(ji,jj)  )   ! >= 1 as mbkt=1 over land 
    512515         mbkv_d(ji,jj) = MAX(  mbkt(ji  ,jj+1) , mbkt(ji,jj)  ) 
     
    514517      ! converte into REAL to use lbc_lnk ; impose a min value of 1 as a zero can be set in lbclnk 
    515518      zmbku(:,:) = REAL( mbku_d(:,:), wp )   ;     zmbkv(:,:) = REAL( mbkv_d(:,:), wp )   
    516       CALL lbc_lnk_multi( 'trabbl', zmbku,'U',1., zmbkv,'V',1.)  
     519      CALL lbc_lnk_multi( 'trabbl', zmbku,'U',1.0_wp, zmbkv,'V',1.0_wp)  
    517520      mbku_d(:,:) = MAX( INT( zmbku(:,:) ), 1 ) ;  mbkv_d(:,:) = MAX( NINT( zmbkv(:,:) ), 1 ) 
    518521      ! 
    519522      !                             !* sign of grad(H) at u- and v-points; zero if grad(H) = 0 
    520523      mgrhu(:,:) = 0   ;   mgrhv(:,:) = 0 
    521       DO_2D_10_10 
     524      DO_2D( 1, 0, 1, 0 ) 
    522525         IF( gdept_0(ji+1,jj,mbkt(ji+1,jj)) - gdept_0(ji,jj,mbkt(ji,jj)) /= 0._wp ) THEN 
    523             mgrhu(ji,jj) = INT(  SIGN( 1.e0, gdept_0(ji+1,jj,mbkt(ji+1,jj)) - gdept_0(ji,jj,mbkt(ji,jj)) )  ) 
     526            mgrhu(ji,jj) = INT(  SIGN( 1.0_wp, gdept_0(ji+1,jj,mbkt(ji+1,jj)) - gdept_0(ji,jj,mbkt(ji,jj)) )  ) 
    524527         ENDIF 
    525528         ! 
    526529         IF( gdept_0(ji,jj+1,mbkt(ji,jj+1)) - gdept_0(ji,jj,mbkt(ji,jj)) /= 0._wp ) THEN 
    527             mgrhv(ji,jj) = INT(  SIGN( 1.e0, gdept_0(ji,jj+1,mbkt(ji,jj+1)) - gdept_0(ji,jj,mbkt(ji,jj)) )  ) 
     530            mgrhv(ji,jj) = INT(  SIGN( 1.0_wp, gdept_0(ji,jj+1,mbkt(ji,jj+1)) - gdept_0(ji,jj,mbkt(ji,jj)) )  ) 
    528531         ENDIF 
    529532      END_2D 
    530533      ! 
    531       DO_2D_10_10 
     534      DO_2D( 1, 0, 1, 0 )           !* bbl thickness at u- (v-) point; minimum of top & bottom e3u_0 (e3v_0) 
    532535         e3u_bbl_0(ji,jj) = MIN( e3u_0(ji,jj,mbkt(ji+1,jj  )), e3u_0(ji,jj,mbkt(ji,jj)) ) 
    533536         e3v_bbl_0(ji,jj) = MIN( e3v_0(ji,jj,mbkt(ji  ,jj+1)), e3v_0(ji,jj,mbkt(ji,jj)) ) 
    534537      END_2D 
    535       CALL lbc_lnk_multi( 'trabbl', e3u_bbl_0, 'U', 1. , e3v_bbl_0, 'V', 1. )      ! lateral boundary conditions 
     538      CALL lbc_lnk_multi( 'trabbl', e3u_bbl_0, 'U', 1.0_wp , e3v_bbl_0, 'V', 1.0_wp )      ! lateral boundary conditions 
    536539      ! 
    537540      !                             !* masked diffusive flux coefficients 
  • NEMO/branches/2020/r12377_ticket2386/src/OCE/TRA/tradmp.F90

    r12377 r13540  
    112112      CASE( 0 )                        !*  newtonian damping throughout the water column  *! 
    113113         DO jn = 1, jpts 
    114             DO_3D_00_00( 1, jpkm1 ) 
     114            DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    115115               pts(ji,jj,jk,jn,Krhs) = pts(ji,jj,jk,jn,Krhs)           & 
    116116                  &                  + resto(ji,jj,jk) * ( zts_dta(ji,jj,jk,jn) - pts(ji,jj,jk,jn,Kbb) ) 
     
    119119         ! 
    120120      CASE ( 1 )                       !*  no damping in the turbocline (avt > 5 cm2/s)  *! 
    121          DO_3D_00_00( 1, jpkm1 ) 
     121         DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    122122            IF( avt(ji,jj,jk) <= avt_c ) THEN 
    123123               pts(ji,jj,jk,jp_tem,Krhs) = pts(ji,jj,jk,jp_tem,Krhs)   & 
     
    129129         ! 
    130130      CASE ( 2 )                       !*  no damping in the mixed layer   *! 
    131          DO_3D_00_00( 1, jpkm1 ) 
     131         DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    132132            IF( gdept(ji,jj,jk,Kmm) >= hmlp (ji,jj) ) THEN 
    133133               pts(ji,jj,jk,jp_tem,Krhs) = pts(ji,jj,jk,jp_tem,Krhs)   & 
     
    208208         !                          ! Read in mask from file 
    209209         CALL iom_open ( cn_resto, imask) 
    210          CALL iom_get  ( imask, jpdom_autoglo, 'resto', resto ) 
     210         CALL iom_get  ( imask, jpdom_auto, 'resto', resto ) 
    211211         CALL iom_close( imask ) 
    212212      ENDIF 
  • NEMO/branches/2020/r12377_ticket2386/src/OCE/TRA/traisf.F90

    r12377 r13540  
    1111   !!---------------------------------------------------------------------- 
    1212   USE isf_oce                                     ! Ice shelf variables 
    13    USE dom_oce , ONLY : e3t, r1_e1e2t            ! ocean space domain variables 
     13   USE dom_oce                                     ! ocean space domain variables 
    1414   USE isfutils, ONLY : debug                      ! debug option 
    1515   USE timing  , ONLY : timing_start, timing_stop  ! Timing 
     
    2323   !! * Substitutions 
    2424#  include "do_loop_substitute.h90" 
     25#  include "domzgr_substitute.h90" 
    2526   !!---------------------------------------------------------------------- 
    2627   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    107108      ! 
    108109      ! update pts(:,:,:,:,Krhs) 
    109       DO_2D_11_11 
     110      DO_2D( 1, 1, 1, 1 ) 
    110111         ! 
    111112         ikt = ktop(ji,jj) 
     
    140141      ! 
    141142      DO jk = 1,jpk 
    142          ptsa(:,:,jk,jp_tem) = ptsa(:,:,jk,jp_tem) + ptsc(:,:,jk,jp_tem) * r1_e1e2t(:,:) / e3t(:,:,jk,Kmm) 
    143          ptsa(:,:,jk,jp_sal) = ptsa(:,:,jk,jp_sal) + ptsc(:,:,jk,jp_sal) * r1_e1e2t(:,:) / e3t(:,:,jk,Kmm) 
     143         ptsa(:,:,jk,jp_tem) =   & 
     144            &  ptsa(:,:,jk,jp_tem) + ptsc(:,:,jk,jp_tem) * r1_e1e2t(:,:) / e3t(:,:,jk,Kmm) 
     145         ptsa(:,:,jk,jp_sal) =   & 
     146            &  ptsa(:,:,jk,jp_sal) + ptsc(:,:,jk,jp_sal) * r1_e1e2t(:,:) / e3t(:,:,jk,Kmm) 
    144147      END DO 
    145148      ! 
  • NEMO/branches/2020/r12377_ticket2386/src/OCE/TRA/traldf_iso.F90

    r12511 r13540  
    4141   !! * Substitutions 
    4242#  include "do_loop_substitute.h90" 
     43#  include "domzgr_substitute.h90" 
    4344   !!---------------------------------------------------------------------- 
    4445   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    140141      IF( kpass == 1 ) THEN                  !==  first pass only  ==! 
    141142         ! 
    142          DO_3D_00_00( 2, jpkm1 ) 
     143         DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    143144            ! 
    144145            zmsku = wmask(ji,jj,jk) / MAX(   umask(ji  ,jj,jk-1) + umask(ji-1,jj,jk)          & 
     
    157158         ! 
    158159         IF( ln_traldf_msc ) THEN                ! stabilizing vertical diffusivity coefficient 
    159             DO_3D_00_00( 2, jpkm1 ) 
     160            DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    160161               akz(ji,jj,jk) = 0.25_wp * (                                                                     & 
    161162                  &              ( pahu(ji  ,jj,jk) + pahu(ji  ,jj,jk-1) ) / ( e1u(ji  ,jj) * e1u(ji  ,jj) )   & 
     
    166167            ! 
    167168            IF( ln_traldf_blp ) THEN                ! bilaplacian operator 
    168                DO_3D_10_10( 2, jpkm1 ) 
    169                   akz(ji,jj,jk) = 16._wp * ah_wslp2(ji,jj,jk)   & 
    170                      &          * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ( e3w(ji,jj,jk,Kmm) * e3w(ji,jj,jk,Kmm) )  ) 
     169               DO_3D( 1, 0, 1, 0, 2, jpkm1 ) 
     170                  akz(ji,jj,jk) = 16._wp   & 
     171                     &   * ah_wslp2   (ji,jj,jk)   & 
     172                     &   * (  akz     (ji,jj,jk)   & 
     173                     &      + ah_wslp2(ji,jj,jk)   & 
     174                     &        / ( e3w(ji,jj,jk,Kmm) * e3w(ji,jj,jk,Kmm) )  ) 
    171175               END_3D 
    172176            ELSEIF( ln_traldf_lap ) THEN              ! laplacian operator 
    173                DO_3D_10_10( 2, jpkm1 ) 
     177               DO_3D( 1, 0, 1, 0, 2, jpkm1 ) 
    174178                  ze3w_2 = e3w(ji,jj,jk,Kmm) * e3w(ji,jj,jk,Kmm) 
    175179                  zcoef0 = rDt * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2  ) 
     
    196200 
    197201         ! Horizontal tracer gradient  
    198          DO_3D_10_10( 1, jpkm1 ) 
     202         DO_3D( 1, 0, 1, 0, 1, jpkm1 ) 
    199203            zdit(ji,jj,jk) = ( pt(ji+1,jj  ,jk,jn) - pt(ji,jj,jk,jn) ) * umask(ji,jj,jk) 
    200204            zdjt(ji,jj,jk) = ( pt(ji  ,jj+1,jk,jn) - pt(ji,jj,jk,jn) ) * vmask(ji,jj,jk) 
    201205         END_3D 
    202206         IF( ln_zps ) THEN      ! botton and surface ocean correction of the horizontal gradient 
    203             DO_2D_10_10 
     207            DO_2D( 1, 0, 1, 0 )           ! bottom correction (partial bottom cell) 
    204208               zdit(ji,jj,mbku(ji,jj)) = pgu(ji,jj,jn)           
    205209               zdjt(ji,jj,mbkv(ji,jj)) = pgv(ji,jj,jn) 
    206210            END_2D 
    207211            IF( ln_isfcav ) THEN      ! first wet level beneath a cavity 
    208                DO_2D_10_10 
     212               DO_2D( 1, 0, 1, 0 ) 
    209213                  IF( miku(ji,jj) > 1 )   zdit(ji,jj,miku(ji,jj)) = pgui(ji,jj,jn)           
    210214                  IF( mikv(ji,jj) > 1 )   zdjt(ji,jj,mikv(ji,jj)) = pgvi(ji,jj,jn)      
     
    225229            ELSE                 ;   zdkt(:,:) = ( pt(:,:,jk-1,jn) - pt(:,:,jk,jn) ) * wmask(:,:,jk) 
    226230            ENDIF 
    227             DO_2D_10_10 
     231            DO_2D( 1, 0, 1, 0 )           !==  Horizontal fluxes 
    228232               zabe1 = pahu(ji,jj,jk) * e2_e1u(ji,jj) * e3u(ji,jj,jk,Kmm) 
    229233               zabe2 = pahv(ji,jj,jk) * e1_e2v(ji,jj) * e3v(ji,jj,jk,Kmm) 
     
    246250            END_2D 
    247251            ! 
    248             DO_2D_00_00 
    249                pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + zsign * (  zftu(ji,jj,jk) - zftu(ji-1,jj,jk)      & 
    250                   &                                                 + zftv(ji,jj,jk) - zftv(ji,jj-1,jk)  )   & 
     252            DO_2D( 0, 0, 0, 0 )           !== horizontal divergence and add to pta 
     253               pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn)    & 
     254                  &       + zsign * (  zftu(ji,jj,jk) - zftu(ji-1,jj,jk) + zftv(ji,jj,jk) - zftv(ji,jj-1,jk)  )   & 
    251255                  &                                              * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 
    252256            END_2D 
     
    262266         ztfw(:,:, 1 ) = 0._wp      ;      ztfw(:,:,jpk) = 0._wp 
    263267          
    264          DO_3D_00_00( 2, jpkm1 ) 
     268         DO_3D( 0, 0, 0, 0, 2, jpkm1 )    ! interior (2=<jk=<jpk-1) 
    265269            ! 
    266270            zmsku = wmask(ji,jj,jk) / MAX(   umask(ji  ,jj,jk-1) + umask(ji-1,jj,jk)          & 
     
    284288         !                                !==  add the vertical 33 flux  ==! 
    285289         IF( ln_traldf_lap ) THEN               ! laplacian case: eddy coef = ah_wslp2 - akz 
    286             DO_3D_00_00( 2, jpkm1 ) 
     290            DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    287291               ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * wmask(ji,jj,jk)   & 
    288292                  &                            * ( ah_wslp2(ji,jj,jk) - akz(ji,jj,jk) )               & 
     
    293297            SELECT CASE( kpass ) 
    294298            CASE(  1  )                            ! 1st pass : eddy coef = ah_wslp2 
    295                DO_3D_00_00( 2, jpkm1 ) 
    296                   ztfw(ji,jj,jk) = ztfw(ji,jj,jk)                       & 
    297                      &           + ah_wslp2(ji,jj,jk) * e1e2t(ji,jj)   & 
     299               DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     300                  ztfw(ji,jj,jk) =   & 
     301                     &  ztfw(ji,jj,jk) + ah_wslp2(ji,jj,jk) * e1e2t(ji,jj)   & 
    298302                     &           * ( pt(ji,jj,jk-1,jn) - pt(ji,jj,jk,jn) ) / e3w(ji,jj,jk,Kmm) * wmask(ji,jj,jk) 
    299303               END_3D 
    300304            CASE(  2  )                         ! 2nd pass : eddy flux = ah_wslp2 and akz applied on pt  and pt2 gradients, resp. 
    301                DO_3D_00_00( 2, jpkm1 ) 
     305               DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    302306                  ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * wmask(ji,jj,jk)                  & 
    303307                     &                            * (  ah_wslp2(ji,jj,jk) * ( pt (ji,jj,jk-1,jn) - pt (ji,jj,jk,jn) )   & 
     
    307311         ENDIF 
    308312         !          
    309          DO_3D_00_00( 1, jpkm1 ) 
    310             pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + zsign * (  ztfw (ji,jj,jk) - ztfw(ji,jj,jk+1)  )   & 
    311                &                                              * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 
     313         DO_3D( 0, 0, 0, 0, 1, jpkm1 )    !==  Divergence of vertical fluxes added to pta  ==! 
     314            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)   & 
     315               &                                             / e3t(ji,jj,jk,Kmm) 
    312316         END_3D 
    313317         ! 
  • NEMO/branches/2020/r12377_ticket2386/src/OCE/TRA/traldf_lap_blp.F90

    r12377 r13540  
    3838   !! * Substitutions 
    3939#  include "do_loop_substitute.h90" 
     40#  include "domzgr_substitute.h90" 
    4041   !!---------------------------------------------------------------------- 
    4142   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    9899      ELSE                    ;   zsign = -1._wp 
    99100      ENDIF 
    100       DO_3D_10_10( 1, jpkm1 ) 
     101      DO_3D( 1, 0, 1, 0, 1, jpkm1 ) 
    101102         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! 
    102103         zaheev(ji,jj,jk) = zsign * pahv(ji,jj,jk) * e1_e2v(ji,jj) * e3v(ji,jj,jk,Kmm)   !!gm   * vmask(ji,jj,jk) 
     
    107108         !                          ! =========== !     
    108109         !                                
    109          DO_3D_10_10( 1, jpkm1 ) 
     110         DO_3D( 1, 0, 1, 0, 1, jpkm1 )            !== First derivative (gradient)  ==! 
    110111            ztu(ji,jj,jk) = zaheeu(ji,jj,jk) * ( pt(ji+1,jj  ,jk,jn) - pt(ji,jj,jk,jn) ) 
    111112            ztv(ji,jj,jk) = zaheev(ji,jj,jk) * ( pt(ji  ,jj+1,jk,jn) - pt(ji,jj,jk,jn) ) 
    112113         END_3D 
    113          IF( ln_zps ) THEN                ! set gradient at bottom/top ocean level 
    114             DO_2D_10_10 
     114         IF( ln_zps ) THEN                             ! set gradient at bottom/top ocean level 
     115            DO_2D( 1, 0, 1, 0 )                              ! bottom 
    115116               ztu(ji,jj,mbku(ji,jj)) = zaheeu(ji,jj,mbku(ji,jj)) * pgu(ji,jj,jn) 
    116117               ztv(ji,jj,mbkv(ji,jj)) = zaheev(ji,jj,mbkv(ji,jj)) * pgv(ji,jj,jn) 
    117118            END_2D 
    118             IF( ln_isfcav ) THEN                ! top in ocean cavities only 
    119                DO_2D_10_10 
     119            IF( ln_isfcav ) THEN                             ! top in ocean cavities only 
     120               DO_2D( 1, 0, 1, 0 ) 
    120121                  IF( miku(ji,jj) > 1 )   ztu(ji,jj,miku(ji,jj)) = zaheeu(ji,jj,miku(ji,jj)) * pgui(ji,jj,jn)  
    121122                  IF( mikv(ji,jj) > 1 )   ztv(ji,jj,mikv(ji,jj)) = zaheev(ji,jj,mikv(ji,jj)) * pgvi(ji,jj,jn)  
     
    124125         ENDIF 
    125126         ! 
    126          DO_3D_00_00( 1, jpkm1 ) 
     127         DO_3D( 0, 0, 0, 0, 1, jpkm1 )            !== Second derivative (divergence) added to the general tracer trends  ==! 
    127128            pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + (  ztu(ji,jj,jk) - ztu(ji-1,jj,jk)     & 
    128129               &                                      +    ztv(ji,jj,jk) - ztv(ji,jj-1,jk) )   & 
     
    199200      END SELECT 
    200201      ! 
    201       CALL lbc_lnk( 'traldf_lap_blp', zlap(:,:,:,:) , 'T', 1. )     ! Lateral boundary conditions (unchanged sign) 
     202      CALL lbc_lnk( 'traldf_lap_blp', zlap(:,:,:,:) , 'T', 1.0_wp )     ! Lateral boundary conditions (unchanged sign) 
    202203      !                                               ! Partial top/bottom cell: GRADh( zlap )   
    203204      IF( ln_isfcav .AND. ln_zps ) THEN   ;   CALL zps_hde_isf( kt, Kmm, kjpt, zlap, zglu, zglv, zgui, zgvi )  ! both top & bottom 
  • NEMO/branches/2020/r12377_ticket2386/src/OCE/TRA/traldf_triad.F90

    r12511 r13540  
    4141   !! * Substitutions 
    4242#  include "do_loop_substitute.h90" 
     43#  include "domzgr_substitute.h90" 
    4344   !!---------------------------------------------------------------------- 
    4445   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    136137         DO ip = 0, 1                            ! i-k triads 
    137138            DO kp = 0, 1 
    138                DO_3D_10_10( 1, jpkm1 ) 
     139               DO_3D( 1, 0, 1, 0, 1, jpkm1 ) 
    139140                  ze3wr = 1._wp / e3w(ji+ip,jj,jk+kp,Kmm) 
    140141                  zbu   = e1e2u(ji,jj) * e3u(ji,jj,jk,Kmm) 
     
    156157         DO jp = 0, 1                            ! j-k triads  
    157158            DO kp = 0, 1 
    158                DO_3D_10_10( 1, jpkm1 ) 
     159               DO_3D( 1, 0, 1, 0, 1, jpkm1 ) 
    159160                  ze3wr = 1.0_wp / e3w(ji,jj+jp,jk+kp,Kmm) 
    160161                  zbv   = e1e2v(ji,jj) * e3v(ji,jj,jk,Kmm) 
     
    178179            ! 
    179180            IF( ln_traldf_blp ) THEN                ! bilaplacian operator 
    180                DO_3D_10_10( 2, jpkm1 ) 
    181                   akz(ji,jj,jk) = 16._wp * ah_wslp2(ji,jj,jk)   & 
    182                      &          * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ( e3w(ji,jj,jk,Kmm) * e3w(ji,jj,jk,Kmm) )  ) 
     181               DO_3D( 1, 0, 1, 0, 2, jpkm1 ) 
     182                  akz(ji,jj,jk) = 16._wp           & 
     183                     &   * ah_wslp2   (ji,jj,jk)   & 
     184                     &   * (  akz     (ji,jj,jk)   & 
     185                     &      + ah_wslp2(ji,jj,jk)   & 
     186                     &        / ( e3w (ji,jj,jk,Kmm) * e3w(ji,jj,jk,Kmm) )  ) 
    183187               END_3D 
    184188            ELSEIF( ln_traldf_lap ) THEN              ! laplacian operator 
    185                DO_3D_10_10( 2, jpkm1 ) 
     189               DO_3D( 1, 0, 1, 0, 2, jpkm1 ) 
    186190                  ze3w_2 = e3w(ji,jj,jk,Kmm) * e3w(ji,jj,jk,Kmm) 
    187191                  zcoef0 = rDt * (  akz(ji,jj,jk) + ah_wslp2(ji,jj,jk) / ze3w_2  ) 
     
    207211         zftv(:,:,:) = 0._wp 
    208212         ! 
    209          DO_3D_10_10( 1, jpkm1 ) 
     213         DO_3D( 1, 0, 1, 0, 1, jpkm1 )    !==  before lateral T & S gradients at T-level jk  ==! 
    210214            zdit(ji,jj,jk) = ( pt(ji+1,jj  ,jk,jn) - pt(ji,jj,jk,jn) ) * umask(ji,jj,jk) 
    211215            zdjt(ji,jj,jk) = ( pt(ji  ,jj+1,jk,jn) - pt(ji,jj,jk,jn) ) * vmask(ji,jj,jk) 
    212216         END_3D 
    213217         IF( ln_zps .AND. l_grad_zps ) THEN    ! partial steps: correction at top/bottom ocean level 
    214             DO_2D_10_10 
     218            DO_2D( 1, 0, 1, 0 )                    ! bottom level 
    215219               zdit(ji,jj,mbku(ji,jj)) = pgu(ji,jj,jn) 
    216220               zdjt(ji,jj,mbkv(ji,jj)) = pgv(ji,jj,jn) 
    217221            END_2D 
    218222            IF( ln_isfcav ) THEN                   ! top level (ocean cavities only) 
    219                DO_2D_10_10 
     223               DO_2D( 1, 0, 1, 0 ) 
    220224                  IF( miku(ji,jj)  > 1 )   zdit(ji,jj,miku(ji,jj) ) = pgui(ji,jj,jn)  
    221225                  IF( mikv(ji,jj)  > 1 )   zdjt(ji,jj,mikv(ji,jj) ) = pgvi(ji,jj,jn)  
     
    242246               DO ip = 0, 1              !==  Horizontal & vertical fluxes 
    243247                  DO kp = 0, 1 
    244                      DO_2D_10_10 
     248                     DO_2D( 1, 0, 1, 0 ) 
    245249                        ze1ur = r1_e1u(ji,jj) 
    246250                        zdxt  = zdit(ji,jj,jk) * ze1ur 
     
    263267               DO jp = 0, 1 
    264268                  DO kp = 0, 1 
    265                      DO_2D_10_10 
     269                     DO_2D( 1, 0, 1, 0 ) 
    266270                        ze2vr = r1_e2v(ji,jj) 
    267271                        zdyt  = zdjt(ji,jj,jk) * ze2vr 
     
    285289               DO ip = 0, 1               !==  Horizontal & vertical fluxes 
    286290                  DO kp = 0, 1 
    287                      DO_2D_10_10 
     291                     DO_2D( 1, 0, 1, 0 ) 
    288292                        ze1ur = r1_e1u(ji,jj) 
    289293                        zdxt  = zdit(ji,jj,jk) * ze1ur 
     
    306310               DO jp = 0, 1 
    307311                  DO kp = 0, 1 
    308                      DO_2D_10_10 
     312                     DO_2D( 1, 0, 1, 0 ) 
    309313                        ze2vr = r1_e2v(ji,jj) 
    310314                        zdyt  = zdjt(ji,jj,jk) * ze2vr 
     
    325329            ENDIF 
    326330            !                             !==  horizontal divergence and add to the general trend  ==! 
    327             DO_2D_00_00 
    328                pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + zsign * (  zftu(ji-1,jj,jk) - zftu(ji,jj,jk)       & 
     331            DO_2D( 0, 0, 0, 0 ) 
     332               pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn)    & 
     333                  &                       + zsign * (  zftu(ji-1,jj  ,jk) - zftu(ji,jj,jk)       & 
    329334                  &                                           + zftv(ji,jj-1,jk) - zftv(ji,jj,jk)   )   & 
    330335                  &                                        / (  e1e2t(ji,jj) * e3t(ji,jj,jk,Kmm)  ) 
     
    335340         !                                !==  add the vertical 33 flux  ==! 
    336341         IF( ln_traldf_lap ) THEN               ! laplacian case: eddy coef = ah_wslp2 - akz 
    337             DO_3D_10_00( 2, jpkm1 ) 
     342            DO_3D( 1, 0, 0, 0, 2, jpkm1 ) 
    338343               ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk)   & 
    339344                  &                            * ( ah_wslp2(ji,jj,jk) - akz(ji,jj,jk) )             & 
     
    343348            SELECT CASE( kpass ) 
    344349            CASE(  1  )                            ! 1st pass : eddy coef = ah_wslp2 
    345                DO_3D_10_00( 2, jpkm1 ) 
     350               DO_3D( 1, 0, 0, 0, 2, jpkm1 ) 
    346351                  ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk)             & 
    347352                     &                            * ah_wslp2(ji,jj,jk) * ( pt(ji,jj,jk-1,jn) - pt(ji,jj,jk,jn) ) 
    348353               END_3D 
    349354            CASE(  2  )                            ! 2nd pass : eddy flux = ah_wslp2 and akz applied on pt  and pt2 gradients, resp. 
    350                DO_3D_10_00( 2, jpkm1 ) 
     355               DO_3D( 1, 0, 0, 0, 2, jpkm1 ) 
    351356                  ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk)                      & 
    352357                     &                            * (  ah_wslp2(ji,jj,jk) * ( pt (ji,jj,jk-1,jn) - pt (ji,jj,jk,jn) )   & 
     
    356361         ENDIF 
    357362         ! 
    358          DO_3D_00_00( 1, jpkm1 ) 
    359             pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + zsign * (  ztfw(ji,jj,jk+1) - ztfw(ji,jj,jk)  )   & 
     363         DO_3D( 0, 0, 0, 0, 1, jpkm1 )      !==  Divergence of vertical fluxes added to pta  ==! 
     364            pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn)    & 
     365            &                                  + zsign * (  ztfw(ji,jj,jk+1) - ztfw(ji,jj,jk)  )   & 
    360366               &                                              / ( e1e2t(ji,jj) * e3t(ji,jj,jk,Kmm) ) 
    361367         END_3D 
  • NEMO/branches/2020/r12377_ticket2386/src/OCE/TRA/tramle.F90

    r12511 r13540  
    4949   !! * Substitutions 
    5050#  include "do_loop_substitute.h90" 
     51#  include "domzgr_substitute.h90" 
    5152   !!---------------------------------------------------------------------- 
    5253   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    99100      inml_mle(:,:) = mbkt(:,:) + 1                    ! init. to number of ocean w-level (T-level + 1) 
    100101      IF ( nla10 > 0 ) THEN                            ! avoid case where first level is thicker than 10m 
    101          DO_3DS_11_11( jpkm1, nlb10, -1 ) 
     102         DO_3DS( 1, 1, 1, 1, jpkm1, nlb10, -1 )        ! from the bottom to nlb10 (10m) 
    102103            IF( rhop(ji,jj,jk) > rhop(ji,jj,nla10) + rn_rho_c_mle )   inml_mle(ji,jj) = jk      ! Mixed layer 
    103104         END_3D 
     
    109110      zbm (:,:) = 0._wp 
    110111      zn2 (:,:) = 0._wp 
    111       DO_3D_11_11( 1, ikmax ) 
     112      DO_3D( 1, 1, 1, 1, 1, ikmax )                    ! MLD and mean buoyancy and N2 over the mixed layer 
    112113         zc = e3t(ji,jj,jk,Kmm) * REAL( MIN( MAX( 0, inml_mle(ji,jj)-jk ) , 1  )  )    ! zc being 0 outside the ML t-points 
    113114         zmld(ji,jj) = zmld(ji,jj) + zc 
     
    118119      SELECT CASE( nn_mld_uv )                         ! MLD at u- & v-pts 
    119120      CASE ( 0 )                                               != min of the 2 neighbour MLDs 
    120          DO_2D_10_10 
     121         DO_2D( 1, 0, 1, 0 ) 
    121122            zhu(ji,jj) = MIN( zmld(ji+1,jj), zmld(ji,jj) ) 
    122123            zhv(ji,jj) = MIN( zmld(ji,jj+1), zmld(ji,jj) ) 
    123124         END_2D 
    124125      CASE ( 1 )                                               != average of the 2 neighbour MLDs 
    125          DO_2D_10_10 
     126         DO_2D( 1, 0, 1, 0 ) 
    126127            zhu(ji,jj) = ( zmld(ji+1,jj) + zmld(ji,jj) ) * 0.5_wp 
    127128            zhv(ji,jj) = ( zmld(ji,jj+1) + zmld(ji,jj) ) * 0.5_wp 
    128129         END_2D 
    129130      CASE ( 2 )                                               != max of the 2 neighbour MLDs 
    130          DO_2D_10_10 
     131         DO_2D( 1, 0, 1, 0 ) 
    131132            zhu(ji,jj) = MAX( zmld(ji+1,jj), zmld(ji,jj) ) 
    132133            zhv(ji,jj) = MAX( zmld(ji,jj+1), zmld(ji,jj) ) 
     
    145146      ! 
    146147      IF( nn_mle == 0 ) THEN           ! Fox-Kemper et al. 2010 formulation 
    147          DO_2D_10_10 
     148         DO_2D( 1, 0, 1, 0 ) 
    148149            zpsim_u(ji,jj) = rn_ce * zhu(ji,jj) * zhu(ji,jj)  * e2_e1u(ji,jj)                                            & 
    149150               &           * ( zbm(ji+1,jj) - zbm(ji,jj) ) * MIN( 111.e3_wp , e1u(ji,jj) )   & 
     
    156157         ! 
    157158      ELSEIF( nn_mle == 1 ) THEN       ! New formulation (Lf = 5km fo/ff with fo=Coriolis parameter at latitude rn_lat) 
    158          DO_2D_10_10 
     159         DO_2D( 1, 0, 1, 0 ) 
    159160            zpsim_u(ji,jj) = rc_f *   zhu(ji,jj)   * zhu(ji,jj)   * e2_e1u(ji,jj)               & 
    160161               &                  * ( zbm(ji+1,jj) - zbm(ji,jj) ) * MIN( 111.e3_wp , e1u(ji,jj) ) 
     
    166167      ! 
    167168      IF( nn_conv == 1 ) THEN              ! No MLE in case of convection 
    168          DO_2D_10_10 
     169         DO_2D( 1, 0, 1, 0 ) 
    169170            IF( MIN( zn2(ji,jj) , zn2(ji+1,jj) ) < 0._wp )   zpsim_u(ji,jj) = 0._wp 
    170171            IF( MIN( zn2(ji,jj) , zn2(ji,jj+1) ) < 0._wp )   zpsim_v(ji,jj) = 0._wp 
     
    173174      ! 
    174175      !                                      !==  structure function value at uw- and vw-points  ==! 
    175       DO_2D_10_10 
     176      DO_2D( 1, 0, 1, 0 ) 
    176177         zhu(ji,jj) = 1._wp / zhu(ji,jj)                   ! hu --> 1/hu 
    177178         zhv(ji,jj) = 1._wp / zhv(ji,jj) 
     
    181182      zpsi_vw(:,:,:) = 0._wp 
    182183      ! 
    183       DO_3D_10_10( 2, ikmax ) 
     184      DO_3D( 1, 0, 1, 0, 2, ikmax )                ! start from 2 : surface value = 0 
    184185         zcuw = 1._wp - ( gdepw(ji+1,jj,jk,Kmm) + gdepw(ji,jj,jk,Kmm) ) * zhu(ji,jj) 
    185186         zcvw = 1._wp - ( gdepw(ji,jj+1,jk,Kmm) + gdepw(ji,jj,jk,Kmm) ) * zhv(ji,jj) 
     
    195196      !                                      !==  transport increased by the MLE induced transport ==! 
    196197      DO jk = 1, ikmax 
    197          DO_2D_10_10 
     198         DO_2D( 1, 0, 1, 0 )                      ! CAUTION pu,pv must be defined at row/column i=1 / j=1 
    198199            pu(ji,jj,jk) = pu(ji,jj,jk) + ( zpsi_uw(ji,jj,jk) - zpsi_uw(ji,jj,jk+1) ) 
    199200            pv(ji,jj,jk) = pv(ji,jj,jk) + ( zpsi_vw(ji,jj,jk) - zpsi_vw(ji,jj,jk+1) ) 
    200201         END_2D 
    201          DO_2D_00_00 
     202         DO_2D( 0, 0, 0, 0 ) 
    202203            pw(ji,jj,jk) = pw(ji,jj,jk) - ( zpsi_uw(ji,jj,jk) - zpsi_uw(ji-1,jj,jk)   & 
    203204               &                          + zpsi_vw(ji,jj,jk) - zpsi_vw(ji,jj-1,jk) ) 
     
    282283            IF( ierr /= 0 )   CALL ctl_stop( 'tra_adv_mle_init: failed to allocate arrays' ) 
    283284            z1_t2 = 1._wp / ( rn_time * rn_time ) 
    284             DO_2D_01_01 
     285            DO_2D( 0, 1, 0, 1 )                      ! "coriolis+ time^-1" at u- & v-points 
    285286               zfu = ( ff_f(ji,jj) + ff_f(ji,jj-1) ) * 0.5_wp 
    286287               zfv = ( ff_f(ji,jj) + ff_f(ji-1,jj) ) * 0.5_wp 
     
    288289               rfv(ji,jj) = SQRT(  zfv * zfv + z1_t2 ) 
    289290            END_2D 
    290             CALL lbc_lnk_multi( 'tramle', rfu, 'U', 1. , rfv, 'V', 1. ) 
     291            CALL lbc_lnk_multi( 'tramle', rfu, 'U', 1.0_wp , rfv, 'V', 1.0_wp ) 
    291292            ! 
    292293         ELSEIF( nn_mle == 1 ) THEN           ! MLE array allocation & initialisation 
  • NEMO/branches/2020/r12377_ticket2386/src/OCE/TRA/tranpc.F90

    r12511 r13540  
    3535   !! * Substitutions 
    3636#  include "do_loop_substitute.h90" 
     37#  include "domzgr_substitute.h90" 
    3738   !!---------------------------------------------------------------------- 
    3839   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    102103         inpcc = 0 
    103104         ! 
    104          DO_2D_00_00 
     105         DO_2D( 0, 0, 0, 0 )                                ! interior column only 
    105106            ! 
    106107            IF( tmask(ji,jj,2) == 1 ) THEN      ! At least 2 ocean points 
     
    309310         ENDIF 
    310311         ! 
    311          CALL lbc_lnk_multi( 'tranpc', pts(:,:,:,jp_tem,Kaa), 'T', 1., pts(:,:,:,jp_sal,Kaa), 'T', 1. ) 
     312         CALL lbc_lnk_multi( 'tranpc', pts(:,:,:,jp_tem,Kaa), 'T', 1.0_wp, pts(:,:,:,jp_sal,Kaa), 'T', 1.0_wp ) 
    312313         ! 
    313314         IF( lwp .AND. l_LB_debug ) THEN 
  • NEMO/branches/2020/r12377_ticket2386/src/OCE/TRA/traqsr.F90

    r12511 r13540  
    6363   REAL(wp) ::   xsi1r   ! inverse of rn_si1 
    6464   ! 
    65    REAL(wp) , DIMENSION(3,61)           ::   rkrgb    ! tabulated attenuation coefficients for RGB absorption 
     65   REAL(wp) , PUBLIC, DIMENSION(3,61)   ::   rkrgb    ! tabulated attenuation coefficients for RGB absorption 
    6666   TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   sf_chl   ! structure of input Chl (file informations, fields read) 
    6767 
    6868   !! * Substitutions 
    6969#  include "do_loop_substitute.h90" 
     70#  include "domzgr_substitute.h90" 
    7071   !!---------------------------------------------------------------------- 
    7172   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    110111      REAL(wp) ::   zc0 , zc1 , zc2 , zc3    !    -         - 
    111112      REAL(wp) ::   zzc0, zzc1, zzc2, zzc3   !    -         - 
    112       REAL(wp) ::   zz0 , zz1                !    -         - 
    113       REAL(wp) ::   zCb, zCmax, zze, zpsi, zpsimax, zdelpsi, zCtot, zCze 
    114       REAL(wp) ::   zlogc, zlogc2, zlogc3  
    115       REAL(wp), ALLOCATABLE, DIMENSION(:,:)   :: zekb, zekg, zekr 
    116       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ze0, ze1, ze2, ze3, zea, ztrdt 
    117       REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: zetot, zchl3d 
     113      REAL(wp) ::   zz0 , zz1 , ze3t, zlui   !    -         - 
     114      REAL(wp) ::   zCb, zCmax, zpsi, zpsimax, zrdpsi, zCze 
     115      REAL(wp) ::   zlogc, zlogze, zlogCtot, zlogCze 
     116      REAL(wp), ALLOCATABLE, DIMENSION(:,:)   :: ze0, ze1, ze2, ze3 
     117      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrdt, zetot, ztmp3d 
    118118      !!---------------------------------------------------------------------- 
    119119      ! 
     
    138138            IF(lwp) WRITE(numout,*) '          nit000-1 qsr tracer content forcing field read in the restart file' 
    139139            z1_2 = 0.5_wp 
    140             CALL iom_get( numror, jpdom_autoglo, 'qsr_hc_b', qsr_hc_b, ldxios = lrxios )   ! before heat content trend due to Qsr flux 
     140            CALL iom_get( numror, jpdom_auto, 'qsr_hc_b', qsr_hc_b, ldxios = lrxios )   ! before heat content trend due to Qsr flux 
    141141         ELSE                                           ! No restart or restart not found: Euler forward time stepping 
    142142            z1_2 = 1._wp 
     
    160160      CASE( np_RGB , np_RGBc )         !==  R-G-B fluxes  ==! 
    161161         ! 
    162          ALLOCATE( zekb(jpi,jpj)     , zekg(jpi,jpj)     , zekr  (jpi,jpj)     , & 
    163             &      ze0 (jpi,jpj,jpk) , ze1 (jpi,jpj,jpk) , ze2   (jpi,jpj,jpk) , & 
    164             &      ze3 (jpi,jpj,jpk) , zea (jpi,jpj,jpk) , zchl3d(jpi,jpj,jpk)   )  
     162         ALLOCATE( ze0 (jpi,jpj)           , ze1 (jpi,jpj) ,  & 
     163            &      ze2 (jpi,jpj)           , ze3 (jpi,jpj) ,  & 
     164            &      ztmp3d(jpi,jpj,nksr + 1)                     ) 
    165165         ! 
    166166         IF( nqsr == np_RGBc ) THEN          !*  Variable Chlorophyll 
    167167            CALL fld_read( kt, 1, sf_chl )         ! Read Chl data and provides it at the current time step 
     168            ! 
     169            ! Separation in R-G-B depending on the surface Chl 
     170            ! perform and store as many of the 2D calculations as possible 
     171            ! before the 3D loop (use the temporary 2D arrays to replace the 
     172            ! most expensive calculations) 
     173            ! 
     174            DO_2D( 0, 0, 0, 0 ) 
     175                       ! zlogc = log(zchl) 
     176               zlogc = LOG ( MIN( 10. , MAX( 0.03, sf_chl(1)%fnow(ji,jj,1) ) ) )      
     177                       ! zc1 : log(zCze)  = log (1.12  * zchl**0.803) 
     178               zc1   = 0.113328685307 + 0.803 * zlogc                          
     179                       ! zc2 : log(zCtot) = log(40.6  * zchl**0.459) 
     180               zc2   = 3.703768066608 + 0.459 * zlogc                            
     181                       ! zc3 : log(zze)   = log(568.2 * zCtot**(-0.746)) 
     182               zc3   = 6.34247346942  - 0.746 * zc2                            
     183                       ! IF( log(zze) > log(102.) ) log(zze) = log(200.0 * zCtot**(-0.293)) 
     184               IF( zc3 > 4.62497281328 ) zc3 = 5.298317366548 - 0.293 * zc2         
     185               !    
     186               ze0(ji,jj) = zlogc                                                 ! ze0 = log(zchl) 
     187               ze1(ji,jj) = EXP( zc1 )                                            ! ze1 = zCze 
     188               ze2(ji,jj) = 1._wp / ( 0.710 + zlogc * ( 0.159 + zlogc * 0.021 ) ) ! ze2 = 1/zdelpsi 
     189               ze3(ji,jj) = EXP( - zc3 )                                          ! ze3 = 1/zze 
     190            END_2D 
     191             
     192! 
     193            DO_3D( 0, 0, 0, 0, 1, nksr + 1 ) 
     194               ! zchl    = ALOG( ze0(ji,jj) ) 
     195               zlogc = ze0(ji,jj) 
     196               ! 
     197               zCb       = 0.768 + zlogc * ( 0.087 - zlogc * ( 0.179 + zlogc * 0.025 ) ) 
     198               zCmax     = 0.299 - zlogc * ( 0.289 - zlogc * 0.579 ) 
     199               zpsimax   = 0.6   - zlogc * ( 0.640 - zlogc * ( 0.021 + zlogc * 0.115 ) ) 
     200               ! zdelpsi = 0.710 + zlogc * ( 0.159 + zlogc * 0.021 ) 
     201               ! 
     202               zCze   = ze1(ji,jj) 
     203               zrdpsi = ze2(ji,jj)                                                 ! 1/zdelpsi 
     204               zpsi   = ze3(ji,jj) * gdepw(ji,jj,jk,Kmm)                           ! gdepw/zze 
     205               ! 
     206               ! NB. make sure zchl value is such that: zchl = MIN( 10. , MAX( 0.03, zchl ) ) 
     207               zchl = MIN( 10. , MAX( 0.03, zCze * ( zCb + zCmax * EXP( -( (zpsi - zpsimax) * zrdpsi )**2 ) ) ) ) 
     208               ! Convert chlorophyll value to attenuation coefficient look-up table index 
     209               ztmp3d(ji,jj,jk) = 41 + 20.*LOG10(zchl) + 1.e-15 
     210            END_3D 
     211         ELSE                                !* constant chlorophyll 
     212            zchl = 0.05 
     213            ! NB. make sure constant value is such that:  
     214            zchl = MIN( 10. , MAX( 0.03, zchl ) ) 
     215            ! Convert chlorophyll value to attenuation coefficient look-up table index 
     216            zlui = 41 + 20.*LOG10(zchl) + 1.e-15 
    168217            DO jk = 1, nksr + 1 
    169                DO jj = 2, jpjm1                       ! Separation in R-G-B depending of the surface Chl 
    170                   DO ji = 2, jpim1 
    171                      zchl    = MIN( 10. , MAX( 0.03, sf_chl(1)%fnow(ji,jj,1) ) ) 
    172                      zCtot   = 40.6  * zchl**0.459 
    173                      zze     = 568.2 * zCtot**(-0.746) 
    174                      IF( zze > 102. ) zze = 200.0 * zCtot**(-0.293) 
    175                      zpsi    = gdepw(ji,jj,jk,Kmm) / zze 
    176                      ! 
    177                      zlogc   = LOG( zchl ) 
    178                      zlogc2  = zlogc * zlogc 
    179                      zlogc3  = zlogc * zlogc * zlogc 
    180                      zCb     = 0.768 + 0.087 * zlogc - 0.179 * zlogc2 - 0.025 * zlogc3 
    181                      zCmax   = 0.299 - 0.289 * zlogc + 0.579 * zlogc2 
    182                      zpsimax = 0.6   - 0.640 * zlogc + 0.021 * zlogc2 + 0.115 * zlogc3 
    183                      zdelpsi = 0.710 + 0.159 * zlogc + 0.021 * zlogc2 
    184                      zCze    = 1.12  * (zchl)**0.803  
    185                      ! 
    186                      zchl3d(ji,jj,jk) = zCze * ( zCb + zCmax * EXP( -( (zpsi - zpsimax) / zdelpsi )**2 ) ) 
    187                   END DO 
    188                   ! 
    189                END DO 
     218               ztmp3d(:,:,jk) = zlui  
    190219            END DO 
    191          ELSE                                !* constant chrlorophyll 
    192            DO jk = 1, nksr + 1 
    193               zchl3d(:,:,jk) = 0.05  
    194             ENDDO 
    195220         ENDIF 
    196221         ! 
    197222         zcoef  = ( 1. - rn_abs ) / 3._wp    !* surface equi-partition in R-G-B 
    198          DO_2D_00_00 
    199             ze0(ji,jj,1) = rn_abs * qsr(ji,jj) 
    200             ze1(ji,jj,1) = zcoef  * qsr(ji,jj) 
    201             ze2(ji,jj,1) = zcoef  * qsr(ji,jj) 
    202             ze3(ji,jj,1) = zcoef  * qsr(ji,jj) 
    203             zea(ji,jj,1) =          qsr(ji,jj) 
     223         DO_2D( 0, 0, 0, 0 ) 
     224            ze0(ji,jj) = rn_abs * qsr(ji,jj) 
     225            ze1(ji,jj) = zcoef  * qsr(ji,jj) 
     226            ze2(ji,jj) = zcoef  * qsr(ji,jj) 
     227            ze3(ji,jj) = zcoef  * qsr(ji,jj) 
     228            ! store the surface SW radiation; re-use the surface ztmp3d array  
     229            ! since the surface attenuation coefficient is not used 
     230            ztmp3d(ji,jj,1) =       qsr(ji,jj) 
    204231         END_2D 
    205232         ! 
    206          DO jk = 2, nksr+1                   !* interior equi-partition in R-G-B depending of vertical profile of Chl 
    207             DO_2D_00_00 
    208                zchl = MIN( 10. , MAX( 0.03, zchl3d(ji,jj,jk) ) ) 
    209                irgb = NINT( 41 + 20.*LOG10(zchl) + 1.e-15 ) 
    210                zekb(ji,jj) = rkrgb(1,irgb) 
    211                zekg(ji,jj) = rkrgb(2,irgb) 
    212                zekr(ji,jj) = rkrgb(3,irgb) 
    213             END_2D 
    214  
    215             DO_2D_00_00 
    216                zc0 = ze0(ji,jj,jk-1) * EXP( - e3t(ji,jj,jk-1,Kmm) * xsi0r       ) 
    217                zc1 = ze1(ji,jj,jk-1) * EXP( - e3t(ji,jj,jk-1,Kmm) * zekb(ji,jj) ) 
    218                zc2 = ze2(ji,jj,jk-1) * EXP( - e3t(ji,jj,jk-1,Kmm) * zekg(ji,jj) ) 
    219                zc3 = ze3(ji,jj,jk-1) * EXP( - e3t(ji,jj,jk-1,Kmm) * zekr(ji,jj) ) 
    220                ze0(ji,jj,jk) = zc0 
    221                ze1(ji,jj,jk) = zc1 
    222                ze2(ji,jj,jk) = zc2 
    223                ze3(ji,jj,jk) = zc3 
    224                zea(ji,jj,jk) = ( zc0 + zc1 + zc2 + zc3 ) * wmask(ji,jj,jk) 
    225             END_2D 
    226          END DO 
    227          ! 
    228          DO_3D_00_00( 1, nksr ) 
    229             qsr_hc(ji,jj,jk) = r1_rho0_rcp * ( zea(ji,jj,jk) - zea(ji,jj,jk+1) ) 
     233         !                                    !* interior equi-partition in R-G-B depending on vertical profile of Chl 
     234         DO_3D( 0, 0, 0, 0, 2, nksr + 1 ) 
     235            ze3t = e3t(ji,jj,jk-1,Kmm) 
     236            irgb = NINT( ztmp3d(ji,jj,jk) ) 
     237            zc0 = ze0(ji,jj) * EXP( - ze3t * xsi0r ) 
     238            zc1 = ze1(ji,jj) * EXP( - ze3t * rkrgb(1,irgb) ) 
     239            zc2 = ze2(ji,jj) * EXP( - ze3t * rkrgb(2,irgb) ) 
     240            zc3 = ze3(ji,jj) * EXP( - ze3t * rkrgb(3,irgb) ) 
     241            ze0(ji,jj) = zc0 
     242            ze1(ji,jj) = zc1 
     243            ze2(ji,jj) = zc2 
     244            ze3(ji,jj) = zc3 
     245            ztmp3d(ji,jj,jk) = ( zc0 + zc1 + zc2 + zc3 ) * wmask(ji,jj,jk) 
    230246         END_3D 
    231247         ! 
    232          DEALLOCATE( zekb , zekg , zekr , ze0 , ze1 , ze2 , ze3 , zea , zchl3d )  
     248         DO_3D( 0, 0, 0, 0, 1, nksr )          !* now qsr induced heat content 
     249            qsr_hc(ji,jj,jk) = r1_rho0_rcp * ( ztmp3d(ji,jj,jk) - ztmp3d(ji,jj,jk+1) ) 
     250         END_3D 
     251         ! 
     252         DEALLOCATE( ze0 , ze1 , ze2 , ze3 , ztmp3d )  
    233253         ! 
    234254      CASE( np_2BD  )            !==  2-bands fluxes  ==! 
     
    236256         zz0 =        rn_abs   * r1_rho0_rcp      ! surface equi-partition in 2-bands 
    237257         zz1 = ( 1. - rn_abs ) * r1_rho0_rcp 
    238          DO_3D_00_00( 1, nksr ) 
     258         DO_3D( 0, 0, 0, 0, 1, nksr )             ! solar heat absorbed at T-point in the top 400m  
    239259            zc0 = zz0 * EXP( -gdepw(ji,jj,jk  ,Kmm)*xsi0r ) + zz1 * EXP( -gdepw(ji,jj,jk  ,Kmm)*xsi1r ) 
    240260            zc1 = zz0 * EXP( -gdepw(ji,jj,jk+1,Kmm)*xsi0r ) + zz1 * EXP( -gdepw(ji,jj,jk+1,Kmm)*xsi1r ) 
     
    245265      ! 
    246266      !                          !-----------------------------! 
    247       DO_3D_00_00( 1, nksr ) 
     267      !                          !  update to the temp. trend  ! 
     268      !                          !-----------------------------! 
     269      DO_3D( 0, 0, 0, 0, 1, nksr ) 
    248270         pts(ji,jj,jk,jp_tem,Krhs) = pts(ji,jj,jk,jp_tem,Krhs)   & 
    249             &                      + z1_2 * ( qsr_hc_b(ji,jj,jk) + qsr_hc(ji,jj,jk) ) / e3t(ji,jj,jk,Kmm) 
     271            &                      + z1_2 * ( qsr_hc_b(ji,jj,jk) + qsr_hc(ji,jj,jk) )   & 
     272            &                             / e3t(ji,jj,jk,Kmm) 
    250273      END_3D 
    251274      ! 
    252275      ! sea-ice: store the 1st ocean level attenuation coefficient 
    253       DO_2D_00_00 
     276      DO_2D( 0, 0, 0, 0 ) 
    254277         IF( qsr(ji,jj) /= 0._wp ) THEN   ;   fraqsr_1lev(ji,jj) = qsr_hc(ji,jj,1) / ( r1_rho0_rcp * qsr(ji,jj) ) 
    255278         ELSE                             ;   fraqsr_1lev(ji,jj) = 1._wp 
     
    396419         IF( .NOT.lk_top )   CALL ctl_stop( 'No bio model : ln_qsr_bio = true impossible ' ) 
    397420         ! 
     421         CALL trc_oce_rgb( rkrgb )                 ! tabulated attenuation coef. 
     422         !                                    
     423         nksr = trc_oce_ext_lev( r_si2, 33._wp )   ! level of light extinction 
     424         ! 
     425         IF(lwp) WRITE(numout,*) '        level of light extinction = ', nksr, ' ref depth = ', gdepw_1d(nksr+1), ' m' 
     426         ! 
    398427      END SELECT 
    399428      ! 
     
    402431      ! 1st ocean level attenuation coefficient (used in sbcssm) 
    403432      IF( iom_varid( numror, 'fraqsr_1lev', ldstop = .FALSE. ) > 0 ) THEN 
    404          CALL iom_get( numror, jpdom_autoglo, 'fraqsr_1lev'  , fraqsr_1lev, ldxios = lrxios  ) 
     433         CALL iom_get( numror, jpdom_auto, 'fraqsr_1lev'  , fraqsr_1lev, ldxios = lrxios  ) 
    405434      ELSE 
    406435         fraqsr_1lev(:,:) = 1._wp   ! default : no penetration 
  • NEMO/branches/2020/r12377_ticket2386/src/OCE/TRA/trasbc.F90

    r12511 r13540  
    4343   !! * Substitutions 
    4444#  include "do_loop_substitute.h90" 
     45#  include "domzgr_substitute.h90" 
    4546   !!---------------------------------------------------------------------- 
    4647   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    111112            zfact = 0.5_wp 
    112113            sbc_tsc(:,:,:) = 0._wp 
    113             CALL iom_get( numror, jpdom_autoglo, 'sbc_hc_b', sbc_tsc_b(:,:,jp_tem), ldxios = lrxios )   ! before heat content sbc trend 
    114             CALL iom_get( numror, jpdom_autoglo, 'sbc_sc_b', sbc_tsc_b(:,:,jp_sal), ldxios = lrxios )   ! before salt content sbc trend 
     114            CALL iom_get( numror, jpdom_auto, 'sbc_hc_b', sbc_tsc_b(:,:,jp_tem), ldxios = lrxios )   ! before heat content sbc trend 
     115            CALL iom_get( numror, jpdom_auto, 'sbc_sc_b', sbc_tsc_b(:,:,jp_sal), ldxios = lrxios )   ! before salt content sbc trend 
    115116         ELSE                                   ! No restart or restart not found: Euler forward time stepping 
    116117            zfact = 1._wp 
     
    123124      ENDIF 
    124125      !                             !==  Now sbc tracer content fields  ==! 
    125       DO_2D_01_00 
     126      DO_2D( 0, 1, 0, 0 ) 
    126127         sbc_tsc(ji,jj,jp_tem) = r1_rho0_rcp * qns(ji,jj)   ! non solar heat flux 
    127128         sbc_tsc(ji,jj,jp_sal) = r1_rho0     * sfx(ji,jj)   ! salt flux due to freezing/melting 
    128129      END_2D 
    129130      IF( ln_linssh ) THEN                !* linear free surface   
    130          DO_2D_01_00 
     131         DO_2D( 0, 1, 0, 0 )                    !==>> add concentration/dilution effect due to constant volume cell 
    131132            sbc_tsc(ji,jj,jp_tem) = sbc_tsc(ji,jj,jp_tem) + r1_rho0 * emp(ji,jj) * pts(ji,jj,1,jp_tem,Kmm) 
    132133            sbc_tsc(ji,jj,jp_sal) = sbc_tsc(ji,jj,jp_sal) + r1_rho0 * emp(ji,jj) * pts(ji,jj,1,jp_sal,Kmm) 
    133          END_2D 
     134         END_2D                                 !==>> output c./d. term 
    134135         IF( iom_use('emp_x_sst') )   CALL iom_put( "emp_x_sst", emp (:,:) * pts(:,:,1,jp_tem,Kmm) ) 
    135136         IF( iom_use('emp_x_sss') )   CALL iom_put( "emp_x_sss", emp (:,:) * pts(:,:,1,jp_sal,Kmm) ) 
     
    137138      ! 
    138139      DO jn = 1, jpts               !==  update tracer trend  ==! 
    139          DO_2D_01_00 
    140             pts(ji,jj,1,jn,Krhs) = pts(ji,jj,1,jn,Krhs) + zfact * ( sbc_tsc_b(ji,jj,jn) + sbc_tsc(ji,jj,jn) ) / e3t(ji,jj,1,Kmm) 
     140         DO_2D( 0, 1, 0, 0 ) 
     141            pts(ji,jj,1,jn,Krhs) = pts(ji,jj,1,jn,Krhs) + zfact * ( sbc_tsc_b(ji,jj,jn) + sbc_tsc(ji,jj,jn) )    & 
     142               &                                                / e3t(ji,jj,1,Kmm) 
    141143         END_2D 
    142144      END DO 
     
    155157      IF( ln_rnf ) THEN         ! input of heat and salt due to river runoff  
    156158         zfact = 0.5_wp 
    157          DO_2D_01_00 
     159         DO_2D( 0, 1, 0, 0 ) 
    158160            IF( rnf(ji,jj) /= 0._wp ) THEN 
    159161               zdep = zfact / h_rnf(ji,jj) 
     
    180182          ! 
    181183         IF( ln_linssh ) THEN  
    182             DO_2D_01_00 
     184            DO_2D( 0, 1, 0, 0 ) 
    183185               ztim = ssh_iau(ji,jj) / e3t(ji,jj,1,Kmm) 
    184186               pts(ji,jj,1,jp_tem,Krhs) = pts(ji,jj,1,jp_tem,Krhs) + pts(ji,jj,1,jp_tem,Kmm) * ztim 
     
    186188            END_2D 
    187189         ELSE 
    188             DO_2D_01_00 
     190            DO_2D( 0, 1, 0, 0 ) 
    189191               ztim = ssh_iau(ji,jj) / ( ht(ji,jj) + 1. - ssmask(ji, jj) ) 
    190192               pts(ji,jj,:,jp_tem,Krhs) = pts(ji,jj,:,jp_tem,Krhs) + pts(ji,jj,:,jp_tem,Kmm) * ztim 
  • NEMO/branches/2020/r12377_ticket2386/src/OCE/TRA/trazdf.F90

    r12511 r13540  
    3737   !! * Substitutions 
    3838#  include "do_loop_substitute.h90" 
     39#  include "domzgr_substitute.h90" 
    3940   !!---------------------------------------------------------------------- 
    4041   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    8485      IF( l_trdtra )   THEN                      ! save the vertical diffusive trends for further diagnostics 
    8586         DO jk = 1, jpkm1 
    86             ztrdt(:,:,jk) = ( ( pts(:,:,jk,jp_tem,Kaa)*e3t(:,:,jk,Kaa) - pts(:,:,jk,jp_tem,Kbb)*e3t(:,:,jk,Kbb) ) & 
    87                &          / (e3t(:,:,jk,Kmm)*rDt) ) - ztrdt(:,:,jk) 
    88             ztrds(:,:,jk) = ( ( pts(:,:,jk,jp_sal,Kaa)*e3t(:,:,jk,Kaa) - pts(:,:,jk,jp_sal,Kbb)*e3t(:,:,jk,Kbb) ) & 
    89               &           / (e3t(:,:,jk,Kmm)*rDt) ) - ztrds(:,:,jk) 
     87            ztrdt(:,:,jk) = (   (  pts(:,:,jk,jp_tem,Kaa)*e3t(:,:,jk,Kaa)     & 
     88               &                 - pts(:,:,jk,jp_tem,Kbb)*e3t(:,:,jk,Kbb)  )  & 
     89               &              / (  e3t(:,:,jk,Kmm)*rDt  )   )                 & 
     90               &          - ztrdt(:,:,jk) 
     91            ztrds(:,:,jk) = (   (  pts(:,:,jk,jp_sal,Kaa)*e3t(:,:,jk,Kaa)     & 
     92               &                 - pts(:,:,jk,jp_sal,Kbb)*e3t(:,:,jk,Kbb)  )  & 
     93               &             / (   e3t(:,:,jk,Kmm)*rDt  )   )                 & 
     94               &          - ztrds(:,:,jk) 
    9095         END DO 
    9196!!gm this should be moved in trdtra.F90 and done on all trends 
    92          CALL lbc_lnk_multi( 'trazdf', ztrdt, 'T', 1. , ztrds, 'T', 1. ) 
     97         CALL lbc_lnk_multi( 'trazdf', ztrdt, 'T', 1.0_wp , ztrds, 'T', 1.0_wp ) 
    9398!!gm 
    9499         CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_zdf, ztrdt ) 
     
    156161            IF( l_ldfslp ) THEN            ! isoneutral diffusion: add the contribution  
    157162               IF( ln_traldf_msc  ) THEN     ! MSC iso-neutral operator  
    158                   DO_3D_00_00( 2, jpkm1 ) 
     163                  DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    159164                     zwt(ji,jj,jk) = zwt(ji,jj,jk) + akz(ji,jj,jk)   
    160165                  END_3D 
    161166               ELSE                          ! standard or triad iso-neutral operator 
    162                   DO_3D_00_00( 2, jpkm1 ) 
     167                  DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    163168                     zwt(ji,jj,jk) = zwt(ji,jj,jk) + ah_wslp2(ji,jj,jk) 
    164169                  END_3D 
     
    168173            ! Diagonal, lower (i), upper (s)  (including the bottom boundary condition since avt is masked) 
    169174            IF( ln_zad_Aimp ) THEN         ! Adaptive implicit vertical advection 
    170                DO_3D_00_00( 1, jpkm1 ) 
     175               DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    171176                  zzwi = - p2dt * zwt(ji,jj,jk  ) / e3w(ji,jj,jk  ,Kmm) 
    172177                  zzws = - p2dt * zwt(ji,jj,jk+1) / e3w(ji,jj,jk+1,Kmm) 
     
    177182               END_3D 
    178183            ELSE 
    179                DO_3D_00_00( 1, jpkm1 ) 
     184               DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    180185                  zwi(ji,jj,jk) = - p2dt * zwt(ji,jj,jk  ) / e3w(ji,jj,jk,Kmm) 
    181186                  zws(ji,jj,jk) = - p2dt * zwt(ji,jj,jk+1) / e3w(ji,jj,jk+1,Kmm) 
     
    203208            !   used as a work space array: its value is modified. 
    204209            ! 
    205             DO_2D_00_00 
     210            DO_2D( 0, 0, 0, 0 )      !* 1st recurrence:   Tk = Dk - Ik Sk-1 / Tk-1   (increasing k) ! done one for all passive tracers (so included in the IF instruction) 
    206211               zwt(ji,jj,1) = zwd(ji,jj,1) 
    207212            END_2D 
    208             DO_3D_00_00( 2, jpkm1 ) 
     213            DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    209214               zwt(ji,jj,jk) = zwd(ji,jj,jk) - zwi(ji,jj,jk) * zws(ji,jj,jk-1) / zwt(ji,jj,jk-1) 
    210215            END_3D 
     
    212217         ENDIF  
    213218         !          
    214          DO_2D_00_00 
    215             pt(ji,jj,1,jn,Kaa) = e3t(ji,jj,1,Kbb) * pt(ji,jj,1,jn,Kbb) + p2dt * e3t(ji,jj,1,Kmm) * pt(ji,jj,1,jn,Krhs) 
     219         DO_2D( 0, 0, 0, 0 )         !* 2nd recurrence:    Zk = Yk - Ik / Tk-1  Zk-1 
     220            pt(ji,jj,1,jn,Kaa) =        e3t(ji,jj,1,Kbb) * pt(ji,jj,1,jn,Kbb)    & 
     221               &               + p2dt * e3t(ji,jj,1,Kmm) * pt(ji,jj,1,jn,Krhs) 
    216222         END_2D 
    217          DO_3D_00_00( 2, jpkm1 ) 
    218             zrhs = e3t(ji,jj,jk,Kbb) * pt(ji,jj,jk,jn,Kbb) + p2dt * e3t(ji,jj,jk,Kmm) * pt(ji,jj,jk,jn,Krhs)   ! zrhs=right hand side 
     223         DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     224            zrhs =        e3t(ji,jj,jk,Kbb) * pt(ji,jj,jk,jn,Kbb)    &  
     225               & + p2dt * e3t(ji,jj,jk,Kmm) * pt(ji,jj,jk,jn,Krhs)   ! zrhs=right hand side 
    219226            pt(ji,jj,jk,jn,Kaa) = zrhs - zwi(ji,jj,jk) / zwt(ji,jj,jk-1) * pt(ji,jj,jk-1,jn,Kaa) 
    220227         END_3D 
    221228         ! 
    222          DO_2D_00_00 
     229         DO_2D( 0, 0, 0, 0 )         !* 3d recurrence:    Xk = (Zk - Sk Xk+1 ) / Tk   (result is the after tracer) 
    223230            pt(ji,jj,jpkm1,jn,Kaa) = pt(ji,jj,jpkm1,jn,Kaa) / zwt(ji,jj,jpkm1) * tmask(ji,jj,jpkm1) 
    224231         END_2D 
    225          DO_3DS_00_00( jpk-2, 1, -1 ) 
     232         DO_3DS( 0, 0, 0, 0, jpk-2, 1, -1 ) 
    226233            pt(ji,jj,jk,jn,Kaa) = ( pt(ji,jj,jk,jn,Kaa) - zws(ji,jj,jk) * pt(ji,jj,jk+1,jn,Kaa) )   & 
    227234               &             / zwt(ji,jj,jk) * tmask(ji,jj,jk) 
  • NEMO/branches/2020/r12377_ticket2386/src/OCE/TRA/zpshde.F90

    r12377 r13540  
    3232   !! * Substitutions 
    3333#  include "do_loop_substitute.h90" 
     34#  include "domzgr_substitute.h90" 
    3435   !!---------------------------------------------------------------------- 
    3536   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    6566      !!              ___ |   |   |           ___  |   |   | 
    6667      !!                   
    67       !!      case 1->   e3w(i+1) >= e3w(i) ( and e3w(j+1) >= e3w(j) ) then 
    68       !!          t~ = t(i+1,j  ,k) + (e3w(i+1) - e3w(i)) * dk(Ti+1)/e3w(i+1) 
    69       !!        ( t~ = t(i  ,j+1,k) + (e3w(j+1) - e3w(j)) * dk(Tj+1)/e3w(j+1)  ) 
     68      !!      case 1->   e3w(i+1,:,:,Kmm) >= e3w(i,:,:,Kmm) ( and e3w(:,j+1,:,Kmm) >= e3w(:,j,:,Kmm) ) then 
     69      !!          t~ = t(i+1,j  ,k) + (e3w(i+1,j,k,Kmm) - e3w(i,j,k,Kmm)) * dk(Ti+1)/e3w(i+1,j,k,Kmm) 
     70      !!        ( t~ = t(i  ,j+1,k) + (e3w(i,j+1,k,Kmm) - e3w(i,j,k,Kmm)) * dk(Tj+1)/e3w(i,j+1,k,Kmm)  ) 
    7071      !!          or 
    71       !!      case 2->   e3w(i+1) <= e3w(i) ( and e3w(j+1) <= e3w(j) ) then 
    72       !!          t~ = t(i,j,k) + (e3w(i) - e3w(i+1)) * dk(Ti)/e3w(i ) 
    73       !!        ( t~ = t(i,j,k) + (e3w(j) - e3w(j+1)) * dk(Tj)/e3w(j ) ) 
     72      !!      case 2->   e3w(i+1,:,:,Kmm) <= e3w(i,:,:,Kmm) ( and e3w(:,j+1,:,Kmm) <= e3w(:,j,:,Kmm) ) then 
     73      !!          t~ = t(i,j,k) + (e3w(i,j,k,Kmm) - e3w(i+1,j,k,Kmm)) * dk(Ti)/e3w(i,j,k,Kmm) 
     74      !!        ( t~ = t(i,j,k) + (e3w(i,j,k,Kmm) - e3w(i,j+1,k,Kmm)) * dk(Tj)/e3w(i,j,k,Kmm) ) 
    7475      !!          Idem for di(s) and dj(s)           
    7576      !! 
     
    106107      DO jn = 1, kjpt      !==   Interpolation of tracers at the last ocean level   ==! 
    107108         ! 
    108          DO_2D_10_10 
     109         DO_2D( 1, 0, 1, 0 ) 
    109110            iku = mbku(ji,jj)   ;   ikum1 = MAX( iku - 1 , 1 )    ! last and before last ocean level at u- & v-points 
    110111            ikv = mbkv(ji,jj)   ;   ikvm1 = MAX( ikv - 1 , 1 )    ! if level first is a p-step, ik.m1=1 
    111 !!gm BUG ? when applied to before fields, e3w(:,:,:,Kbb) should be used.... 
     112!!gm BUG ? when applied to before fields, e3w(:,:,k,Kbb) should be used.... 
    112113            ze3wu = e3w(ji+1,jj  ,iku,Kmm) - e3w(ji,jj,iku,Kmm) 
    113114            ze3wv = e3w(ji  ,jj+1,ikv,Kmm) - e3w(ji,jj,ikv,Kmm) 
     
    145146      END DO 
    146147      ! 
    147       CALL lbc_lnk_multi( 'zpshde', pgtu(:,:,:), 'U', -1. , pgtv(:,:,:), 'V', -1. )   ! Lateral boundary cond. 
     148      CALL lbc_lnk_multi( 'zpshde', pgtu(:,:,:), 'U', -1.0_wp , pgtv(:,:,:), 'V', -1.0_wp )   ! Lateral boundary cond. 
    148149      !                 
    149150      IF( PRESENT( prd ) ) THEN    !==  horizontal derivative of density anomalies (rd)  ==!    (optional part) 
    150151         pgru(:,:) = 0._wp 
    151152         pgrv(:,:) = 0._wp                ! depth of the partial step level 
    152          DO_2D_10_10 
     153         DO_2D( 1, 0, 1, 0 ) 
    153154            iku = mbku(ji,jj) 
    154155            ikv = mbkv(ji,jj) 
     
    166167         CALL eos( ztj, zhj, zrj )        ! at the partial step depth output in  zri, zrj  
    167168         ! 
    168          DO_2D_10_10 
     169         DO_2D( 1, 0, 1, 0 )              ! Gradient of density at the last level 
    169170            iku = mbku(ji,jj) 
    170171            ikv = mbkv(ji,jj) 
     
    178179            ENDIF 
    179180         END_2D 
    180          CALL lbc_lnk_multi( 'zpshde', pgru , 'U', -1. , pgrv , 'V', -1. )   ! Lateral boundary conditions 
     181         CALL lbc_lnk_multi( 'zpshde', pgru , 'U', -1.0_wp , pgrv , 'V', -1.0_wp )   ! Lateral boundary conditions 
    181182         ! 
    182183      END IF 
     
    214215      !!              ___ |   |   |           ___  |   |   | 
    215216      !!                   
    216       !!      case 1->   e3w(i+1) >= e3w(i) ( and e3w(j+1) >= e3w(j) ) then 
    217       !!          t~ = t(i+1,j  ,k) + (e3w(i+1) - e3w(i)) * dk(Ti+1)/e3w(i+1) 
    218       !!        ( t~ = t(i  ,j+1,k) + (e3w(j+1) - e3w(j)) * dk(Tj+1)/e3w(j+1)  ) 
     217      !!      case 1->   e3w(i+1,j,k,Kmm) >= e3w(i,j,k,Kmm) ( and e3w(i,j+1,k,Kmm) >= e3w(i,j,k,Kmm) ) then 
     218      !!          t~ = t(i+1,j  ,k) + (e3w(i+1,j  ,k,Kmm) - e3w(i,j,k,Kmm)) * dk(Ti+1)/e3w(i+1,j  ,k,Kmm) 
     219      !!        ( t~ = t(i  ,j+1,k) + (e3w(i  ,j+1,k,Kmm) - e3w(i,j,k,Kmm)) * dk(Tj+1)/e3w(i  ,j+1,k,Kmm)  ) 
    219220      !!          or 
    220       !!      case 2->   e3w(i+1) <= e3w(i) ( and e3w(j+1) <= e3w(j) ) then 
    221       !!          t~ = t(i,j,k) + (e3w(i) - e3w(i+1)) * dk(Ti)/e3w(i ) 
    222       !!        ( t~ = t(i,j,k) + (e3w(j) - e3w(j+1)) * dk(Tj)/e3w(j ) ) 
     221      !!      case 2->   e3w(i+1,j,k,Kmm) <= e3w(i,j,k,Kmm) ( and e3w(i,j+1,k,Kmm) <= e3w(i,j,k,Kmm) ) then 
     222      !!          t~ = t(i,j,k) + (e3w(i,j,k,Kmm) - e3w(i+1,j  ,k,Kmm)) * dk(Ti)/e3w(i,j,k,Kmm) 
     223      !!        ( t~ = t(i,j,k) + (e3w(i,j,k,Kmm) - e3w(i  ,j+1,k,Kmm)) * dk(Tj)/e3w(i,j,k,Kmm) ) 
    223224      !!          Idem for di(s) and dj(s)           
    224225      !! 
     
    261262      DO jn = 1, kjpt      !==   Interpolation of tracers at the last ocean level   ==! 
    262263         ! 
    263          DO_2D_10_10 
     264         DO_2D( 1, 0, 1, 0 ) 
    264265 
    265266            iku = mbku(ji,jj); ikum1 = MAX( iku - 1 , 1 )    ! last and before last ocean level at u- & v-points 
     
    301302      END DO 
    302303      ! 
    303       CALL lbc_lnk_multi( 'zpshde', pgtu(:,:,:), 'U', -1. , pgtv(:,:,:), 'V', -1. )   ! Lateral boundary cond. 
     304      CALL lbc_lnk_multi( 'zpshde', pgtu(:,:,:), 'U', -1.0_wp , pgtv(:,:,:), 'V', -1.0_wp )   ! Lateral boundary cond. 
    304305 
    305306      ! horizontal derivative of density anomalies (rd) 
     
    307308         pgru(:,:)=0.0_wp   ; pgrv(:,:)=0.0_wp ;  
    308309         ! 
    309          DO_2D_10_10 
     310         DO_2D( 1, 0, 1, 0 ) 
    310311 
    311312            iku = mbku(ji,jj) 
     
    328329         CALL eos( ztj, zhj, zrj ) 
    329330 
    330          DO_2D_10_10 
     331         DO_2D( 1, 0, 1, 0 )            ! Gradient of density at the last level 
    331332            iku = mbku(ji,jj) 
    332333            ikv = mbkv(ji,jj) 
     
    343344         END_2D 
    344345 
    345          CALL lbc_lnk_multi( 'zpshde', pgru , 'U', -1. , pgrv , 'V', -1. )   ! Lateral boundary conditions 
     346         CALL lbc_lnk_multi( 'zpshde', pgru , 'U', -1.0_wp , pgrv , 'V', -1.0_wp )   ! Lateral boundary conditions 
    346347         ! 
    347348      END IF 
     
    350351      ! 
    351352      DO jn = 1, kjpt      !==   Interpolation of tracers at the last ocean level   ==!            ! 
    352          DO_2D_10_10 
     353         DO_2D( 1, 0, 1, 0 ) 
    353354            iku = miku(ji,jj); ikup1 = miku(ji,jj) + 1 
    354355            ikv = mikv(ji,jj); ikvp1 = mikv(ji,jj) + 1 
     
    356357            ! (ISF) case partial step top and bottom in adjacent cell in vertical 
    357358            ! cannot used e3w because if 2 cell water column, we have ps at top and bottom 
    358             ! in this case e3w(i,j) - e3w(i,j+1) is not the distance between Tj~ and Tj 
     359            ! in this case e3w(i,j,k,Kmm) - e3w(i,j+1,k,Kmm) is not the distance between Tj~ and Tj 
    359360            ! the only common depth between cells (i,j) and (i,j+1) is gdepw_0 
    360361            ze3wu  =  gdept(ji,jj,iku,Kmm) - gdept(ji+1,jj,iku,Kmm) 
     
    394395         ! 
    395396      END DO 
    396       CALL lbc_lnk_multi( 'zpshde', pgtui(:,:,:), 'U', -1. , pgtvi(:,:,:), 'V', -1. )   ! Lateral boundary cond. 
     397      CALL lbc_lnk_multi( 'zpshde', pgtui(:,:,:), 'U', -1.0_wp , pgtvi(:,:,:), 'V', -1.0_wp )   ! Lateral boundary cond. 
    397398 
    398399      IF( PRESENT( prd ) ) THEN    !==  horizontal derivative of density anomalies (rd)  ==!    (optional part) 
    399400         ! 
    400401         pgrui(:,:)  =0.0_wp; pgrvi(:,:)  =0.0_wp; 
    401          DO_2D_10_10 
     402         DO_2D( 1, 0, 1, 0 ) 
    402403 
    403404            iku = miku(ji,jj) 
     
    419420         CALL eos( ztj, zhj, zrj )        ! at the partial step depth output in  zri, zrj  
    420421         ! 
    421          DO_2D_10_10 
     422         DO_2D( 1, 0, 1, 0 )              ! Gradient of density at the last level 
    422423            iku = miku(ji,jj)  
    423424            ikv = mikv(ji,jj)  
     
    433434 
    434435         END_2D 
    435          CALL lbc_lnk_multi( 'zpshde', pgrui, 'U', -1. , pgrvi, 'V', -1. )   ! Lateral boundary conditions 
     436         CALL lbc_lnk_multi( 'zpshde', pgrui, 'U', -1.0_wp , pgrvi, 'V', -1.0_wp )   ! Lateral boundary conditions 
    436437         ! 
    437438      END IF   
Note: See TracChangeset for help on using the changeset viewer.