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 13470 for NEMO/branches/2020/temporary_r4_trunk/src/OCE/ZDF/zdftke.F90 – NEMO

Ignore:
Timestamp:
2020-09-15T12:56:56+02:00 (4 years ago)
Author:
smasson
Message:

r4_trunk: second change of DO loops for routines to be merged, see #2523

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/temporary_r4_trunk/src/OCE/ZDF/zdftke.F90

    r13469 r13470  
    231231      !                     !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    232232      ! 
    233       DO_2D_00_00 
     233      DO_2D( 0, 0, 0, 0 ) 
    234234!! clem: this should be the right formulation but it makes the model unstable unless drags are calculated implicitly 
    235235!!       one way around would be to increase zbbirau  
     
    249249      IF( .NOT.ln_drg_OFF ) THEN    !== friction used as top/bottom boundary condition on TKE 
    250250         ! 
    251          DO_2D_00_00 
     251         DO_2D( 0, 0, 0, 0 ) 
    252252            zmsku = ( 2. - umask(ji-1,jj,mbkt(ji,jj)) * umask(ji,jj,mbkt(ji,jj)) ) 
    253253            zmskv = ( 2. - vmask(ji,jj-1,mbkt(ji,jj)) * vmask(ji,jj,mbkt(ji,jj)) ) 
     
    258258         END_2D 
    259259         IF( ln_isfcav ) THEN       ! top friction 
    260             DO_2D_00_00 
     260            DO_2D( 0, 0, 0, 0 ) 
    261261               zmsku = ( 2. - umask(ji-1,jj,mikt(ji,jj)) * umask(ji,jj,mikt(ji,jj)) ) 
    262262               zmskv = ( 2. - vmask(ji,jj-1,mikt(ji,jj)) * vmask(ji,jj,mikt(ji,jj)) ) 
     
    283283         zcof = 0.5 * 0.016 * 0.016 / ( zrhoa * zcdrag ) 
    284284         imlc(:,:) = mbkt(:,:) + 1       ! Initialization to the number of w ocean point (=2 over land) 
    285          DO_3D_11_11( jpkm1, 2, -1 ) 
     285         DO_3D( 1, 1, 1, 1, jpkm1, 2, -1 ) 
    286286            zus  = zcof * taum(ji,jj) 
    287287            IF( zpelc(ji,jj,jk) > zus )   imlc(ji,jj) = jk 
    288288         END_3D 
    289289         !                               ! finite LC depth 
    290          DO_2D_11_11 
     290         DO_2D( 1, 1, 1, 1 ) 
    291291            zhlc(ji,jj) = pdepw(ji,jj,imlc(ji,jj)) 
    292292         END_2D 
    293293         zcof = 0.016 / SQRT( zrhoa * zcdrag ) 
    294          DO_2D_00_00 
     294         DO_2D( 0, 0, 0, 0 ) 
    295295            zus  = zcof * SQRT( taum(ji,jj) )           ! Stokes drift 
    296296            zus3(ji,jj) = MAX( 0._wp, 1._wp - zice_fra(ji,jj) ) * zus * zus * zus * tmask(ji,jj,1) ! zus > 0. ok 
    297297         END_2D 
    298          DO_3D_00_00( 2, jpkm1 ) 
     298         DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    299299            IF ( zus3(ji,jj) /= 0._wp ) THEN                
    300300               ! vertical velocity due to LC    
     
    318318      ! 
    319319      IF( nn_pdl == 1 ) THEN      !* Prandtl number = F( Ri ) 
    320          DO_3D_00_00( 2, jpkm1 ) 
     320         DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    321321            !                             ! local Richardson number 
    322322            zri = MAX( rn2b(ji,jj,jk), 0._wp ) * p_avm(ji,jj,jk) / ( p_sh2(ji,jj,jk) + rn_bshear ) 
     
    326326      ENDIF 
    327327      !          
    328       DO_3D_00_00( 2, jpkm1 ) 
     328      DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    329329         zcof   = zfact1 * tmask(ji,jj,jk) 
    330330         !                                   ! A minimum of 2.e-5 m2/s is imposed on TKE vertical 
     
    346346      END_3D 
    347347      !                          !* Matrix inversion from level 2 (tke prescribed at level 1) 
    348       DO_3D_00_00( 3, jpkm1 ) 
     348      DO_3D( 0, 0, 0, 0, 3, jpkm1 ) 
    349349         zdiag(ji,jj,jk) = zdiag(ji,jj,jk) - zd_lw(ji,jj,jk) * zd_up(ji,jj,jk-1) / zdiag(ji,jj,jk-1) 
    350350      END_3D 
    351       DO_2D_00_00 
     351      DO_2D( 0, 0, 0, 0 ) 
    352352         zd_lw(ji,jj,2) = en(ji,jj,2) - zd_lw(ji,jj,2) * en(ji,jj,1)    ! Surface boudary conditions on tke 
    353353      END_2D 
    354       DO_3D_00_00( 3, jpkm1 ) 
     354      DO_3D( 0, 0, 0, 0, 3, jpkm1 ) 
    355355         zd_lw(ji,jj,jk) = en(ji,jj,jk) - zd_lw(ji,jj,jk) / zdiag(ji,jj,jk-1) *zd_lw(ji,jj,jk-1) 
    356356      END_3D 
    357       DO_2D_00_00 
     357      DO_2D( 0, 0, 0, 0 ) 
    358358         en(ji,jj,jpkm1) = zd_lw(ji,jj,jpkm1) / zdiag(ji,jj,jpkm1) 
    359359      END_2D 
    360       DO_3D_00_00( jpk-2, 2, -1 ) 
     360      DO_3D( 0, 0, 0, 0, jpk-2, 2, -1 ) 
    361361         en(ji,jj,jk) = ( zd_lw(ji,jj,jk) - zd_up(ji,jj,jk) * en(ji,jj,jk+1) ) / zdiag(ji,jj,jk) 
    362362      END_3D 
    363       DO_3D_00_00( 2, jpkm1 ) 
     363      DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    364364         en(ji,jj,jk) = MAX( en(ji,jj,jk), rn_emin ) * wmask(ji,jj,jk) 
    365365      END_3D 
     
    373373       
    374374      IF( nn_etau == 1 ) THEN           !* penetration below the mixed layer (rn_efr fraction) 
    375          DO_3D_00_00( 2, jpkm1 ) 
     375         DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    376376            en(ji,jj,jk) = en(ji,jj,jk) + rn_efr * en(ji,jj,1) * EXP( -pdepw(ji,jj,jk) / htau(ji,jj) )   & 
    377377               &                                 * MAX( 0._wp, 1._wp - zice_fra(ji,jj) ) * wmask(ji,jj,jk) * tmask(ji,jj,1) 
    378378         END_3D 
    379379      ELSEIF( nn_etau == 2 ) THEN       !* act only at the base of the mixed layer (jk=nmln)  (rn_efr fraction) 
    380          DO_2D_00_00 
     380         DO_2D( 0, 0, 0, 0 ) 
    381381            jk = nmln(ji,jj) 
    382382            en(ji,jj,jk) = en(ji,jj,jk) + rn_efr * en(ji,jj,1) * EXP( -pdepw(ji,jj,jk) / htau(ji,jj) )   & 
     
    384384         END_2D 
    385385      ELSEIF( nn_etau == 3 ) THEN       !* penetration belox the mixed layer (HF variability) 
    386          DO_3D_00_00( 2, jpkm1 ) 
     386         DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    387387            ztx2 = utau(ji-1,jj  ) + utau(ji,jj) 
    388388            zty2 = vtau(ji  ,jj-1) + vtau(ji,jj) 
     
    459459         zraug = vkarmn * 2.e5_wp / ( rau0 * grav ) 
    460460#if ! defined key_si3 && ! defined key_cice 
    461          DO_2D_00_00 
     461         DO_2D( 0, 0, 0, 0 ) 
    462462            zmxlm(ji,jj,1) =  zraug * taum(ji,jj) * tmask(ji,jj,1) 
    463463         END_2D 
     
    467467         ! 
    468468         CASE( 0 )                      ! No scaling under sea-ice 
    469             DO_2D_00_00 
     469            DO_2D( 0, 0, 0, 0 ) 
    470470               zmxlm(ji,jj,1) = zraug * taum(ji,jj) * tmask(ji,jj,1) 
    471471            END_2D 
    472472            ! 
    473473         CASE( 1 )                      ! scaling with constant sea-ice thickness 
    474             DO_2D_00_00 
     474            DO_2D( 0, 0, 0, 0 ) 
    475475               zmxlm(ji,jj,1) =  ( ( 1._wp - fr_i(ji,jj) ) * zraug * taum(ji,jj) + & 
    476476                  &                          fr_i(ji,jj)   * rn_mxlice           ) * tmask(ji,jj,1) 
     
    478478            ! 
    479479         CASE( 2 )                      ! scaling with mean sea-ice thickness 
    480             DO_2D_00_00 
     480            DO_2D( 0, 0, 0, 0 ) 
    481481#if defined key_si3 
    482482               zmxlm(ji,jj,1) = ( ( 1._wp - fr_i(ji,jj) ) * zraug * taum(ji,jj) + & 
     
    490490            ! 
    491491         CASE( 3 )                      ! scaling with max sea-ice thickness 
    492             DO_2D_00_00 
     492            DO_2D( 0, 0, 0, 0 ) 
    493493               zmaxice = MAXVAL( h_i(ji,jj,:) ) 
    494494               zmxlm(ji,jj,1) = ( ( 1._wp - fr_i(ji,jj) ) * zraug * taum(ji,jj) + & 
     
    499499#endif 
    500500         ! 
    501          DO_2D_00_00 
     501         DO_2D( 0, 0, 0, 0 ) 
    502502            zmxlm(ji,jj,1) = MAX( rn_mxl0, zmxlm(ji,jj,1) ) 
    503503         END_2D 
     
    507507      ENDIF 
    508508      ! 
    509       DO_3D_00_00( 2, jpkm1 ) 
     509      DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    510510         zrn2 = MAX( rn2(ji,jj,jk), rsmall ) 
    511511         zmxlm(ji,jj,jk) = MAX(  rmxl_min,  SQRT( 2._wp * en(ji,jj,jk) / zrn2 )  ) 
     
    522522      ! where wmask = 0 set zmxlm == p_e3w 
    523523      CASE ( 0 )           ! bounded by the distance to surface and bottom 
    524          DO_3D_00_00( 2, jpkm1 ) 
     524         DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    525525            zemxl = MIN( pdepw(ji,jj,jk) - pdepw(ji,jj,mikt(ji,jj)), zmxlm(ji,jj,jk),   & 
    526526            &            pdepw(ji,jj,mbkt(ji,jj)+1) - pdepw(ji,jj,jk) ) 
     
    531531         ! 
    532532      CASE ( 1 )           ! bounded by the vertical scale factor 
    533          DO_3D_00_00( 2, jpkm1 ) 
     533         DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    534534            zemxl = MIN( p_e3w(ji,jj,jk), zmxlm(ji,jj,jk) ) 
    535535            zmxlm(ji,jj,jk) = zemxl 
     
    538538         ! 
    539539      CASE ( 2 )           ! |dk[xml]| bounded by e3t : 
    540          DO_3D_00_00( 2, jpkm1 ) 
     540         DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    541541            zmxlm(ji,jj,jk) = MIN( zmxlm(ji,jj,jk-1) + p_e3t(ji,jj,jk-1), zmxlm(ji,jj,jk) ) 
    542542         END_3D 
    543          DO_3D_00_00( jpkm1, 2, -1 ) 
     543         DO_3D( 0, 0, 0, 0, jpkm1, 2, -1 ) 
    544544            zemxl = MIN( zmxlm(ji,jj,jk+1) + p_e3t(ji,jj,jk+1), zmxlm(ji,jj,jk) ) 
    545545            zmxlm(ji,jj,jk) = zemxl 
     
    548548         ! 
    549549      CASE ( 3 )           ! lup and ldown, |dk[xml]| bounded by e3t : 
    550          DO_3D_00_00( 2, jpkm1 ) 
     550         DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    551551            zmxld(ji,jj,jk) = MIN( zmxld(ji,jj,jk-1) + p_e3t(ji,jj,jk-1), zmxlm(ji,jj,jk) ) 
    552552         END_3D 
    553          DO_3D_00_00( jpkm1, 2, -1 ) 
     553         DO_3D( 0, 0, 0, 0, jpkm1, 2, -1 ) 
    554554            zmxlm(ji,jj,jk) = MIN( zmxlm(ji,jj,jk+1) + p_e3t(ji,jj,jk+1), zmxlm(ji,jj,jk) ) 
    555555         END_3D 
    556          DO_3D_00_00( 2, jpkm1 ) 
     556         DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    557557            zemlm = MIN ( zmxld(ji,jj,jk),  zmxlm(ji,jj,jk) ) 
    558558            zemlp = SQRT( zmxld(ji,jj,jk) * zmxlm(ji,jj,jk) ) 
     
    566566      !                     !  Vertical eddy viscosity and diffusivity  (avm and avt) 
    567567      !                     !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    568       DO_3D_00_00( 1, jpkm1 ) 
     568      DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    569569         zsqen = SQRT( en(ji,jj,jk) ) 
    570570         zav   = rn_ediff * zmxlm(ji,jj,jk) * zsqen 
     
    576576      ! 
    577577      IF( nn_pdl == 1 ) THEN      !* Prandtl number case: update avt 
    578          DO_3D_00_00( 2, jpkm1 ) 
     578         DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    579579            p_avt(ji,jj,jk)   = MAX( apdlr(ji,jj,jk) * p_avt(ji,jj,jk), avtb_2d(ji,jj) * avtb(jk) ) * wmask(ji,jj,jk) 
    580580         END_3D 
Note: See TracChangeset for help on using the changeset viewer.