Changeset 10874 for NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/ZDF
- Timestamp:
- 2019-04-15T15:57:37+02:00 (5 years ago)
- Location:
- NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/ZDF
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/ZDF/zdfphy.F90
r10829 r10874 218 218 219 219 220 SUBROUTINE zdf_phy( kt , ktlev1, ktlev2, kt2lev1, kt2lev2)220 SUBROUTINE zdf_phy( kt ) 221 221 !!---------------------------------------------------------------------- 222 222 !! *** ROUTINE zdf_phy *** … … 231 231 !!---------------------------------------------------------------------- 232 232 INTEGER, INTENT(in) :: kt ! ocean time-step index 233 INTEGER, INTENT(in) :: ktlev1, ktlev2 ! time level indices for 3-time-level source terms234 INTEGER, INTENT(in) :: kt2lev1, kt2lev2 ! time level indices for 2-time-level source terms235 233 ! 236 234 INTEGER :: ji, jj, jk ! dummy loop indice … … 256 254 ! 257 255 IF( l_zdfsh2 ) & !* shear production at w-points (energy conserving form) 258 CALL zdf_sh2( u u(:,:,:,ktlev1), vv(:,:,:,ktlev1), uu(:,:,:,ktlev2), vv(:,:,:,ktlev2), avm_k, & ! <<== in256 CALL zdf_sh2( ub, vb, un, vn, avm_k, & ! <<== in 259 257 & zsh2 ) ! ==>> out : shear production 260 258 ! 261 259 SELECT CASE ( nzdf_phy ) !* Vertical eddy viscosity and diffusivity coefficients at w-points 262 CASE( np_RIC ) ; CALL zdf_ric( kt, gdept (:,:,:,kt2lev2), zsh2, avm_k, avt_k ) ! Richardson number dependent Kz263 CASE( np_TKE ) ; CALL zdf_tke( kt , ktlev1, ktlev2, kt2lev1, kt2lev2, zsh2, avm_k, avt_k ) ! TKE closure scheme for Kz260 CASE( np_RIC ) ; CALL zdf_ric( kt, gdept_n, zsh2, avm_k, avt_k ) ! Richardson number dependent Kz 261 CASE( np_TKE ) ; CALL zdf_tke( kt , zsh2, avm_k, avt_k ) ! TKE closure scheme for Kz 264 262 CASE( np_GLS ) ; CALL zdf_gls( kt , zsh2, avm_k, avt_k ) ! GLS closure scheme for Kz 265 263 CASE( np_OSM ) ; CALL zdf_osm( kt , avm_k, avt_k ) ! OSMOSIS closure scheme for Kz … … 320 318 IF( ln_zdfgls ) CALL gls_rst( kt, 'WRITE' ) 321 319 IF( ln_zdfric ) CALL ric_rst( kt, 'WRITE' ) 322 ! NB. OSMOSIS restart (osm_rst) will be called in step.F90 after w whas been updated320 ! NB. OSMOSIS restart (osm_rst) will be called in step.F90 after wn has been updated 323 321 ENDIF 324 322 ! -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/ZDF/zdftke.F90
r10829 r10874 109 109 110 110 111 SUBROUTINE zdf_tke( kt, ktlev1, ktlev2, kt2lev1, kt2lev2,p_sh2, p_avm, p_avt )111 SUBROUTINE zdf_tke( kt, p_sh2, p_avm, p_avt ) 112 112 !!---------------------------------------------------------------------- 113 113 !! *** ROUTINE zdf_tke *** … … 155 155 !!---------------------------------------------------------------------- 156 156 INTEGER , INTENT(in ) :: kt ! ocean time step 157 INTEGER , INTENT(in ) :: ktlev1, ktlev2 ! time level indices for 3-time-level source terms158 INTEGER , INTENT(in ) :: kt2lev1, kt2lev2 ! time level indices for 2-time-level source terms159 157 REAL(wp), DIMENSION(:,:,:), INTENT(in ) :: p_sh2 ! shear production term 160 158 REAL(wp), DIMENSION(:,:,:), INTENT(inout) :: p_avm, p_avt ! momentum and tracer Kz (w-points) 161 159 !!---------------------------------------------------------------------- 162 160 ! 163 CALL tke_tke( ktlev1, kt2lev1, kt2lev2, gdepw(:,:,:,kt2lev2), e3t(:,:,:,ktlev2), e3w(:,:,:,kt2lev2), p_sh2, p_avm, p_avt ) ! now tke (en)164 ! 165 CALL tke_avn( kt2lev2, gdepw(:,:,:,kt2lev2), e3t(:,:,:,ktlev2), e3w(:,:,:,kt2lev2), p_avm, p_avt ) ! now avt, avm, dissl161 CALL tke_tke( gdepw_n, e3t_n, e3w_n, p_sh2, p_avm, p_avt ) ! now tke (en) 162 ! 163 CALL tke_avn( gdepw_n, e3t_n, e3w_n, p_avm, p_avt ) ! now avt, avm, dissl 166 164 ! 167 165 END SUBROUTINE zdf_tke 168 166 169 167 170 SUBROUTINE tke_tke( ktlev1, kt2lev1, kt2lev2,pdepw, p_e3t, p_e3w, p_sh2, p_avm, p_avt )168 SUBROUTINE tke_tke( pdepw, p_e3t, p_e3w, p_sh2, p_avm, p_avt ) 171 169 !!---------------------------------------------------------------------- 172 170 !! *** ROUTINE tke_tke *** … … 188 186 USE zdf_oce , ONLY : en ! ocean vertical physics 189 187 !! 190 INTEGER , INTENT(in ) :: ktlev1 ! time level index for 3-time-level source terms191 INTEGER , INTENT(in ) :: kt2lev1, kt2lev2 ! time level indices for 2-time-level source terms192 188 REAL(wp), DIMENSION(:,:,:) , INTENT(in ) :: pdepw ! depth of w-points 193 189 REAL(wp), DIMENSION(:,:,:) , INTENT(in ) :: p_e3t, p_e3w ! level thickness (t- & w-points) … … 247 243 zmskv = ( 2. - vmask(ji,jj-1,mbkt(ji,jj)) * vmask(ji,jj,mbkt(ji,jj)) ) 248 244 ! ! where 0.001875 = (rn_ebb0/rau0) * 0.5 = 3.75*0.5/1000. (CAUTION CdU<0) 249 zebot = - 0.001875_wp * rCdU_bot(ji,jj) * SQRT( ( zmsku*( u u(ji,jj,mbkt(ji,jj),ktlev1)+uu(ji-1,jj,mbkt(ji,jj),ktlev1) ) )**2 &250 & + ( zmskv*( v v(ji,jj,mbkt(ji,jj),ktlev1)+vv(ji,jj-1,mbkt(ji,jj),ktlev1) ) )**2 )245 zebot = - 0.001875_wp * rCdU_bot(ji,jj) * SQRT( ( zmsku*( ub(ji,jj,mbkt(ji,jj))+ub(ji-1,jj,mbkt(ji,jj)) ) )**2 & 246 & + ( zmskv*( vb(ji,jj,mbkt(ji,jj))+vb(ji,jj-1,mbkt(ji,jj)) ) )**2 ) 251 247 en(ji,jj,mbkt(ji,jj)+1) = MAX( zebot, rn_emin ) * ssmask(ji,jj) 252 248 END DO … … 258 254 zmskv = ( 2. - vmask(ji,jj-1,mikt(ji,jj)) * vmask(ji,jj,mikt(ji,jj)) ) 259 255 ! ! where 0.001875 = (rn_ebb0/rau0) * 0.5 = 3.75*0.5/1000. (CAUTION CdU<0) 260 zetop = - 0.001875_wp * rCdU_top(ji,jj) * SQRT( ( zmsku*( u u(ji,jj,mikt(ji,jj),ktlev1)+uu(ji-1,jj,mikt(ji,jj),ktlev1) ) )**2 &261 & + ( zmskv*( v v(ji,jj,mikt(ji,jj),ktlev1)+vv(ji,jj-1,mikt(ji,jj),ktlev1) ) )**2 )256 zetop = - 0.001875_wp * rCdU_top(ji,jj) * SQRT( ( zmsku*( ub(ji,jj,mikt(ji,jj))+ub(ji-1,jj,mikt(ji,jj)) ) )**2 & 257 & + ( zmskv*( vb(ji,jj,mikt(ji,jj))+vb(ji,jj-1,mikt(ji,jj)) ) )**2 ) 262 258 en(ji,jj,mikt(ji,jj)) = MAX( zetop, rn_emin ) * (1._wp - tmask(ji,jj,1)) ! masked at ocean surface 263 259 END DO … … 272 268 ! 273 269 ! !* total energy produce by LC : cumulative sum over jk 274 zpelc(:,:,1) = MAX( r _n2(:,:,1,kt2lev1), 0._wp ) * pdepw(:,:,1) * p_e3w(:,:,1)270 zpelc(:,:,1) = MAX( rn2b(:,:,1), 0._wp ) * pdepw(:,:,1) * p_e3w(:,:,1) 275 271 DO jk = 2, jpk 276 zpelc(:,:,jk) = zpelc(:,:,jk-1) + MAX( r _n2(:,:,jk,kt2lev1), 0._wp ) * pdepw(:,:,jk) * p_e3w(:,:,jk)272 zpelc(:,:,jk) = zpelc(:,:,jk-1) + MAX( rn2b(:,:,jk), 0._wp ) * pdepw(:,:,jk) * p_e3w(:,:,jk) 277 273 END DO 278 274 ! !* finite Langmuir Circulation depth … … 331 327 DO ji = 2, jpim1 332 328 ! ! local Richardson number 333 zri = MAX( r _n2(ji,jj,jk,kt2lev1), 0._wp ) * p_avm(ji,jj,jk) / ( p_sh2(ji,jj,jk) + rn_bshear )329 zri = MAX( rn2b(ji,jj,jk), 0._wp ) * p_avm(ji,jj,jk) / ( p_sh2(ji,jj,jk) + rn_bshear ) 334 330 ! ! inverse of Prandtl number 335 331 apdlr(ji,jj,jk) = MAX( 0.1_wp, ri_cri / MAX( ri_cri , zri ) ) … … 356 352 ! ! right hand side in en 357 353 en(ji,jj,jk) = en(ji,jj,jk) + rdt * ( p_sh2(ji,jj,jk) & ! shear 358 & - p_avt(ji,jj,jk) * r _n2(ji,jj,jk,kt2lev2) & ! stratification354 & - p_avt(ji,jj,jk) * rn2(ji,jj,jk) & ! stratification 359 355 & + zfact3 * dissl(ji,jj,jk) * en(ji,jj,jk) & ! dissipation 360 356 & ) * wmask(ji,jj,jk) … … 445 441 446 442 447 SUBROUTINE tke_avn( kt2lev2,pdepw, p_e3t, p_e3w, p_avm, p_avt )443 SUBROUTINE tke_avn( pdepw, p_e3t, p_e3w, p_avm, p_avt ) 448 444 !!---------------------------------------------------------------------- 449 445 !! *** ROUTINE tke_avn *** … … 481 477 USE zdf_oce , ONLY : en, avtb, avmb, avtb_2d ! ocean vertical physics 482 478 !! 483 INTEGER , INTENT(in ) :: kt2lev2 ! time level index for 2-time-level source terms484 479 REAL(wp), DIMENSION(:,:,:), INTENT(in ) :: pdepw ! depth (w-points) 485 480 REAL(wp), DIMENSION(:,:,:), INTENT(in ) :: p_e3t, p_e3w ! level thickness (t- & w-points) … … 517 512 DO jj = 2, jpjm1 518 513 DO ji = fs_2, fs_jpim1 ! vector opt. 519 zrn2 = MAX( r _n2(ji,jj,jk,kt2lev2), rsmall )514 zrn2 = MAX( rn2(ji,jj,jk), rsmall ) 520 515 zmxlm(ji,jj,jk) = MAX( rmxl_min, SQRT( 2._wp * en(ji,jj,jk) / zrn2 ) ) 521 516 END DO
Note: See TracChangeset
for help on using the changeset viewer.