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 13463 for NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/ZDF/zdfric.F90 – NEMO

Ignore:
Timestamp:
2020-09-14T17:40:34+02:00 (4 years ago)
Author:
andmirek
Message:

Ticket #2195:update to trunk 13461

Location:
NEMO/branches/2019/dev_r11351_fldread_with_XIOS
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS

    • 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 
         8 
         9# SETTE 
         10^/utils/CI/sette@13382        sette 
  • NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/ZDF/zdfric.F90

    r11405 r13463  
    5050 
    5151   !! * Substitutions 
    52 #  include "vectopt_loop_substitute.h90" 
     52#  include "do_loop_substitute.h90" 
    5353   !!---------------------------------------------------------------------- 
    5454   !! NEMO/OCE 4.0 , NEMO Consortium (2018) 
     
    7878      !!---------------------------------------------------------------------- 
    7979      ! 
    80       REWIND( numnam_ref )              ! Namelist namzdf_ric in reference namelist : Vertical diffusion Kz depends on Richardson number 
    8180      READ  ( numnam_ref, namzdf_ric, IOSTAT = ios, ERR = 901) 
    82 901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namzdf_ric in reference namelist', lwp ) 
    83  
    84       REWIND( numnam_cfg )              ! Namelist namzdf_ric in configuration namelist : Vertical diffusion Kz depends on Richardson number 
     81901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namzdf_ric in reference namelist' ) 
     82 
    8583      READ  ( numnam_cfg, namzdf_ric, IOSTAT = ios, ERR = 902 ) 
    86 902   IF( ios >  0 ) CALL ctl_nam ( ios , 'namzdf_ric in configuration namelist', lwp ) 
     84902   IF( ios >  0 ) CALL ctl_nam ( ios , 'namzdf_ric in configuration namelist' ) 
    8785      IF(lwm) WRITE ( numond, namzdf_ric ) 
    8886      ! 
     
    112110 
    113111 
    114    SUBROUTINE zdf_ric( kt, pdept, p_sh2, p_avm, p_avt ) 
     112   SUBROUTINE zdf_ric( kt, Kmm, p_sh2, p_avm, p_avt ) 
    115113      !!---------------------------------------------------------------------- 
    116114      !!                 ***  ROUTINE zdfric  *** 
     
    125123      !!                    avt = avm0 / (1 + rn_alp*ri) 
    126124      !!                with ri  = N^2 / dz(u)**2 
    127       !!                         = e3w**2 * rn2/[ mi( dk(ub) )+mj( dk(vb) ) ] 
     125      !!                         = e3w**2 * rn2/[ mi( dk(uu(:,:,:,Kbb)) )+mj( dk(vv(:,:,:,Kbb)) ) ] 
    128126      !!                    avm0= rn_avmri / (1 + rn_alp*Ri)**nn_ric 
    129127      !!                where ri is the before local Richardson number, 
     
    152150      !!---------------------------------------------------------------------- 
    153151      INTEGER                   , INTENT(in   ) ::   kt             ! ocean time-step 
    154       REAL(wp), DIMENSION(:,:,:), INTENT(in   ) ::   pdept          ! depth of t-point  [m] 
     152      INTEGER                   , INTENT(in   ) ::   Kmm            ! ocean time level index 
    155153      REAL(wp), DIMENSION(:,:,:), INTENT(in   ) ::   p_sh2          ! shear production term 
    156154      REAL(wp), DIMENSION(:,:,:), INTENT(inout) ::   p_avm, p_avt   ! momentum and tracer Kz (w-points) 
     
    162160      ! 
    163161      !                       !==  avm and avt = F(Richardson number)  ==! 
    164       DO jk = 2, jpkm1 
    165          DO jj = 1, jpjm1 
    166             DO ji = 1, jpim1              ! coefficient = F(richardson number) (avm-weighted Ri) 
    167                zcfRi = 1._wp / (  1._wp + rn_alp * MAX(  0._wp , avm(ji,jj,jk) * rn2(ji,jj,jk) / ( p_sh2(ji,jj,jk) + 1.e-20 ) )  ) 
    168                zav   = rn_avmri * zcfRi**nn_ric 
    169                !                          ! avm and avt coefficients 
    170                p_avm(ji,jj,jk) = MAX(  zav         , avmb(jk)  ) * wmask(ji,jj,jk) 
    171                p_avt(ji,jj,jk) = MAX(  zav * zcfRi , avtb(jk)  ) * wmask(ji,jj,jk) 
    172             END DO 
    173          END DO 
    174       END DO 
     162      DO_3D( 1, 0, 1, 0, 2, jpkm1 ) 
     163         zcfRi = 1._wp / (  1._wp + rn_alp * MAX(  0._wp , avm(ji,jj,jk) * rn2(ji,jj,jk) / ( p_sh2(ji,jj,jk) + 1.e-20 ) )  ) 
     164         zav   = rn_avmri * zcfRi**nn_ric 
     165         !                          ! avm and avt coefficients 
     166         p_avm(ji,jj,jk) = MAX(  zav         , avmb(jk)  ) * wmask(ji,jj,jk) 
     167         p_avt(ji,jj,jk) = MAX(  zav * zcfRi , avtb(jk)  ) * wmask(ji,jj,jk) 
     168      END_3D 
    175169      ! 
    176170!!gm BUG <<<<====  This param can't work at low latitude  
     
    179173      IF( ln_mldw ) THEN      !==  set a minimum value in the Ekman layer  ==! 
    180174         ! 
    181          DO jj = 2, jpjm1        !* Ekman depth 
    182             DO ji = 2, jpim1 
    183                zustar = SQRT( taum(ji,jj) * r1_rau0 ) 
    184                zhek   = rn_ekmfc * zustar / ( ABS( ff_t(ji,jj) ) + rsmall )   ! Ekman depth 
    185                zh_ekm(ji,jj) = MAX(  rn_mldmin , MIN( zhek , rn_mldmax )  )   ! set allowed range 
    186             END DO 
    187          END DO 
    188          DO jk = 2, jpkm1        !* minimum mixing coeff. within the Ekman layer 
    189             DO jj = 2, jpjm1 
    190                DO ji = 2, jpim1 
    191                   IF( pdept(ji,jj,jk) < zh_ekm(ji,jj) ) THEN 
    192                      p_avm(ji,jj,jk) = MAX(  p_avm(ji,jj,jk), rn_wvmix  ) * wmask(ji,jj,jk) 
    193                      p_avt(ji,jj,jk) = MAX(  p_avt(ji,jj,jk), rn_wtmix  ) * wmask(ji,jj,jk) 
    194                   ENDIF 
    195                END DO 
    196             END DO 
    197          END DO 
     175         DO_2D( 0, 0, 0, 0 ) 
     176            zustar = SQRT( taum(ji,jj) * r1_rho0 ) 
     177            zhek   = rn_ekmfc * zustar / ( ABS( ff_t(ji,jj) ) + rsmall )   ! Ekman depth 
     178            zh_ekm(ji,jj) = MAX(  rn_mldmin , MIN( zhek , rn_mldmax )  )   ! set allowed range 
     179         END_2D 
     180         DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 
     181            IF( gdept(ji,jj,jk,Kmm) < zh_ekm(ji,jj) ) THEN 
     182               p_avm(ji,jj,jk) = MAX(  p_avm(ji,jj,jk), rn_wvmix  ) * wmask(ji,jj,jk) 
     183               p_avt(ji,jj,jk) = MAX(  p_avt(ji,jj,jk), rn_wtmix  ) * wmask(ji,jj,jk) 
     184            ENDIF 
     185         END_3D 
    198186      ENDIF 
    199187      ! 
     
    227215            IF( MIN( id1, id2 ) > 0 ) THEN         ! restart exists => read it 
    228216               IF(lrxios) CALL iom_swap( TRIM(crxios_context) ) 
    229                CALL iom_get( numror, jpdom_autoglo, 'avt_k', avt_k, ldxios = lrxios ) 
    230                CALL iom_get( numror, jpdom_autoglo, 'avm_k', avm_k, ldxios = lrxios ) 
     217               CALL iom_get( numror, jpdom_auto, 'avt_k', avt_k, ldxios = lrxios ) 
     218               CALL iom_get( numror, jpdom_auto, 'avm_k', avm_k, ldxios = lrxios ) 
    231219               IF(lrxios) CALL iom_swap( TRIM(cxios_context) ) 
    232220            ENDIF 
Note: See TracChangeset for help on using the changeset viewer.