- Timestamp:
- 2017-05-01T16:21:42+02:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_r7881_HPC09_ZDF/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfric.F90
r7990 r7991 21 21 USE oce ! ocean dynamics and tracers variables 22 22 USE dom_oce ! ocean space and time domain variables 23 USE zdf_oce ! ocean vertical physics 23 USE zdf_oce ! vertical physics: variables 24 USE zdfsh2 ! vertical physics: shear production term of TKE 24 25 USE phycst ! physical constants 25 26 USE sbc_oce, ONLY : taum … … 104 105 INTEGER :: ji, jj, jk ! dummy loop indices 105 106 LOGICAL :: ll_av_weight = .TRUE. ! local logical 106 REAL(wp) :: zsh2, zcfRi, zav, zustar ! local scalars 107 REAL(wp), DIMENSION(jpi,jpj) :: zdu2, zdv2, zh_ekm ! 2D workspace 107 REAL(wp) :: zcfRi, zav, zustar ! local scalars 108 REAL(wp), DIMENSION(jpi,jpj) :: zh_ekm ! 2D workspace 109 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zsh2 ! 3D - 108 110 !!---------------------------------------------------------------------- 109 111 ! 110 112 IF( nn_timing == 1 ) CALL timing_start('zdf_ric') 111 113 ! 112 DO jk = 2, jpkm1 !== avm and avt = F(Richardson number) ==! 113 ! 114 IF( ll_av_weight ) THEN !== viscosity weighted shear & stratification terms 115 ! 116 DO jj = 1, jpjm1 !* viscosity weighted shear term 114 ! !== avm and avt = F(Richardson number) ==! 115 ! 116 ! !* Shear production at uw- and vw-points (energy conserving form) 117 CALL zdf_sh2( zsh2 ) 118 ! 119 DO jk = 2, jpkm1 !* Vertical eddy viscosity and diffusivity coefficients 120 DO jj = 1, jpjm1 117 121 DO ji = 1, jpim1 118 zdu2(ji,jj) = 0.5 * ( avm(ji,jj,jk ) + avm(ji+1,jj,jk) ) * wumask(ji,jj,jk) & 119 & * ( un(ji,jj,jk-1) - un(ji ,jj,jk) ) & 120 & * ( ub(ji,jj,jk-1) - ub(ji ,jj,jk) ) / ( e3uw_n(ji,jj,jk) * e3uw_b(ji,jj,jk) ) 121 zdv2(ji,jj) = 0.5 * ( avm(ji,jj,jk ) + avm(ji,jj+1,jk) ) * wumask(ji,jj,jk) & 122 & * ( vn(ji,jj,jk-1) - vn(ji,jj ,jk) ) & 123 & * ( vb(ji,jj,jk-1) - vb(ji,jj ,jk) ) / ( e3vw_n(ji,jj,jk) * e3vw_b(ji,jj,jk) ) 124 END DO 125 END DO 126 DO jj = 2, jpjm1 127 DO ji = 2, jpim1 !* Richardson number dependent coefficient 128 ! ! shear of horizontal velocity 129 zsh2 = ( zdu2(ji-1,jj) + zdu2(ji,jj) ) / MAX( 1._wp , umask(ji-1,jj,jk) + umask(ji,jj,jk) ) & 130 & + ( zdv2(ji,jj-1) + zdv2(ji,jj) ) / MAX( 1._wp , vmask(ji,jj-1,jk) + vmask(ji,jj,jk) ) 131 ! ! coefficient = F(richardson number) 132 zcfRi = 1._wp / ( 1._wp + rn_alp * MAX( 0._wp , avt(ji,jj,jk) * rn2(ji,jj,jk) / ( zsh2 + 1.e-20 ) ) ) 122 ! ! coefficient = F(richardson number) (avm-weighted Ri) 123 zcfRi = 1._wp / ( 1._wp + rn_alp * MAX( 0._wp , avm(ji,jj,jk) * rn2(ji,jj,jk) / ( zsh2(ji,jj,jk) + 1.e-20 ) ) ) 124 zav = rn_avmri * zcfRi**nn_ric 133 125 ! 134 ! !* Vertical eddy viscosity and diffusivity coefficients 135 zav = rn_avmri * zcfRi**nn_ric 126 ! ! avm and avt coefficients 136 127 avm(ji,jj,jk) = MAX( zav , avmb(jk) ) * wmask(ji,jj,jk) 137 128 avt(ji,jj,jk) = MAX( zav * zcfRi , avtb(jk) ) * wmask(ji,jj,jk) 138 129 END DO 139 130 END DO 140 ELSE !== classical Richardson number definition ==!141 DO jj = 1, jpjm1 !* shear term142 DO ji = 1, jpim1143 zdu2(ji,jj) = 0.5 * ( un(ji,jj,jk-1) - un(ji ,jj,jk) ) &144 & * ( ub(ji,jj,jk-1) - ub(ji ,jj,jk) ) / ( e3uw_n(ji,jj,jk) * e3uw_b(ji,jj,jk) )145 zdv2(ji,jj) = 0.5 * ( vn(ji,jj,jk-1) - vn(ji,jj ,jk) ) &146 & * ( vb(ji,jj,jk-1) - vb(ji,jj ,jk) ) / ( e3vw_n(ji,jj,jk) * e3vw_b(ji,jj,jk) )147 END DO148 END DO149 DO jj = 2, jpjm1150 DO ji = 2, jpim1 !* Richardson number dependent coefficient151 ! ! shear of horizontal velocity152 zsh2 = ( zdu2(ji-1,jj) + zdu2(ji,jj) ) / MAX( 1._wp , umask(ji-1,jj,jk) + umask(ji,jj,jk) ) &153 & + ( zdv2(ji,jj-1) + zdv2(ji,jj) ) / MAX( 1._wp , vmask(ji,jj-1,jk) + vmask(ji,jj,jk) )154 ! ! coefficient = F(richardson number)155 zcfRi = 1._wp / ( 1._wp + rn_alp * MAX( 0._wp , rn2(ji,jj,jk) / ( zsh2 + 1.e-20 ) ) )156 !157 ! !* Vertical eddy viscosity and diffusivity coefficients158 zav = rn_avmri * zcfRi**nn_ric159 avm(ji,jj,jk) = MAX( zav , avmb(jk) ) * wmask(ji,jj,jk)160 avt(ji,jj,jk) = MAX( zav * zcfRi , avtb(jk) ) * wmask(ji,jj,jk)161 END DO162 END DO163 ENDIF164 !165 131 END DO 132 ! 133 !!gm BUG <<<<==== This param can't work at low latitude 134 !!gm it provides there much to thick mixed layer ( summer 150m in GYRE configuration !!! ) 166 135 ! 167 136 IF( ln_mldw ) THEN !== set a minimum value in the Ekman layer ==! … … 184 153 END DO 185 154 END DO 186 END 155 ENDIF 187 156 ! 188 157 IF( nn_timing == 1 ) CALL timing_stop('zdf_ric')
Note: See TracChangeset
for help on using the changeset viewer.