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 14636 for NEMO/branches/2021/dev_r14273_HPC-02_Daley_Tiling/src/OCE/ZDF/zdfiwm.F90 – NEMO

Ignore:
Timestamp:
2021-03-25T12:51:33+01:00 (3 years ago)
Author:
hadcv
Message:

#2600: Merge in dev_r14393_HPC-03_Mele_Comm_Cleanup [14538:14609]

File:
1 edited

Legend:

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

    r13497 r14636  
    143143      ! Set to zero the 1st and last vertical levels of appropriate variables 
    144144      IF( iom_use("emix_iwm") ) THEN 
    145          DO_2D( 0, 0, 0, 0 ) 
     145         ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) 
     146         DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 
    146147            zemx_iwm (ji,jj,1) = 0._wp   ;   zemx_iwm (ji,jj,jpk) = 0._wp 
    147148         END_2D 
    148149      ENDIF 
    149150      IF( iom_use("av_ratio") ) THEN 
    150          DO_2D( 0, 0, 0, 0 ) 
     151         ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) 
     152         DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 
    151153            zav_ratio(ji,jj,1) = 0._wp   ;   zav_ratio(ji,jj,jpk) = 0._wp 
    152154         END_2D 
    153155      ENDIF 
    154156      IF( iom_use("av_wave") .OR. sn_cfctl%l_prtctl ) THEN 
    155          DO_2D( 0, 0, 0, 0 ) 
     157         ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) 
     158         DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 
    156159            zav_wave (ji,jj,1) = 0._wp   ;   zav_wave (ji,jj,jpk) = 0._wp 
    157160         END_2D 
     
    164167      !                       !* Critical slope mixing: distribute energy over the time-varying ocean depth, 
    165168      !                                                 using an exponential decay from the seafloor. 
    166       DO_2D( 0, 0, 0, 0 )             ! part independent of the level 
     169      ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 )             ! part independent of the level 
     170      DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 )             ! part independent of the level 
    167171         zhdep(ji,jj) = gdepw_0(ji,jj,mbkt(ji,jj)+1)       ! depth of the ocean 
    168172         zfact(ji,jj) = rho0 * (  1._wp - EXP( -zhdep(ji,jj) / hcri_iwm(ji,jj) )  ) 
     
    170174      END_2D 
    171175!!gm gde3w ==>>>  check for ssh taken into account.... seem OK gde3w_n=gdept(:,:,:,Kmm) - ssh(:,:,Kmm) 
    172       DO_3D( 0, 0, 0, 0, 2, jpkm1 )   ! complete with the level-dependent part 
     176      ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )   ! complete with the level-dependent part 
     177      DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )   ! complete with the level-dependent part 
    173178         IF ( zfact(ji,jj) == 0._wp .OR. wmask(ji,jj,jk) == 0._wp ) THEN   ! optimization 
    174179            zemx_iwm(ji,jj,jk) = 0._wp 
     
    190195      CASE ( 1 )               ! Dissipation scales as N (recommended) 
    191196         ! 
    192          DO_2D( 0, 0, 0, 0 ) 
     197         ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) 
     198         DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 
    193199            zfact(ji,jj) = 0._wp 
    194200         END_2D 
    195          DO_3D( 0, 0, 0, 0, 2, jpkm1 )       ! part independent of the level 
     201         ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )       ! part independent of the level 
     202         DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )       ! part independent of the level 
    196203            zfact(ji,jj) = zfact(ji,jj) + e3w(ji,jj,jk,Kmm) * SQRT(  MAX( 0._wp, rn2(ji,jj,jk) )  ) * wmask(ji,jj,jk) 
    197204         END_3D 
    198205         ! 
    199          DO_2D( 0, 0, 0, 0 ) 
     206         ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) 
     207         DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 
    200208            IF( zfact(ji,jj) /= 0 )   zfact(ji,jj) = epyc_iwm(ji,jj) / ( rho0 * zfact(ji,jj) ) 
    201209         END_2D 
    202210         ! 
    203          DO_3D( 0, 0, 0, 0, 2, jpkm1 )       ! complete with the level-dependent part 
     211         ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )       ! complete with the level-dependent part 
     212         DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )       ! complete with the level-dependent part 
    204213            zemx_iwm(ji,jj,jk) = zemx_iwm(ji,jj,jk) + zfact(ji,jj) * SQRT(  MAX( 0._wp, rn2(ji,jj,jk) )  ) * wmask(ji,jj,jk) 
    205214         END_3D 
     
    207216      CASE ( 2 )               ! Dissipation scales as N^2 
    208217         ! 
    209          DO_2D( 0, 0, 0, 0 ) 
     218         ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) 
     219         DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 
    210220            zfact(ji,jj) = 0._wp 
    211221         END_2D 
    212          DO_3D( 0, 0, 0, 0, 2, jpkm1 )       ! part independent of the level 
     222         ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )       ! part independent of the level 
     223         DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )       ! part independent of the level 
    213224            zfact(ji,jj) = zfact(ji,jj) + e3w(ji,jj,jk,Kmm) * MAX( 0._wp, rn2(ji,jj,jk) ) * wmask(ji,jj,jk) 
    214225         END_3D 
    215226         ! 
    216          DO_2D( 0, 0, 0, 0 ) 
     227         ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) 
     228         DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 
    217229            IF( zfact(ji,jj) /= 0 )   zfact(ji,jj) = epyc_iwm(ji,jj) / ( rho0 * zfact(ji,jj) ) 
    218230         END_2D 
    219231         ! 
    220          DO_3D( 0, 0, 0, 0, 2, jpkm1 )       ! complete with the level-dependent part 
     232         ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     233         DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 
    221234            zemx_iwm(ji,jj,jk) = zemx_iwm(ji,jj,jk) + zfact(ji,jj) * MAX( 0._wp, rn2(ji,jj,jk) ) * wmask(ji,jj,jk) 
    222235         END_3D 
     
    227240      !                        !* ocean depth as proportional to rn2 * exp(-z_wkb/rn_hbot) 
    228241      ! 
    229       DO_2D( 0, 0, 0, 0 ) 
     242      ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) 
     243      DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 
    230244         zwkb(ji,jj,1) = 0._wp 
    231245      END_2D 
    232       DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     246      ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     247      DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 
    233248         zwkb(ji,jj,jk) = zwkb(ji,jj,jk-1) + e3w(ji,jj,jk,Kmm) * SQRT(  MAX( 0._wp, rn2(ji,jj,jk) )  ) * wmask(ji,jj,jk) 
    234249      END_3D 
    235       DO_2D( 0, 0, 0, 0 ) 
     250      ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) 
     251      DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 
    236252         zfact(ji,jj) = zwkb(ji,jj,jpkm1) 
    237253      END_2D 
    238254      ! 
    239       DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     255      ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     256      DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 
    240257         IF( zfact(ji,jj) /= 0 )   zwkb(ji,jj,jk) = zhdep(ji,jj) * ( zfact(ji,jj) - zwkb(ji,jj,jk) )   & 
    241258            &                                     * wmask(ji,jj,jk) / zfact(ji,jj) 
    242259      END_3D 
    243       DO_2D( 0, 0, 0, 0 ) 
     260      ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) 
     261      DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 
    244262         zwkb (ji,jj,1) = zhdep(ji,jj) * wmask(ji,jj,1) 
    245263      END_2D 
    246264      ! 
    247       DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     265      ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     266      DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 
    248267         IF ( rn2(ji,jj,jk) <= 0._wp .OR. wmask(ji,jj,jk) == 0._wp ) THEN   ! optimization: EXP coast a lot 
    249268            zweight(ji,jj,jk) = 0._wp 
     
    254273      END_3D 
    255274      ! 
    256       DO_2D( 0, 0, 0, 0 ) 
     275      ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) 
     276      DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 
    257277         zfact(ji,jj) = 0._wp 
    258278      END_2D 
    259       DO_3D( 0, 0, 0, 0, 2, jpkm1 )       ! part independent of the level 
     279      ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )       ! part independent of the level 
     280      DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )       ! part independent of the level 
    260281         zfact(ji,jj) = zfact(ji,jj) + zweight(ji,jj,jk) 
    261282      END_3D 
    262283      ! 
    263       DO_2D( 0, 0, 0, 0 ) 
     284      ! [comm_cleanup] ! DO_2D( 0, 0, 0, 0 ) 
     285      DO_2D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1 ) 
    264286         IF( zfact(ji,jj) /= 0 )   zfact(ji,jj) = ebot_iwm(ji,jj) / ( rho0 * zfact(ji,jj) ) 
    265287      END_2D 
    266288      ! 
    267       DO_3D( 0, 0, 0, 0, 2, jpkm1 )       ! complete with the level-dependent part 
     289      ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )       ! complete with the level-dependent part 
     290      DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )       ! complete with the level-dependent part 
    268291         zemx_iwm(ji,jj,jk) = zemx_iwm(ji,jj,jk) + zweight(ji,jj,jk) * zfact(ji,jj) * wmask(ji,jj,jk)   & 
    269292            &                                                        / ( gde3w(ji,jj,jk) - gde3w(ji,jj,jk-1) ) 
     
    273296!!gm  this is to be replaced by just a constant value znu=1.e-6 m2/s 
    274297      ! Calculate molecular kinematic viscosity 
    275       DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
     298      ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 1, jpkm1 ) 
     299      DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 1, jpkm1 ) 
    276300         znu_t(ji,jj,jk) = 1.e-4_wp * (  17.91_wp - 0.53810_wp * ts(ji,jj,jk,jp_tem,Kmm)   & 
    277301            &                                     + 0.00694_wp * ts(ji,jj,jk,jp_tem,Kmm) * ts(ji,jj,jk,jp_tem,Kmm)  & 
    278302            &                                     + 0.02305_wp * ts(ji,jj,jk,jp_sal,Kmm)  ) * tmask(ji,jj,jk) * r1_rho0 
    279303      END_3D 
    280       DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     304      ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     305      DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 
    281306         znu_w(ji,jj,jk) = 0.5_wp * ( znu_t(ji,jj,jk-1) + znu_t(ji,jj,jk) ) * wmask(ji,jj,jk) 
    282307      END_3D 
     
    284309      ! 
    285310      ! Calculate turbulence intensity parameter Reb 
    286       DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     311      ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     312      DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 
    287313         zReb(ji,jj,jk) = zemx_iwm(ji,jj,jk) / MAX( 1.e-20_wp, znu_w(ji,jj,jk) * rn2(ji,jj,jk) ) 
    288314      END_3D 
    289315      ! 
    290316      ! Define internal wave-induced diffusivity 
    291       DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     317      ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     318      DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 
    292319         zav_wave(ji,jj,jk) = znu_w(ji,jj,jk) * zReb(ji,jj,jk) * r1_6   ! This corresponds to a constant mixing efficiency of 1/6 
    293320      END_3D 
    294321      ! 
    295322      IF( ln_mevar ) THEN                ! Variable mixing efficiency case : modify zav_wave in the 
    296          DO_3D( 0, 0, 0, 0, 2, jpkm1 )   ! energetic (Reb > 480) and buoyancy-controlled (Reb <10.224 ) regimes 
     323         ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )   ! energetic (Reb > 480) and buoyancy-controlled (Reb <10.224 ) regimes 
     324         DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )   ! energetic (Reb > 480) and buoyancy-controlled (Reb <10.224 ) regimes 
    297325            IF( zReb(ji,jj,jk) > 480.00_wp ) THEN 
    298326               zav_wave(ji,jj,jk) = 3.6515_wp * znu_w(ji,jj,jk) * SQRT( zReb(ji,jj,jk) ) 
     
    303331      ENDIF 
    304332      ! 
    305       DO_3D( 0, 0, 0, 0, 2, jpkm1 )      ! Bound diffusivity by molecular value and 100 cm2/s 
     333      ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )      ! Bound diffusivity by molecular value and 100 cm2/s 
     334      DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )      ! Bound diffusivity by molecular value and 100 cm2/s 
    306335         zav_wave(ji,jj,jk) = MIN(  MAX( 1.4e-7_wp, zav_wave(ji,jj,jk) ), 1.e-2_wp  ) * wmask(ji,jj,jk) 
    307336      END_3D 
     
    310339         zztmp = 0._wp 
    311340!!gm used of glosum 3D.... 
    312          DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     341         ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     342         DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 
    313343            zztmp = zztmp + e3w(ji,jj,jk,Kmm) * e1e2t(ji,jj)   & 
    314344               &          * MAX( 0._wp, rn2(ji,jj,jk) ) * zav_wave(ji,jj,jk) * wmask(ji,jj,jk) * tmask_i(ji,jj) 
     
    332362      IF( ln_tsdiff ) THEN                !* Option for differential mixing of salinity and temperature 
    333363         ztmp1 = 0.505_wp + 0.495_wp * TANH( 0.92_wp * ( LOG10( 1.e-20_wp ) - 0.60_wp ) ) 
    334          DO_3D( 0, 0, 0, 0, 2, jpkm1 )       ! Calculate S/T diffusivity ratio as a function of Reb 
     364         ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )       ! Calculate S/T diffusivity ratio as a function of Reb 
     365         DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )       ! Calculate S/T diffusivity ratio as a function of Reb 
    335366            ztmp2 = zReb(ji,jj,jk) * 5._wp * r1_6 
    336367            IF ( ztmp2 > 1.e-20_wp .AND. wmask(ji,jj,jk) == 1._wp ) THEN 
     
    341372         END_3D 
    342373         CALL iom_put( "av_ratio", zav_ratio ) 
    343          DO_3D( 0, 0, 0, 0, 2, jpkm1 )    !* update momentum & tracer diffusivity with wave-driven mixing 
     374         ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 )    !* update momentum & tracer diffusivity with wave-driven mixing 
     375         DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 )    !* update momentum & tracer diffusivity with wave-driven mixing 
    344376            p_avs(ji,jj,jk) = p_avs(ji,jj,jk) + zav_wave(ji,jj,jk) * zav_ratio(ji,jj,jk) 
    345377            p_avt(ji,jj,jk) = p_avt(ji,jj,jk) + zav_wave(ji,jj,jk) 
     
    348380         ! 
    349381      ELSE                                !* update momentum & tracer diffusivity with wave-driven mixing 
    350          DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     382         ! [comm_cleanup] ! DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     383         DO_3D( nn_hls-1, nn_hls-1, nn_hls-1, nn_hls-1, 2, jpkm1 ) 
    351384            p_avs(ji,jj,jk) = p_avs(ji,jj,jk) + zav_wave(ji,jj,jk) 
    352385            p_avt(ji,jj,jk) = p_avt(ji,jj,jk) + zav_wave(ji,jj,jk) 
Note: See TracChangeset for help on using the changeset viewer.