New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 13295 for NEMO/trunk/src/OCE/ZDF/zdfosm.F90 – NEMO

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

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/trunk/src/OCE/ZDF/zdfosm.F90

    r13286 r13295  
    300300     zz0 =       rn_abs       ! surface equi-partition in 2-bands 
    301301     zz1 =  1. - rn_abs 
    302      DO_2D_00_00 
     302     DO_2D( 0, 0, 0, 0 ) 
    303303        ! Surface downward irradiance (so always +ve) 
    304304        zrad0(ji,jj) = qsr(ji,jj) * r1_rho0_rcp 
     
    310310     END_2D 
    311311     ! Turbulent surface fluxes and fluxes averaged over depth of the OSBL 
    312      DO_2D_00_00 
     312     DO_2D( 0, 0, 0, 0 ) 
    313313        zthermal = rab_n(ji,jj,1,jp_tem) 
    314314        zbeta    = rab_n(ji,jj,1,jp_sal) 
     
    337337     ! Assume constant La#=0.3 
    338338     CASE(0) 
    339         DO_2D_00_00 
     339        DO_2D( 0, 0, 0, 0 ) 
    340340           zus_x = zcos_wind(ji,jj) * zustar(ji,jj) / 0.3**2 
    341341           zus_y = zsin_wind(ji,jj) * zustar(ji,jj) / 0.3**2 
     
    345345     ! Assume Pierson-Moskovitz wind-wave spectrum 
    346346     CASE(1) 
    347         DO_2D_00_00 
     347        DO_2D( 0, 0, 0, 0 ) 
    348348           ! Use wind speed wndm included in sbc_oce module 
    349349           zustke(ji,jj) = MAX ( 0.016 * wndm(ji,jj), 1.0e-8 ) 
     
    353353     CASE(2) 
    354354        zfac =  2.0_wp * rpi / 16.0_wp 
    355         DO_2D_00_00 
     355        DO_2D( 0, 0, 0, 0 ) 
    356356           ! The Langmur number from the ECMWF model appears to give La<0.3 for wind-driven seas. 
    357357           !    The coefficient 0.8 gives La=0.3  in this situation. 
     
    366366     ! Langmuir velocity scale (zwstrl), La # (zla) 
    367367     ! mixed scale (zvstr), convective velocity scale (zwstrc) 
    368      DO_2D_00_00 
     368     DO_2D( 0, 0, 0, 0 ) 
    369369        ! Langmuir velocity scale (zwstrl), at T-point 
    370370        zwstrl(ji,jj) = ( zustar(ji,jj) * zustar(ji,jj) * zustke(ji,jj) )**pthird 
     
    402402      hbl(:,:) = MAX(hbl(:,:), gdepw(:,:,3,Kmm) ) 
    403403      ibld(:,:) = 3 
    404       DO_3D_00_00( 4, jpkm1 ) 
     404      DO_3D( 0, 0, 0, 0, 4, jpkm1 ) 
    405405         IF ( hbl(ji,jj) >= gdepw(ji,jj,jk,Kmm) ) THEN 
    406406            ibld(ji,jj) = MIN(mbkt(ji,jj), jk) 
     
    408408      END_3D 
    409409 
    410       DO_2D_00_00 
     410      DO_2D( 0, 0, 0, 0 ) 
    411411            zthermal = rab_n(ji,jj,1,jp_tem) !ideally use ibld not 1?? 
    412412            zbeta    = rab_n(ji,jj,1,jp_sal) 
     
    478478      zdhdt(:,:) = MIN(zdhdt(:,:), (zhbl_t(:,:) - hbl(:,:))/rn_Dt + ww(ji,jj,ibld(ji,jj))) ! adjustment to represent limiting by ocean bottom 
    479479 
    480       DO_3D_00_00( 4, jpkm1 ) 
     480      DO_3D( 0, 0, 0, 0, 4, jpkm1 ) 
    481481         IF ( zhbl_t(ji,jj) >= gdepw(ji,jj,jk,Kmm) ) THEN 
    482482            ibld(ji,jj) =  MIN(mbkt(ji,jj), jk) 
     
    487487! Step through model levels taking account of buoyancy change to determine the effect on dhdt 
    488488! 
    489       DO_2D_00_00 
     489      DO_2D( 0, 0, 0, 0 ) 
    490490         IF ( ibld(ji,jj) - imld(ji,jj) > 1 ) THEN 
    491491! 
     
    552552     ! Consider later  combining this into the loop above and looking for columns 
    553553     ! where the index for base of the boundary layer have changed 
    554       DO_2D_00_00 
     554      DO_2D( 0, 0, 0, 0 ) 
    555555            zthermal = rab_n(ji,jj,1,jp_tem) !ideally use ibld not 1?? 
    556556            zbeta    = rab_n(ji,jj,1,jp_sal) 
     
    635635      ! Average over the depth of the mixed layer in the convective boundary layer 
    636636      ! Also calculate entrainment fluxes for temperature and salinity 
    637       DO_2D_00_00 
     637      DO_2D( 0, 0, 0, 0 ) 
    638638         zthermal = rab_n(ji,jj,1,jp_tem) !ideally use ibld not 1?? 
    639639         zbeta    = rab_n(ji,jj,1,jp_sal) 
     
    705705    ! 
    706706 
    707       DO_2D_00_00 
     707      DO_2D( 0, 0, 0, 0 ) 
    708708         ztemp = zu_ml(ji,jj) 
    709709         zu_ml(ji,jj) = zu_ml(ji,jj) * zcos_wind(ji,jj) + zv_ml(ji,jj) * zsin_wind(ji,jj) 
     
    723723     zuw_bse = 0._wp 
    724724     zvw_bse = 0._wp 
    725      DO_2D_00_00 
     725     DO_2D( 0, 0, 0, 0 ) 
    726726 
    727727        IF ( lconv(ji,jj) ) THEN 
     
    740740      !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    741741 
    742        DO_2D_00_00 
     742       DO_2D( 0, 0, 0, 0 ) 
    743743       ! 
    744744          IF ( lconv (ji,jj) ) THEN 
     
    788788       END_2D 
    789789! 
    790        DO_2D_00_00 
     790       DO_2D( 0, 0, 0, 0 ) 
    791791       ! 
    792792          IF ( lconv (ji,jj) ) THEN 
     
    832832      !     zvisml_sc = zwstrl * zhbl * EXP ( -( zhol / 0.183_wp )**2 ) 
    833833      !  ENDWHERE 
    834        DO_2D_00_00 
     834       DO_2D( 0, 0, 0, 0 ) 
    835835          IF ( lconv(ji,jj) ) THEN 
    836836            zdifml_sc(ji,jj) = zhml(ji,jj) * ( zvstr(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird 
     
    846846       END_2D 
    847847! 
    848        DO_2D_00_00 
     848       DO_2D( 0, 0, 0, 0 ) 
    849849          IF ( lconv(ji,jj) ) THEN 
    850850             DO jk = 2, imld(ji,jj)   ! mixed layer diffusivity 
     
    896896 
    897897 
    898        DO_2D_00_00 
     898       DO_2D( 0, 0, 0, 0 ) 
    899899         IF ( lconv(ji,jj) ) THEN 
    900900           DO jk = 2, imld(ji,jj) 
     
    929929       ENDWHERE 
    930930 
    931        DO_2D_00_00 
     931       DO_2D( 0, 0, 0, 0 ) 
    932932          IF ( lconv(ji,jj) ) THEN 
    933933             DO jk = 2, imld(ji,jj) 
     
    961961       ENDWHERE 
    962962 
    963        DO_2D_00_00 
     963       DO_2D( 0, 0, 0, 0 ) 
    964964          IF (lconv(ji,jj) ) THEN 
    965965             DO jk = 2, imld(ji,jj) 
     
    993993       ENDWHERE 
    994994 
    995        DO_2D_00_00 
     995       DO_2D( 0, 0, 0, 0 ) 
    996996          IF ( lconv(ji,jj) ) THEN 
    997997             DO jk = 2 , imld(ji,jj) 
     
    10211021       ENDWHERE 
    10221022 
    1023        DO_2D_00_00 
     1023       DO_2D( 0, 0, 0, 0 ) 
    10241024         IF ( lconv(ji,jj) ) THEN 
    10251025            DO jk = 2, imld(ji,jj) 
     
    10581058       ENDWHERE 
    10591059 
    1060        DO_2D_00_00 
     1060       DO_2D( 0, 0, 0, 0 ) 
    10611061          IF ( lconv(ji,jj) ) THEN 
    10621062            DO jk = 2, imld(ji,jj) 
     
    10931093! Make surface forced velocity non-gradient terms go to zero at the base of the mixed layer. 
    10941094 
    1095       DO_2D_00_00 
     1095      DO_2D( 0, 0, 0, 0 ) 
    10961096         IF ( lconv(ji,jj) ) THEN 
    10971097            DO jk = 2, ibld(ji,jj) 
     
    11221122       ! Temporary fix to avoid instabilities when zdb_bl becomes very very small 
    11231123       zsc_uw_1 = 0._wp ! 50.0 * zla**(8.0/3.0) * zustar**2 * zhbl / ( zdb_bl + epsln ) 
    1124        DO_2D_00_00 
     1124       DO_2D( 0, 0, 0, 0 ) 
    11251125          DO jk= 2, ibld(ji,jj) 
    11261126             znd = gdepw(ji,jj,jk,Kmm) / zhbl(ji,jj) 
     
    11351135! Entrainment contribution. 
    11361136 
    1137        DO_2D_00_00 
     1137       DO_2D( 0, 0, 0, 0 ) 
    11381138          IF ( lconv(ji,jj) ) THEN 
    11391139            DO jk = 1, imld(ji,jj) - 1 
     
    11701170       ! rotate non-gradient velocity terms back to model reference frame 
    11711171 
    1172        DO_2D_00_00 
     1172       DO_2D( 0, 0, 0, 0 ) 
    11731173          DO jk = 2, ibld(ji,jj) 
    11741174             ztemp = ghamu(ji,jj,jk) 
     
    11841184! KPP-style Ri# mixing 
    11851185       IF( ln_kpprimix) THEN 
    1186           DO_3D_10_10( 2, jpkm1 ) 
     1186          DO_3D( 1, 0, 1, 0, 2, jpkm1 ) 
    11871187             z3du(ji,jj,jk) = 0.5 * (  uu(ji,jj,jk-1,Kmm) -  uu(ji  ,jj,jk,Kmm) )   & 
    11881188                  &                 * (  uu(ji,jj,jk-1,Kbb) -  uu(ji  ,jj,jk,Kbb) ) * wumask(ji,jj,jk) & 
     
    11931193          END_3D 
    11941194      ! 
    1195          DO_3D_00_00( 2, jpkm1 ) 
     1195         DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    11961196            !                                          ! shear prod. at w-point weightened by mask 
    11971197            zesh2  =  ( z3du(ji-1,jj,jk) + z3du(ji,jj,jk) ) / MAX( 1._wp , umask(ji-1,jj,jk) + umask(ji,jj,jk) )   & 
     
    12041204         END_3D 
    12051205 
    1206           DO_2D_00_00 
     1206          DO_2D( 0, 0, 0, 0 ) 
    12071207             DO jk = ibld(ji,jj) + 1, jpkm1 
    12081208                zdiffut(ji,jj,jk) = zrimix(ji,jj,jk)*rn_difri 
     
    12151215! KPP-style set diffusivity large if unstable below BL 
    12161216       IF( ln_convmix) THEN 
    1217           DO_2D_00_00 
     1217          DO_2D( 0, 0, 0, 0 ) 
    12181218             DO jk = ibld(ji,jj) + 1, jpkm1 
    12191219               IF(  MIN( rn2(ji,jj,jk), rn2b(ji,jj,jk) ) <= -1.e-12 ) zdiffut(ji,jj,jk) = rn_difconv 
     
    12271227       ! GN 25/8: need to change tmask --> wmask 
    12281228 
    1229      DO_3D_00_00( 2, jpkm1 ) 
     1229     DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    12301230          p_avt(ji,jj,jk) = MAX( zdiffut(ji,jj,jk), avtb(jk) ) * tmask(ji,jj,jk) 
    12311231          p_avm(ji,jj,jk) = MAX( zviscos(ji,jj,jk), avmb(jk) ) * tmask(ji,jj,jk) 
     
    12341234     CALL lbc_lnk_multi( 'zdfosm', p_avt, 'W', 1.0_wp , p_avm, 'W', 1.0_wp,   & 
    12351235      &                  ghamu, 'W', 1.0_wp , ghamv, 'W', 1.0_wp ) 
    1236        DO_3D_00_00( 2, jpkm1 ) 
     1236       DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
    12371237            ghamu(ji,jj,jk) = ( ghamu(ji,jj,jk) + ghamu(ji+1,jj,jk) ) & 
    12381238               &  / MAX( 1., tmask(ji,jj,jk) + tmask (ji + 1,jj,jk) ) * umask(ji,jj,jk) 
     
    13951395        etmean(:,:,:) = 0.e0 
    13961396 
    1397         DO_3D_00_00( 1, jpkm1 ) 
     1397        DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    13981398           etmean(ji,jj,jk) = tmask(ji,jj,jk)                     & 
    13991399                &  / MAX( 1.,  umask(ji-1,jj  ,jk) + umask(ji,jj,jk)   & 
     
    14091409        etmean(:,:,:) = 0.e0 
    14101410 
    1411         DO_3D_00_00( 1, jpkm1 ) 
     1411        DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    14121412           etmean(ji,jj,jk) = tmask(ji, jj,jk)                           & 
    14131413                & / MAX( 1., 2.* tmask(ji,jj,jk)                           & 
     
    15161516     ! 
    15171517     hbl(:,:)  = 0._wp              ! here hbl used as a dummy variable, integrating vertically N^2 
    1518      DO_3D_11_11( 1, jpkm1 ) 
     1518     DO_3D( 1, 1, 1, 1, 1, jpkm1 ) 
    15191519        ikt = mbkt(ji,jj) 
    15201520        hbl(ji,jj) = hbl(ji,jj) + MAX( rn2(ji,jj,jk) , 0._wp ) * e3w(ji,jj,jk,Kmm) 
     
    15221522     END_3D 
    15231523     ! 
    1524      DO_2D_11_11 
     1524     DO_2D( 1, 1, 1, 1 ) 
    15251525        iiki = imld_rst(ji,jj) 
    15261526        hbl (ji,jj) = gdepw(ji,jj,iiki  ,Kmm) * ssmask(ji,jj)    ! Turbocline depth 
     
    15611561 
    15621562      ! add non-local temperature and salinity flux 
    1563       DO_3D_00_00( 1, jpkm1 ) 
     1563      DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    15641564         pts(ji,jj,jk,jp_tem,Krhs) =  pts(ji,jj,jk,jp_tem,Krhs)                      & 
    15651565            &                 - (  ghamt(ji,jj,jk  )  & 
     
    16291629      !code saving tracer trends removed, replace with trdmxl_oce 
    16301630 
    1631       DO_3D_00_00( 1, jpkm1 ) 
     1631      DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
    16321632         puu(ji,jj,jk,Krhs) =  puu(ji,jj,jk,Krhs)                      & 
    16331633            &                 - (  ghamu(ji,jj,jk  )  & 
Note: See TracChangeset for help on using the changeset viewer.