Changeset 9939 for NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/ZDF
- Timestamp:
- 2018-07-13T09:28:50+02:00 (6 years ago)
- Location:
- NEMO/branches/2018/dev_r9838_ENHANCE04_RK3
- Files:
-
- 8 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/ZDF/zdfddm.F90
r9598 r9939 7 7 !! NEMO 1.0 ! 2002-06 (G. Madec) F90: Free form and module 8 8 !! 3.3 ! 2010-10 (C. Ethe, G. Madec) reorganisation of initialisation phase 9 !! 3.6 ! 2013-04 (G. Madec, F. Roquet) zr aucompute locally using interpolation of alpha & beta9 !! 3.6 ! 2013-04 (G. Madec, F. Roquet) zrho compute locally using interpolation of alpha & beta 10 10 !! 4.0 ! 2017-04 (G. Madec) remove CPP ddm key & avm at t-point only 11 11 !!---------------------------------------------------------------------- … … 79 79 REAL(wp) :: zavft, zavfs ! - - 80 80 REAL(wp) :: zavdt, zavds ! - - 81 REAL(wp), DIMENSION(jpi,jpj) :: zr au, zmsks, zmskf, zmskd1, zmskd2, zmskd381 REAL(wp), DIMENSION(jpi,jpj) :: zrho, zmsks, zmskf, zmskd1, zmskd2, zmskd3 82 82 !!---------------------------------------------------------------------- 83 83 ! … … 91 91 !!gm and many acces in memory 92 92 93 DO jj = 1, jpj !== R=zr au= (alpha / beta) (dk[t] / dk[s]) ==!93 DO jj = 1, jpj !== R=zrho = (alpha / beta) (dk[t] / dk[s]) ==! 94 94 DO ji = 1, jpi 95 95 zrw = ( gdepw_n(ji,jj,jk ) - gdept_n(ji,jj,jk) ) & … … 105 105 zds = zbw * ( tsn(ji,jj,jk-1,jp_sal) - tsn(ji,jj,jk,jp_sal) ) 106 106 IF( ABS( zds) <= 1.e-20_wp ) zds = 1.e-20_wp 107 zr au(ji,jj) = MAX( 1.e-20, zdt / zds ) ! only retains positive value of zrau107 zrho(ji,jj) = MAX( 1.e-20, zdt / zds ) ! only retains positive value of zrho 108 108 END DO 109 109 END DO … … 116 116 ENDIF 117 117 ! salt fingering indicator: msksf=1 if R>1; 0 elsewhere 118 IF( zr au(ji,jj) <= 1. ) THEN ; zmskf(ji,jj) = 0._wp118 IF( zrho(ji,jj) <= 1. ) THEN ; zmskf(ji,jj) = 0._wp 119 119 ELSE ; zmskf(ji,jj) = 1._wp 120 120 ENDIF 121 121 ! diffusive layering indicators: 122 122 ! ! mskdl1=1 if 0< R <1; 0 elsewhere 123 IF( zr au(ji,jj) >= 1. ) THEN ; zmskd1(ji,jj) = 0._wp123 IF( zrho(ji,jj) >= 1. ) THEN ; zmskd1(ji,jj) = 0._wp 124 124 ELSE ; zmskd1(ji,jj) = 1._wp 125 125 ENDIF 126 126 ! ! mskdl2=1 if 0< R <0.5; 0 elsewhere 127 IF( zr au(ji,jj) >= 0.5 ) THEN ; zmskd2(ji,jj) = 0._wp127 IF( zrho(ji,jj) >= 0.5 ) THEN ; zmskd2(ji,jj) = 0._wp 128 128 ELSE ; zmskd2(ji,jj) = 1._wp 129 129 ENDIF 130 130 ! mskdl3=1 if 0.5< R <1; 0 elsewhere 131 IF( zr au(ji,jj) <= 0.5 .OR. zrau(ji,jj) >= 1. ) THEN ; zmskd3(ji,jj) = 0._wp131 IF( zrho(ji,jj) <= 0.5 .OR. zrho(ji,jj) >= 1. ) THEN ; zmskd3(ji,jj) = 0._wp 132 132 ELSE ; zmskd3(ji,jj) = 1._wp 133 133 ENDIF … … 143 143 DO jj = 1, jpj 144 144 DO ji = 1, jpi 145 zinr = 1._wp / zr au(ji,jj)145 zinr = 1._wp / zrho(ji,jj) 146 146 ! salt fingering 147 zrr = zr au(ji,jj) / rn_hsbfr147 zrr = zrho(ji,jj) / rn_hsbfr 148 148 zrr = zrr * zrr 149 149 zavfs = rn_avts / ( 1 + zrr*zrr*zrr ) * zmsks(ji,jj) * zmskf(ji,jj) … … 151 151 ! diffusive layering 152 152 zavdt = 1.3635e-6 * EXP( 4.6 * EXP( -0.54*(zinr-1.) ) ) * zmsks(ji,jj) * zmskd1(ji,jj) 153 zavds = zavdt * zmsks(ji,jj) * ( ( 1.85 * zr au(ji,jj) - 0.85 ) * zmskd3(ji,jj) &154 & + 0.15 * zr au(ji,jj) * zmskd2(ji,jj) )153 zavds = zavdt * zmsks(ji,jj) * ( ( 1.85 * zrho(ji,jj) - 0.85 ) * zmskd3(ji,jj) & 154 & + 0.15 * zrho(ji,jj) * zmskd2(ji,jj) ) 155 155 ! add to the eddy viscosity coef. previously computed 156 156 p_avs(ji,jj,jk) = p_avt(ji,jj,jk) + zavfs + zavds -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/ZDF/zdfdrg.F90
r9598 r9939 162 162 INTEGER :: ji, jj ! dummy loop indexes 163 163 INTEGER :: ikbu, ikbv ! local integers 164 REAL(wp) :: zm1_2dt ! local scalar165 164 REAL(wp) :: zCdu, zCdv ! - - 166 165 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: ztrdu, ztrdv 167 166 !!--------------------------------------------------------------------- 168 167 ! 169 !!gm bug : time step is only rdt (not 2 rdt if euler start !)170 zm1_2dt = - 1._wp / ( 2._wp * rdt )171 172 168 IF( l_trddyn ) THEN ! trends: store the input trends 173 169 ALLOCATE( ztrdu(jpi,jpj,jpk) , ztrdv(jpi,jpj,jpk) ) … … 185 181 zCdv = 0.5*( rCdU_bot(ji,jj+1)+rCdU_bot(ji,jj) ) / e3v_n(ji,jj,ikbv) 186 182 ! 187 pua(ji,jj,ikbu) = pua(ji,jj,ikbu) + MAX( zCdu , zm1_2dt ) * pub(ji,jj,ikbu)188 pva(ji,jj,ikbv) = pva(ji,jj,ikbv) + MAX( zCdv , zm1_2dt ) * pvb(ji,jj,ikbv)183 pua(ji,jj,ikbu) = pua(ji,jj,ikbu) + MAX( zCdu , - r1_Dt ) * pub(ji,jj,ikbu) 184 pva(ji,jj,ikbv) = pva(ji,jj,ikbv) + MAX( zCdv , - r1_Dt ) * pvb(ji,jj,ikbv) 189 185 END DO 190 186 END DO … … 200 196 zCdv = 0.5*( rCdU_top(ji,jj+1)+rCdU_top(ji,jj) ) / e3v_n(ji,jj,ikbv) 201 197 ! 202 pua(ji,jj,ikbu) = pua(ji,jj,ikbu) + MAX( zCdu , zm1_2dt ) * pub(ji,jj,ikbu)203 pva(ji,jj,ikbv) = pva(ji,jj,ikbv) + MAX( zCdv , zm1_2dt ) * pvb(ji,jj,ikbv)198 pua(ji,jj,ikbu) = pua(ji,jj,ikbu) + MAX( zCdu , - r1_Dt ) * pub(ji,jj,ikbu) 199 pva(ji,jj,ikbv) = pva(ji,jj,ikbv) + MAX( zCdv , - r1_Dt ) * pvb(ji,jj,ikbv) 204 200 END DO 205 201 END DO -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/ZDF/zdfgls.F90
r9598 r9939 170 170 ! 171 171 ! surface friction 172 ustar2_surf(ji,jj) = r1_r au0 * taum(ji,jj) * tmask(ji,jj,1)172 ustar2_surf(ji,jj) = r1_rho0 * taum(ji,jj) * tmask(ji,jj,1) 173 173 ! 174 174 !!gm Rq we may add here r_ke0(_top/_bot) ? ==>> think about that... … … 280 280 zd_up(ji,jj,jk) = zcof * ( p_avm(ji,jj,jk+1) + p_avm(ji,jj,jk ) ) / ( e3t_n(ji,jj,jk ) * e3w_n(ji,jj,jk) ) 281 281 ! ! diagonal 282 zdiag(ji,jj,jk) = 1._wp - zd_lw(ji,jj,jk) - zd_up(ji,jj,jk) + r dt * zdiss * wmask(ji,jj,jk)282 zdiag(ji,jj,jk) = 1._wp - zd_lw(ji,jj,jk) - zd_up(ji,jj,jk) + rn_Dt * zdiss * wmask(ji,jj,jk) 283 283 ! ! right hand side in en 284 en(ji,jj,jk) = en(ji,jj,jk) + r dt * zesh2 * wmask(ji,jj,jk)284 en(ji,jj,jk) = en(ji,jj,jk) + rn_Dt * zesh2 * wmask(ji,jj,jk) 285 285 END DO 286 286 END DO … … 530 530 zd_up(ji,jj,jk) = zcof * ( p_avm(ji,jj,jk+1) + p_avm(ji,jj,jk ) ) / ( e3t_n(ji,jj,jk ) * e3w_n(ji,jj,jk) ) 531 531 ! ! diagonal 532 zdiag(ji,jj,jk) = 1._wp - zd_lw(ji,jj,jk) - zd_up(ji,jj,jk) + r dt * zdiss * wmask(ji,jj,jk)532 zdiag(ji,jj,jk) = 1._wp - zd_lw(ji,jj,jk) - zd_up(ji,jj,jk) + rn_Dt * zdiss * wmask(ji,jj,jk) 533 533 ! ! right hand side in psi 534 psi(ji,jj,jk) = psi(ji,jj,jk) + r dt * zesh2 * wmask(ji,jj,jk)534 psi(ji,jj,jk) = psi(ji,jj,jk) + rn_Dt * zesh2 * wmask(ji,jj,jk) 535 535 END DO 536 536 END DO … … 1105 1105 rc04 = rc03 * rc0 1106 1106 rsbc_tke1 = -3._wp/2._wp*rn_crban*ra_sf*rl_sf ! Dirichlet + Wave breaking 1107 rsbc_tke2 = r dt * rn_crban / rl_sf! Neumann + Wave breaking1107 rsbc_tke2 = rn_Dt * rn_crban / rl_sf ! Neumann + Wave breaking 1108 1108 zcr = MAX(rsmall, rsbc_tke1**(1./(-ra_sf*3._wp/2._wp))-1._wp ) 1109 1109 rtrans = 0.2_wp / zcr ! Ad. inverse transition length between log and wave layer 1110 1110 rsbc_zs1 = rn_charn/grav ! Charnock formula for surface roughness 1111 1111 rsbc_zs2 = rn_frac_hs / 0.85_wp / grav * 665._wp ! Rascle formula for surface roughness 1112 rsbc_psi1 = -0.5_wp * r dt * rc0**(rpp-2._wp*rmm) / rsc_psi1113 rsbc_psi2 = -0.5_wp * r dt * rc0**rpp * rnn * vkarmn**rnn / rsc_psi ! Neumann + NO Wave breaking1114 ! 1115 rfact_tke = -0.5_wp / rsc_tke * r dt! Cst used for the Diffusion term of tke1116 rfact_psi = -0.5_wp / rsc_psi * r dt! Cst used for the Diffusion term of tke1112 rsbc_psi1 = -0.5_wp * rn_Dt * rc0**(rpp-2._wp*rmm) / rsc_psi 1113 rsbc_psi2 = -0.5_wp * rn_Dt * rc0**rpp * rnn * vkarmn**rnn / rsc_psi ! Neumann + NO Wave breaking 1114 ! 1115 rfact_tke = -0.5_wp / rsc_tke * rn_Dt ! Cst used for the Diffusion term of tke 1116 rfact_psi = -0.5_wp / rsc_psi * rn_Dt ! Cst used for the Diffusion term of tke 1117 1117 ! 1118 1118 ! !* Wall proximity function -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/ZDF/zdfiwm.F90
r9598 r9939 87 87 !! This is divided into three components: 88 88 !! 1. Bottom-intensified low-mode dissipation at critical slopes 89 !! zemx_iwm(z) = ( ecri_iwm / r au0 ) * EXP( -(H-z)/hcri_iwm )89 !! zemx_iwm(z) = ( ecri_iwm / rho0 ) * EXP( -(H-z)/hcri_iwm ) 90 90 !! / ( 1. - EXP( - H/hcri_iwm ) ) * hcri_iwm 91 91 !! where hcri_iwm is the characteristic length scale of the bottom 92 92 !! intensification, ecri_iwm a map of available power, and H the ocean depth. 93 93 !! 2. Pycnocline-intensified low-mode dissipation 94 !! zemx_iwm(z) = ( epyc_iwm / r au0 ) * ( sqrt(rn2(z))^nn_zpyc )94 !! zemx_iwm(z) = ( epyc_iwm / rho0 ) * ( sqrt(rn2(z))^nn_zpyc ) 95 95 !! / SUM( sqrt(rn2(z))^nn_zpyc * e3w(z) ) 96 96 !! where epyc_iwm is a map of available power, and nn_zpyc … … 98 98 !! energy dissipation. 99 99 !! 3. WKB-height dependent high mode dissipation 100 !! zemx_iwm(z) = ( ebot_iwm / r au0 ) * rn2(z) * EXP(-z_wkb(z)/hbot_iwm)100 !! zemx_iwm(z) = ( ebot_iwm / rho0 ) * rn2(z) * EXP(-z_wkb(z)/hbot_iwm) 101 101 !! / SUM( rn2(z) * EXP(-z_wkb(z)/hbot_iwm) * e3w(z) ) 102 102 !! where hbot_iwm is the characteristic length scale of the WKB bottom … … 151 151 DO ji = 1, jpi 152 152 zhdep(ji,jj) = gdepw_0(ji,jj,mbkt(ji,jj)+1) ! depth of the ocean 153 zfact(ji,jj) = r au0 * ( 1._wp - EXP( -zhdep(ji,jj) / hcri_iwm(ji,jj) ) )153 zfact(ji,jj) = rho0 * ( 1._wp - EXP( -zhdep(ji,jj) / hcri_iwm(ji,jj) ) ) 154 154 IF( zfact(ji,jj) /= 0._wp ) zfact(ji,jj) = ecri_iwm(ji,jj) / zfact(ji,jj) 155 155 END DO … … 180 180 DO jj = 1, jpj 181 181 DO ji = 1, jpi 182 IF( zfact(ji,jj) /= 0 ) zfact(ji,jj) = epyc_iwm(ji,jj) / ( r au0 * zfact(ji,jj) )182 IF( zfact(ji,jj) /= 0 ) zfact(ji,jj) = epyc_iwm(ji,jj) / ( rho0 * zfact(ji,jj) ) 183 183 END DO 184 184 END DO … … 197 197 DO jj= 1, jpj 198 198 DO ji = 1, jpi 199 IF( zfact(ji,jj) /= 0 ) zfact(ji,jj) = epyc_iwm(ji,jj) / ( r au0 * zfact(ji,jj) )199 IF( zfact(ji,jj) /= 0 ) zfact(ji,jj) = epyc_iwm(ji,jj) / ( rho0 * zfact(ji,jj) ) 200 200 END DO 201 201 END DO … … 247 247 DO jj = 1, jpj 248 248 DO ji = 1, jpi 249 IF( zfact(ji,jj) /= 0 ) zfact(ji,jj) = ebot_iwm(ji,jj) / ( r au0 * zfact(ji,jj) )249 IF( zfact(ji,jj) /= 0 ) zfact(ji,jj) = ebot_iwm(ji,jj) / ( rho0 * zfact(ji,jj) ) 250 250 END DO 251 251 END DO … … 260 260 ! Calculate molecular kinematic viscosity 261 261 znu_t(:,:,:) = 1.e-4_wp * ( 17.91_wp - 0.53810_wp * tsn(:,:,:,jp_tem) + 0.00694_wp * tsn(:,:,:,jp_tem) * tsn(:,:,:,jp_tem) & 262 & + 0.02305_wp * tsn(:,:,:,jp_sal) ) * tmask(:,:,:) * r1_r au0262 & + 0.02305_wp * tsn(:,:,:,jp_sal) ) * tmask(:,:,:) * r1_rho0 263 263 DO jk = 2, jpkm1 264 264 znu_w(:,:,jk) = 0.5_wp * ( znu_t(:,:,jk-1) + znu_t(:,:,jk) ) * wmask(:,:,jk) … … 306 306 END DO 307 307 IF( lk_mpp ) CALL mpp_sum( zztmp ) 308 zztmp = r au0 * zztmp ! Global integral of rauo * Kz * N^2 = power contributing to mixing308 zztmp = rho0 * zztmp ! Global integral of rhoo * Kz * N^2 = power contributing to mixing 309 309 ! 310 310 IF(lwp) THEN … … 350 350 !* output useful diagnostics: Kz*N^2 , 351 351 !!gm Kz*N2 should take into account the ratio avs/avt if it is used.... (see diaar5) 352 ! vertical integral of r au0 * Kz * N^2 , energy density (zemx_iwm)352 ! vertical integral of rho0 * Kz * N^2 , energy density (zemx_iwm) 353 353 IF( iom_use("bflx_iwm") .OR. iom_use("pcmap_iwm") ) THEN 354 354 ALLOCATE( z2d(jpi,jpj) , z3d(jpi,jpj,jpk) ) … … 358 358 z2d(:,:) = z2d(:,:) + e3w_n(:,:,jk) * z3d(:,:,jk) * wmask(:,:,jk) 359 359 END DO 360 z2d(:,:) = r au0 * z2d(:,:)360 z2d(:,:) = rho0 * z2d(:,:) 361 361 CALL iom_put( "bflx_iwm", z3d ) 362 362 CALL iom_put( "pcmap_iwm", z2d ) -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/ZDF/zdfmxl.F90
r9598 r9939 93 93 nmln(:,:) = nlb10 ! Initialization to the number of w ocean point 94 94 hmlp(:,:) = 0._wp ! here hmlp used as a dummy variable, integrating vertically N^2 95 zN2_c = grav * rho_c * r1_r au0 ! convert density criteria into N^2 criteria95 zN2_c = grav * rho_c * r1_rho0 ! convert density criteria into N^2 criteria 96 96 DO jk = nlb10, jpkm1 97 97 DO jj = 1, jpj ! Mixed layer level: w-level -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/ZDF/zdfosm.F90
r9598 r9939 298 298 DO ji = 2, jpim1 299 299 ! Surface downward irradiance (so always +ve) 300 zrad0(ji,jj) = qsr(ji,jj) * r1_r au0_rcp300 zrad0(ji,jj) = qsr(ji,jj) * r1_rho0_rcp 301 301 ! Downwards irradiance at base of boundary layer 302 302 zradh(ji,jj) = zrad0(ji,jj) * ( zz0 * EXP( -hbl(ji,jj)/rn_si0 ) + zz1 * EXP( -hbl(ji,jj)/rn_si1) ) … … 312 312 zbeta = rab_n(ji,jj,1,jp_sal) 313 313 ! Upwards surface Temperature flux for non-local term 314 zwth0(ji,jj) = - qns(ji,jj) * r1_r au0_rcp * tmask(ji,jj,1)314 zwth0(ji,jj) = - qns(ji,jj) * r1_rho0_rcp * tmask(ji,jj,1) 315 315 ! Upwards surface salinity flux for non-local term 316 zws0(ji,jj) = - ( ( emp(ji,jj)-rnf(ji,jj) ) * tsn(ji,jj,1,jp_sal) + sfx(ji,jj) ) * r1_r au0 * tmask(ji,jj,1)316 zws0(ji,jj) = - ( ( emp(ji,jj)-rnf(ji,jj) ) * tsn(ji,jj,1,jp_sal) + sfx(ji,jj) ) * r1_rho0 * tmask(ji,jj,1) 317 317 ! Non radiative upwards surface buoyancy flux 318 318 zwb0(ji,jj) = grav * zthermal * zwth0(ji,jj) - grav * zbeta * zws0(ji,jj) … … 324 324 zwbav(ji,jj) = grav * zthermal * zwthav(ji,jj) - grav * zbeta * zwsav(ji,jj) 325 325 ! Surface upward velocity fluxes 326 zuw0(ji,jj) = -utau(ji,jj) * r1_r au0 * tmask(ji,jj,1)327 zvw0(ji,jj) = -vtau(ji,jj) * r1_r au0 * tmask(ji,jj,1)326 zuw0(ji,jj) = -utau(ji,jj) * r1_rho0 * tmask(ji,jj,1) 327 zvw0(ji,jj) = -vtau(ji,jj) * r1_rho0 * tmask(ji,jj,1) 328 328 ! Friction velocity (zustar), at T-point : LMD94 eq. 2 329 329 zustar(ji,jj) = MAX( SQRT( SQRT( zuw0(ji,jj) * zuw0(ji,jj) + zvw0(ji,jj) * zvw0(ji,jj) ) ), 1.0e-8 ) … … 455 455 & + 0.135 * zla(ji,jj) * zwstrl(ji,jj)**3/hbl(ji,jj) ) 456 456 457 zvel_max = - ( 1.0 + 1.0 * ( zwstrl(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird * rn_ rdt / hbl(ji,jj) ) &457 zvel_max = - ( 1.0 + 1.0 * ( zwstrl(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird * rn_Dt / hbl(ji,jj) ) & 458 458 & * zwb_ent(ji,jj) / ( zwstrl(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird 459 459 ! Entrainment including component due to shear turbulence. Modified Langmuir component, but gives same result for La=0.3 For testing uncomment. … … 461 461 ! & + ( 0.15 * ( 1.0 - EXP( -0.5 * zla(ji,jj) ) ) + 0.03 / zla(ji,jj)**2 ) * zustar(ji,jj)**3/hbl(ji,jj) ) 462 462 463 ! zvel_max = - ( 1.0 + 1.0 * ( zvstr(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird * rn_ rdt / zhbl(ji,jj) ) * zwb_ent(ji,jj) / &463 ! zvel_max = - ( 1.0 + 1.0 * ( zvstr(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird * rn_Dt / zhbl(ji,jj) ) * zwb_ent(ji,jj) / & 464 464 ! & ( zvstr(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird 465 465 zzdhdt = - zwb_ent(ji,jj) / ( zvel_max + MAX(zdb_bl(ji,jj),0.0) ) … … 472 472 IF ( zzdhdt < 0._wp ) THEN 473 473 ! For long timsteps factor in brackets slows the rapid collapse of the OSBL 474 zpert = 2.0 * ( 1.0 + 2.0 * zwstrl(ji,jj) * rn_ rdt / hbl(ji,jj) ) * zwstrl(ji,jj)**2 / hbl(ji,jj)474 zpert = 2.0 * ( 1.0 + 2.0 * zwstrl(ji,jj) * rn_Dt / hbl(ji,jj) ) * zwstrl(ji,jj)**2 / hbl(ji,jj) 475 475 ELSE 476 zpert = 2.0 * ( 1.0 + 2.0 * zwstrl(ji,jj) * rn_ rdt / hbl(ji,jj) ) * zwstrl(ji,jj)**2 / hbl(ji,jj) &476 zpert = 2.0 * ( 1.0 + 2.0 * zwstrl(ji,jj) * rn_Dt / hbl(ji,jj) ) * zwstrl(ji,jj)**2 / hbl(ji,jj) & 477 477 & + MAX( zdb_bl(ji,jj), 0.0 ) 478 478 ENDIF … … 487 487 ibld(:,:) = 3 488 488 489 zhbl_t(:,:) = hbl(:,:) + (zdhdt(:,:) - wn(ji,jj,ibld(ji,jj)))* rn_ rdt ! certainly need wb here, so subtract it489 zhbl_t(:,:) = hbl(:,:) + (zdhdt(:,:) - wn(ji,jj,ibld(ji,jj)))* rn_Dt ! certainly need wb here, so subtract it 490 490 zhbl_t(:,:) = MIN(zhbl_t(:,:), ht_n(:,:)) 491 zdhdt(:,:) = MIN(zdhdt(:,:), (zhbl_t(:,:) - hbl(:,:))/rn_ rdt + wn(ji,jj,ibld(ji,jj))) ! adjustment to represent limiting by ocean bottom491 zdhdt(:,:) = MIN(zdhdt(:,:), (zhbl_t(:,:) - hbl(:,:))/rn_Dt + wn(ji,jj,ibld(ji,jj))) ! adjustment to represent limiting by ocean bottom 492 492 493 493 DO jk = 4, jpkm1 … … 516 516 IF ( lconv(ji,jj) ) THEN 517 517 !unstable 518 zvel_max = - ( 1.0 + 1.0 * ( zvstr(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird * rn_ rdt / hbl(ji,jj) ) &518 zvel_max = - ( 1.0 + 1.0 * ( zvstr(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird * rn_Dt / hbl(ji,jj) ) & 519 519 & * zwb_ent(ji,jj) / ( zvstr(ji,jj)**3 + 0.5 * zwstrc(ji,jj)**3 )**pthird 520 520 … … 523 523 & - zbeta * ( zs_bl(ji,jj) - tsn(ji,jj,jm,jp_sal) ) ), 0.0 ) + zvel_max 524 524 525 zhbl_s = zhbl_s + MIN( - zwb_ent(ji,jj) / zdb * rn_ rdt / FLOAT(ibld(ji,jj)-imld(ji,jj) ), e3w_n(ji,jj,jk) )525 zhbl_s = zhbl_s + MIN( - zwb_ent(ji,jj) / zdb * rn_Dt / FLOAT(ibld(ji,jj)-imld(ji,jj) ), e3w_n(ji,jj,jk) ) 526 526 zhbl_s = MIN(zhbl_s, ht_n(ji,jj)) 527 527 … … 1327 1327 IF ( iom_use("us_x") ) CALL iom_put( "us_x", tmask(:,:,1)*zustke*zcos_wind ) ! x surface Stokes drift 1328 1328 IF ( iom_use("us_y") ) CALL iom_put( "us_y", tmask(:,:,1)*zustke*zsin_wind ) ! y surface Stokes drift 1329 IF ( iom_use("wind_wave_abs_power") ) CALL iom_put( "wind_wave_abs_power", 1000.*r au0*tmask(:,:,1)*zustar**2*zustke )1329 IF ( iom_use("wind_wave_abs_power") ) CALL iom_put( "wind_wave_abs_power", 1000.*rho0*tmask(:,:,1)*zustar**2*zustke ) 1330 1330 ! Stokes drift read in from sbcwave (=2). 1331 1331 CASE(2) 1332 1332 IF ( iom_use("us_x") ) CALL iom_put( "us_x", ut0sd ) ! x surface Stokes drift 1333 1333 IF ( iom_use("us_y") ) CALL iom_put( "us_y", vt0sd ) ! y surface Stokes drift 1334 IF ( iom_use("wind_wave_abs_power") ) CALL iom_put( "wind_wave_abs_power", 1000.*r au0*tmask(:,:,1)*zustar**2* &1334 IF ( iom_use("wind_wave_abs_power") ) CALL iom_put( "wind_wave_abs_power", 1000.*rho0*tmask(:,:,1)*zustar**2* & 1335 1335 & SQRT(ut0sd**2 + vt0sd**2 ) ) 1336 1336 END SELECT … … 1348 1348 IF ( iom_use("zwstrl") ) CALL iom_put( "zwstrl", tmask(:,:,1)*zwstrl ) ! Langmuir velocity scale 1349 1349 IF ( iom_use("zustar") ) CALL iom_put( "zustar", tmask(:,:,1)*zustar ) ! friction velocity scale 1350 IF ( iom_use("wind_power") ) CALL iom_put( "wind_power", 1000.*r au0*tmask(:,:,1)*zustar**3 ) ! BL depth internal to zdf_osm routine1351 IF ( iom_use("wind_wave_power") ) CALL iom_put( "wind_wave_power", 1000.*r au0*tmask(:,:,1)*zustar**2*zustke )1350 IF ( iom_use("wind_power") ) CALL iom_put( "wind_power", 1000.*rho0*tmask(:,:,1)*zustar**3 ) ! BL depth internal to zdf_osm routine 1351 IF ( iom_use("wind_wave_power") ) CALL iom_put( "wind_wave_power", 1000.*rho0*tmask(:,:,1)*zustar**2*zustke ) 1352 1352 IF ( iom_use("zhbl") ) CALL iom_put( "zhbl", tmask(:,:,1)*zhbl ) ! BL depth internal to zdf_osm routine 1353 1353 IF ( iom_use("zhml") ) CALL iom_put( "zhml", tmask(:,:,1)*zhml ) ! ML depth internal to zdf_osm routine … … 1584 1584 imld_rst(:,:) = nlb10 ! Initialization to the number of w ocean point 1585 1585 hbl(:,:) = 0._wp ! here hbl used as a dummy variable, integrating vertically N^2 1586 zN2_c = grav * rho_c * r1_r au0 ! convert density criteria into N^2 criteria1586 zN2_c = grav * rho_c * r1_rho0 ! convert density criteria into N^2 criteria 1587 1587 ! 1588 1588 hbl(:,:) = 0._wp ! here hbl used as a dummy variable, integrating vertically N^2 -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/ZDF/zdfric.F90
r9598 r9939 181 181 DO jj = 2, jpjm1 !* Ekman depth 182 182 DO ji = 2, jpim1 183 zustar = SQRT( taum(ji,jj) * r1_r au0 )183 zustar = SQRT( taum(ji,jj) * r1_rho0 ) 184 184 zhek = rn_ekmfc * zustar / ( ABS( ff_t(ji,jj) ) + rsmall ) ! Ekman depth 185 185 zh_ekm(ji,jj) = MAX( rn_mldmin , MIN( zhek , rn_mldmax ) ) ! set allowed range -
NEMO/branches/2018/dev_r9838_ENHANCE04_RK3/src/OCE/ZDF/zdftke.F90
r9598 r9939 195 195 REAL(wp) :: zrhoa = 1.22 ! Air density kg/m3 196 196 REAL(wp) :: zcdrag = 1.5e-3 ! drag coefficient 197 REAL(wp) :: zbbr au, zri ! local scalars197 REAL(wp) :: zbbrho, zri ! local scalars 198 198 REAL(wp) :: zfact1, zfact2, zfact3 ! - - 199 199 REAL(wp) :: ztx2 , zty2 , zcof ! - - … … 206 206 !!-------------------------------------------------------------------- 207 207 ! 208 zbbr au = rn_ebb / rau0 ! Local constant initialisation209 zfact1 = -.5_wp * r dt210 zfact2 = 1.5_wp * r dt * rn_ediss211 zfact3 = 0.5_wp * rn_ediss208 zbbrho = rn_ebb * r1_rho0 ! Local constant initialisation 209 zfact1 = -.5_wp * rn_Dt 210 zfact2 = 1.5_wp * rn_Dt * rn_ediss 211 zfact3 = 0.5_wp * rn_ediss 212 212 ! 213 213 ! !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< … … 215 215 ! !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 216 216 217 DO jj = 2, jpjm1 ! en(1) = rn_ebb taum / r au0 (min value rn_emin0)217 DO jj = 2, jpjm1 ! en(1) = rn_ebb taum / rho0 (min value rn_emin0) 218 218 DO ji = fs_2, fs_jpim1 ! vector opt. 219 en(ji,jj,1) = MAX( rn_emin0, zbbr au* taum(ji,jj) ) * tmask(ji,jj,1)219 en(ji,jj,1) = MAX( rn_emin0, zbbrho * taum(ji,jj) ) * tmask(ji,jj,1) 220 220 END DO 221 221 END DO … … 232 232 ! !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 233 233 ! 234 ! en(bot) = (ebb0/r au0)*0.5*sqrt(u_botfr^2+v_botfr^2) (min value rn_emin)234 ! en(bot) = (ebb0/rho0)*0.5*sqrt(u_botfr^2+v_botfr^2) (min value rn_emin) 235 235 ! where ebb0 does not includes surface wave enhancement (i.e. ebb0=3.75) 236 236 ! Note that stress averaged is done using an wet-only calculation of u and v at t-point like in zdfsh2 … … 242 242 zmsku = ( 2. - umask(ji-1,jj,mbkt(ji,jj)) * umask(ji,jj,mbkt(ji,jj)) ) 243 243 zmskv = ( 2. - vmask(ji,jj-1,mbkt(ji,jj)) * vmask(ji,jj,mbkt(ji,jj)) ) 244 ! ! where 0.001875 = (rn_ebb0/r au0) * 0.5 = 3.75*0.5/1000. (CAUTION CdU<0)244 ! ! where 0.001875 = (rn_ebb0/rho0) * 0.5 = 3.75*0.5/1000. (CAUTION CdU<0) 245 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 246 & + ( zmskv*( vb(ji,jj,mbkt(ji,jj))+vb(ji,jj-1,mbkt(ji,jj)) ) )**2 ) … … 253 253 zmsku = ( 2. - umask(ji-1,jj,mikt(ji,jj)) * umask(ji,jj,mikt(ji,jj)) ) 254 254 zmskv = ( 2. - vmask(ji,jj-1,mikt(ji,jj)) * vmask(ji,jj,mikt(ji,jj)) ) 255 ! ! where 0.001875 = (rn_ebb0/r au0) * 0.5 = 3.75*0.5/1000. (CAUTION CdU<0)255 ! ! where 0.001875 = (rn_ebb0/rho0) * 0.5 = 3.75*0.5/1000. (CAUTION CdU<0) 256 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 257 & + ( zmskv*( vb(ji,jj,mikt(ji,jj))+vb(ji,jj-1,mikt(ji,jj)) ) )**2 ) … … 298 298 zwlc = zind * rn_lc * zus * SIN( rpi * pdepw(ji,jj,jk) / zhlc(ji,jj) ) 299 299 ! ! TKE Langmuir circulation source term 300 en(ji,jj,jk) = en(ji,jj,jk) + r dt * MAX(0.,1._wp - 4.*fr_i(ji,jj) ) * ( zwlc * zwlc * zwlc ) &301 & / zhlc(ji,jj) * wmask(ji,jj,jk) * tmask(ji,jj,1)300 en(ji,jj,jk) = en(ji,jj,jk) + rn_Dt * MAX(0.,1._wp - 4.*fr_i(ji,jj) ) * ( zwlc * zwlc * zwlc ) & 301 & / zhlc(ji,jj) * wmask(ji,jj,jk) * tmask(ji,jj,1) 302 302 END DO 303 303 END DO … … 342 342 ! 343 343 ! ! right hand side in en 344 en(ji,jj,jk) = en(ji,jj,jk) + r dt * ( p_sh2(ji,jj,jk) & ! shear345 & - p_avt(ji,jj,jk) * rn2(ji,jj,jk) & ! stratification346 & + zfact3 * dissl(ji,jj,jk) * en(ji,jj,jk) & ! dissipation347 & ) * wmask(ji,jj,jk)344 en(ji,jj,jk) = en(ji,jj,jk) + rn_Dt * ( p_sh2(ji,jj,jk) & ! shear 345 & - p_avt(ji,jj,jk) * rn2(ji,jj,jk) & ! stratification 346 & + zfact3 * dissl(ji,jj,jk) * en(ji,jj,jk) & ! dissipation 347 & ) * wmask(ji,jj,jk) 348 348 END DO 349 349 END DO … … 422 422 zdif = taum(ji,jj) - ztau ! mean of modulus - modulus of the mean 423 423 zdif = rhftau_scl * MAX( 0._wp, zdif + rhftau_add ) ! apply some modifications... 424 en(ji,jj,jk) = en(ji,jj,jk) + zbbr au* zdif * EXP( -pdepw(ji,jj,jk) / htau(ji,jj) ) &424 en(ji,jj,jk) = en(ji,jj,jk) + zbbrho * zdif * EXP( -pdepw(ji,jj,jk) / htau(ji,jj) ) & 425 425 & * MAX(0.,1._wp - rn_eice *fr_i(ji,jj) ) * wmask(ji,jj,jk) * tmask(ji,jj,1) 426 426 END DO … … 473 473 ! 474 474 INTEGER :: ji, jj, jk ! dummy loop indices 475 REAL(wp) :: zrn2, zr aug, zcoef, zav ! local scalars475 REAL(wp) :: zrn2, zrhog, zcoef, zav ! local scalars 476 476 REAL(wp) :: zdku, zdkv, zsqen ! - - 477 477 REAL(wp) :: zemxl, zemlm, zemlp ! - - … … 489 489 zmxld(:,:,:) = rmxl_min 490 490 ! 491 IF( ln_mxl0 ) THEN ! surface mixing length = F(stress) : l=vkarmn*2.e5*taum/(r au0*g)492 zr aug = vkarmn * 2.e5_wp / ( rau0 * grav )491 IF( ln_mxl0 ) THEN ! surface mixing length = F(stress) : l=vkarmn*2.e5*taum/(rho0*g) 492 zrhog = vkarmn * 2.e5_wp / ( rho0 * grav ) 493 493 DO jj = 2, jpjm1 494 494 DO ji = fs_2, fs_jpim1 495 zmxlm(ji,jj,1) = MAX( rn_mxl0, zr aug * taum(ji,jj) * tmask(ji,jj,1) )495 zmxlm(ji,jj,1) = MAX( rn_mxl0, zrhog * taum(ji,jj) * tmask(ji,jj,1) ) 496 496 END DO 497 497 END DO
Note: See TracChangeset
for help on using the changeset viewer.