Changeset 10030 for NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/ZDF
- Timestamp:
- 2018-08-03T10:18:16+02:00 (6 years ago)
- Location:
- NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/ZDF
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/ZDF/zdfosm.F90
r9939 r10030 247 247 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zviscos ! viscosity 248 248 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zdiffut ! t-diffusivity 249 250 REAL(wp) :: ze3uw_BN, ze3vw_BN ! use for e3uw, e3vw computation 251 REAL(wp), DIMENSION(jpi,jpj) :: zsshu_hB, zsshv_hB ! at Before and Now time-step 252 REAL(wp), DIMENSION(jpi,jpj) :: zsshu_hN, zsshv_hN 249 253 250 254 ! For debugging … … 1235 1239 1236 1240 ! KPP-style Ri# mixing 1237 IF( ln_kpprimix) THEN 1238 DO jk = 2, jpkm1 !* Shear production at uw- and vw-points (energy conserving form) 1239 DO jj = 1, jpjm1 1240 DO ji = 1, jpim1 ! vector opt. 1241 z3du(ji,jj,jk) = 0.5 * ( un(ji,jj,jk-1) - un(ji ,jj,jk) ) & 1242 & * ( ub(ji,jj,jk-1) - ub(ji ,jj,jk) ) * wumask(ji,jj,jk) & 1243 & / ( e3uw_n(ji,jj,jk) * e3uw_b(ji,jj,jk) ) 1244 z3dv(ji,jj,jk) = 0.5 * ( vn(ji,jj,jk-1) - vn(ji,jj ,jk) ) & 1245 & * ( vb(ji,jj,jk-1) - vb(ji,jj ,jk) ) * wvmask(ji,jj,jk) & 1246 & / ( e3vw_n(ji,jj,jk) * e3vw_b(ji,jj,jk) ) 1241 IF( ln_kpprimix) THEN 1242 ! 1243 IF( ln_linssh ) THEN !== linear ssh case ==! 1244 DO jk = 2, jpkm1 !* Shear production at uw- and vw-points (energy conserving form) 1245 DO jj = 1, jpjm1 1246 DO ji = 1, jpim1 ! vector opt. 1247 ze3uw_BN = e3uw_0(ji,jj,jk) * e3uw_0(ji,jj,jk) 1248 ze3vw_BN = e3vw_0(ji,jj,jk) * e3vw_0(ji,jj,jk) 1249 z3du(ji,jj,jk) = 0.5 * ( un(ji,jj,jk-1) - un(ji,jj,jk) ) & 1250 & * ( ub(ji,jj,jk-1) - ub(ji,jj,jk) ) / ze3uw_BN * wumask(ji,jj,jk) 1251 z3dv(ji,jj,jk) = 0.5 * ( vn(ji,jj,jk-1) - vn(ji,jj,jk) ) & 1252 & * ( vb(ji,jj,jk-1) - vb(ji,jj,jk) ) / ze3vw_BN * wvmask(ji,jj,jk) 1253 END DO 1247 1254 END DO 1248 END DO 1249 END DO 1250 ! 1255 END DO 1256 ELSE !== Non linear ssh case ==! 1257 DO jj = 1, jpjm1 1258 DO ji = 1, jpim1 1259 zsshu_hB(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nbb) + ssh(ji+1,jj ,Nbb) ) * r1_hu_0(ji,jj) * ssumask(ji,jj) 1260 zsshv_hB(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nbb) + ssh(ji ,jj+1,Nbb) ) * r1_hv_0(ji,jj) * ssvmask(ji,jj) 1261 zsshu_hN(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nnn) + ssh(ji+1,jj ,Nnn) ) * r1_hu_0(ji,jj) * ssumask(ji,jj) 1262 zsshv_hN(ji,jj) = 0.5_wp * ( ssh(ji,jj,Nnn) + ssh(ji ,jj+1,Nnn) ) * r1_hv_0(ji,jj) * ssvmask(ji,jj) 1263 END DO 1264 END DO 1265 ! 1266 DO jk = 2, jpkm1 !* Shear production at uw- and vw-points (energy conserving form) 1267 DO jj = 1, jpjm1 1268 DO ji = 1, jpim1 ! vector opt. 1269 ze3uw_BN = e3uw_0(ji,jj,jk) * e3uw_0(ji,jj,jk) * ( 1._wp + zsshu_hB(ji,jj) * wumask(ji,jj,jk) ) & 1270 & * ( 1._wp + zsshu_hN(ji,jj) * wumask(ji,jj,jk) ) 1271 ze3vw_BN = e3vw_0(ji,jj,jk) * e3vw_0(ji,jj,jk) * ( 1._wp + zsshu_hB(ji,jj) * wvmask(ji,jj,jk) ) & 1272 & * ( 1._wp + zsshu_hN(ji,jj) * wvmask(ji,jj,jk) ) 1273 z3du(ji,jj,jk) = 0.5 * ( un(ji,jj,jk-1) - un(ji,jj,jk) ) & 1274 & * ( ub(ji,jj,jk-1) - ub(ji,jj,jk) ) / ze3uw_BN * wumask(ji,jj,jk) 1275 z3dv(ji,jj,jk) = 0.5 * ( vn(ji,jj,jk-1) - vn(ji,jj,jk) ) & 1276 & * ( vb(ji,jj,jk-1) - vb(ji,jj,jk) ) / ze3vw_BN * wvmask(ji,jj,jk) 1277 END DO 1278 END DO 1279 END DO 1280 ENDIF 1281 ! 1251 1282 DO jk = 2, jpkm1 1252 1283 DO jj = 2, jpjm1 … … 1262 1293 END DO 1263 1294 END DO 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1295 END DO 1296 ! 1297 DO jj = 2, jpjm1 1298 DO ji = 2, jpim1 1299 DO jk = ibld(ji,jj) + 1, jpkm1 1300 zdiffut(ji,jj,jk) = zrimix(ji,jj,jk)*rn_difri 1301 zviscos(ji,jj,jk) = zrimix(ji,jj,jk)*rn_difri 1302 END DO 1303 END DO 1304 END DO 1305 ! 1275 1306 END IF ! ln_kpprimix = .true. 1276 1307 … … 1708 1739 DO jj = 2, jpjm1 1709 1740 DO ji = 2, jpim1 1710 ua(ji,jj,jk) = ua(ji,jj,jk) & 1711 & - ( ghamu(ji,jj,jk ) & 1712 & - ghamu(ji,jj,jk+1) ) / e3u_n(ji,jj,jk) 1713 va(ji,jj,jk) = va(ji,jj,jk) & 1714 & - ( ghamv(ji,jj,jk ) & 1715 & - ghamv(ji,jj,jk+1) ) / e3v_n(ji,jj,jk) 1741 ua(ji,jj,jk) = ua(ji,jj,jk) - ( ghamu(ji,jj,jk) - ghamu(ji,jj,jk+1) ) / e3u_n(ji,jj,jk) 1742 va(ji,jj,jk) = va(ji,jj,jk) - ( ghamv(ji,jj,jk) - ghamv(ji,jj,jk+1) ) / e3v_n(ji,jj,jk) 1716 1743 END DO 1717 1744 END DO -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/ZDF/zdfphy.F90
r9598 r10030 246 246 ! 247 247 IF( l_zdfsh2 ) & !* shear production at w-points (energy conserving form) 248 CALL zdf_sh2( ub, vb, un, vn, avm_k, & ! <<== in249 & zsh2 ) ! ==>> out : shear production248 CALL zdf_sh2( ssh, ub, vb, un, vn, avm_k, & ! <<== in 249 & zsh2 ) ! ==>> out : shear production 250 250 ! 251 251 SELECT CASE ( nzdf_phy ) !* Vertical eddy viscosity and diffusivity coefficients at w-points -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/ZDF/zdfsh2.F90
r9598 r10030 6 6 !! History : - ! 2014-10 (A. Barthelemy, G. Madec) original code 7 7 !! NEMO 4.0 ! 2017-04 (G. Madec) remove u-,v-pts avm 8 !! 5.0 ! 2018-08 (G. Madec) local calculation of e3uw e3vw 8 9 !!---------------------------------------------------------------------- 9 10 … … 28 29 CONTAINS 29 30 30 SUBROUTINE zdf_sh2( p ub, pvb, pun, pvn, p_avm, p_sh2 )31 SUBROUTINE zdf_sh2( pssh, pub, pvb, pun, pvn, p_avm, p_sh2 ) 31 32 !!---------------------------------------------------------------------- 32 33 !! *** ROUTINE zdf_sh2 *** … … 47 48 !! References : Bruchard, OM 2002 48 49 !! --------------------------------------------------------------------- 50 REAL(wp), DIMENSION(:,:,:) , INTENT(in ) :: pssh ! sea surface height 49 51 REAL(wp), DIMENSION(:,:,:) , INTENT(in ) :: pub, pvb, pun, pvn ! before, now horizontal velocities 50 52 REAL(wp), DIMENSION(:,:,:) , INTENT(in ) :: p_avm ! vertical eddy viscosity (w-points) 51 53 REAL(wp), DIMENSION(:,:,:) , INTENT( out) :: p_sh2 ! shear production of TKE (w-points) 52 54 ! 53 INTEGER :: ji, jj, jk ! dummy loop arguments 54 REAL(wp), DIMENSION(jpi,jpj) :: zsh2u, zsh2v ! 2D workspace 55 INTEGER :: ji, jj, jk ! dummy loop arguments 56 REAL(wp):: ze3uw_BN, ze3vw_BN ! local real 57 REAL(wp), DIMENSION(jpi,jpj) :: zsh2u , zsh2v ! 2D workspace 58 REAL(wp), DIMENSION(jpi,jpj) :: zsshu_hB, zsshv_hB ! 2D workspace 59 REAL(wp), DIMENSION(jpi,jpj) :: zsshu_hN, zsshv_hN 55 60 !!-------------------------------------------------------------------- 56 61 ! 57 DO jk = 2, jpkm1 58 DO jj = 1, jpjm1 !* 2 x shear production at uw- and vw-points (energy conserving form) 62 IF( ln_linssh ) THEN !== linear ssh case ==! 63 DO jk = 2, jpkm1 64 DO jj = 1, jpjm1 !* 2 x shear production at uw- and vw-points (energy conserving form) 65 DO ji = 1, jpim1 66 ze3uw_BN = e3uw_0(ji,jj,jk) * e3uw_0(ji,jj,jk) 67 ze3vw_BN = e3vw_0(ji,jj,jk) * e3vw_0(ji,jj,jk) 68 ! 69 zsh2u(ji,jj) = ( p_avm(ji+1,jj,jk) + p_avm(ji,jj,jk) ) & 70 & * ( pun(ji,jj,jk-1) - pun(ji,jj,jk) ) & 71 & * ( pub(ji,jj,jk-1) - pub(ji,jj,jk) ) / ze3uw_BN * wumask(ji,jj,jk) 72 zsh2v(ji,jj) = ( p_avm(ji,jj+1,jk) + p_avm(ji,jj,jk) ) & 73 & * ( pvn(ji,jj,jk-1) - pvn(ji,jj,jk) ) & 74 & * ( pvb(ji,jj,jk-1) - pvb(ji,jj,jk) ) / ze3vw_BN * wvmask(ji,jj,jk) 75 END DO 76 END DO 77 DO jj = 2, jpjm1 !* shear production at w-point 78 DO ji = 2, jpim1 ! coast mask: =2 at the coast ; =1 otherwise (NB: wmask useless as zsh2 are masked) 79 p_sh2(ji,jj,jk) = 0.25 * ( ( zsh2u(ji-1,jj) + zsh2u(ji,jj) ) * ( 2. - umask(ji-1,jj,jk) * umask(ji,jj,jk) ) & 80 & + ( zsh2v(ji,jj-1) + zsh2v(ji,jj) ) * ( 2. - vmask(ji,jj-1,jk) * vmask(ji,jj,jk) ) ) 81 END DO 82 END DO 83 END DO 84 ! 85 ELSE !== Non linear ssh case ==! 86 DO jj = 1, jpjm1 59 87 DO ji = 1, jpim1 60 zsh2u(ji,jj) = ( p_avm(ji+1,jj,jk) + p_avm(ji,jj,jk) ) & 61 & * ( pun(ji,jj,jk-1) - pun(ji,jj,jk) ) & 62 & * ( pub(ji,jj,jk-1) - pub(ji,jj,jk) ) / ( e3uw_n(ji,jj,jk) * e3uw_b(ji,jj,jk) ) * wumask(ji,jj,jk) 63 zsh2v(ji,jj) = ( p_avm(ji,jj+1,jk) + p_avm(ji,jj,jk) ) & 64 & * ( pvn(ji,jj,jk-1) - pvn(ji,jj,jk) ) & 65 & * ( pvb(ji,jj,jk-1) - pvb(ji,jj,jk) ) / ( e3vw_n(ji,jj,jk) * e3vw_b(ji,jj,jk) ) * wvmask(ji,jj,jk) 88 zsshu_hB(ji,jj) = 0.5_wp * ( pssh(ji,jj,Nbb) + pssh(ji+1,jj ,Nbb) ) * r1_hu_0(ji,jj) * ssumask(ji,jj) 89 zsshv_hB(ji,jj) = 0.5_wp * ( pssh(ji,jj,Nbb) + pssh(ji ,jj+1,Nbb) ) * r1_hv_0(ji,jj) * ssvmask(ji,jj) 90 zsshu_hN(ji,jj) = 0.5_wp * ( pssh(ji,jj,Nnn) + pssh(ji+1,jj ,Nnn) ) * r1_hu_0(ji,jj) * ssumask(ji,jj) 91 zsshv_hN(ji,jj) = 0.5_wp * ( pssh(ji,jj,Nnn) + pssh(ji ,jj+1,Nnn) ) * r1_hv_0(ji,jj) * ssvmask(ji,jj) 66 92 END DO 67 93 END DO 68 DO jj = 2, jpjm1 !* shear production at w-point 69 DO ji = 2, jpim1 ! coast mask: =2 at the coast ; =1 otherwise (NB: wmask useless as zsh2 are masked) 70 p_sh2(ji,jj,jk) = 0.25 * ( ( zsh2u(ji-1,jj) + zsh2u(ji,jj) ) * ( 2. - umask(ji-1,jj,jk) * umask(ji,jj,jk) ) & 71 & + ( zsh2v(ji,jj-1) + zsh2v(ji,jj) ) * ( 2. - vmask(ji,jj-1,jk) * vmask(ji,jj,jk) ) ) 94 ! 95 DO jk = 2, jpkm1 96 DO jj = 1, jpjm1 !* 2 x shear production at uw- and vw-points (energy conserving form) 97 DO ji = 1, jpim1 98 ze3uw_BN = e3uw_0(ji,jj,jk) * e3uw_0(ji,jj,jk) * ( 1._wp + zsshu_hB(ji,jj) * wumask(ji,jj,jk) ) & 99 & * ( 1._wp + zsshu_hN(ji,jj) * wumask(ji,jj,jk) ) 100 ze3vw_BN = e3vw_0(ji,jj,jk) * e3vw_0(ji,jj,jk) * ( 1._wp + zsshu_hB(ji,jj) * wvmask(ji,jj,jk) ) & 101 & * ( 1._wp + zsshu_hN(ji,jj) * wvmask(ji,jj,jk) ) 102 zsh2u(ji,jj) = ( p_avm(ji+1,jj,jk) + p_avm(ji,jj,jk) ) & 103 & * ( pun(ji,jj,jk-1) - pun(ji,jj,jk) ) & 104 & * ( pub(ji,jj,jk-1) - pub(ji,jj,jk) ) / ze3uw_BN * wumask(ji,jj,jk) 105 zsh2v(ji,jj) = ( p_avm(ji,jj+1,jk) + p_avm(ji,jj,jk) ) & 106 & * ( pvn(ji,jj,jk-1) - pvn(ji,jj,jk) ) & 107 & * ( pvb(ji,jj,jk-1) - pvb(ji,jj,jk) ) / ze3vw_BN * wvmask(ji,jj,jk) 108 END DO 72 109 END DO 73 END DO 74 END DO 110 DO jj = 2, jpjm1 !* shear production at w-point 111 DO ji = 2, jpim1 ! coast mask: =2 at the coast ; =1 otherwise (NB: wmask useless as zsh2 are masked) 112 p_sh2(ji,jj,jk) = 0.25 * ( ( zsh2u(ji-1,jj) + zsh2u(ji,jj) ) * ( 2. - umask(ji-1,jj,jk) * umask(ji,jj,jk) ) & 113 & + ( zsh2v(ji,jj-1) + zsh2v(ji,jj) ) * ( 2. - vmask(ji,jj-1,jk) * vmask(ji,jj,jk) ) ) 114 END DO 115 END DO 116 END DO 117 ENDIF 75 118 ! 76 119 END SUBROUTINE zdf_sh2
Note: See TracChangeset
for help on using the changeset viewer.