subroutine satmedmfvdifq::satmedmfvdifq_run | ( | integer, intent(in) | im, |
integer, intent(in) | km, | ||
integer, intent(in) | ntrac, | ||
integer, intent(in) | ntcw, | ||
integer, intent(in) | ntrw, | ||
integer, intent(in) | ntiw, | ||
integer, intent(in) | ntke, | ||
real(kind=kind_phys), intent(in) | grav, | ||
real(kind=kind_phys), intent(in) | rd, | ||
real(kind=kind_phys), intent(in) | cp, | ||
real(kind=kind_phys), intent(in) | rv, | ||
real(kind=kind_phys), intent(in) | hvap, | ||
real(kind=kind_phys), intent(in) | hfus, | ||
real(kind=kind_phys), intent(in) | fv, | ||
real(kind=kind_phys), intent(in) | eps, | ||
real(kind=kind_phys), intent(in) | epsm1, | ||
real(kind=kind_phys), dimension(:,:), intent(inout) | dv, | ||
real(kind=kind_phys), dimension(:,:), intent(inout) | du, | ||
real(kind=kind_phys), dimension(:,:), intent(inout) | tdt, | ||
real(kind=kind_phys), dimension(:,:,:), intent(inout) | rtg, | ||
real(kind=kind_phys), dimension(:,:), intent(in) | u1, | ||
real(kind=kind_phys), dimension(:,:), intent(in) | v1, | ||
real(kind=kind_phys), dimension(:,:), intent(in) | t1, | ||
real(kind=kind_phys), dimension(:,:,:), intent(in) | q1, | ||
real(kind=kind_phys), dimension(:,:), intent(in) | swh, | ||
real(kind=kind_phys), dimension(:,:), intent(in) | hlw, | ||
real(kind=kind_phys), dimension(:), intent(in) | xmu, | ||
real(kind=kind_phys), dimension(:), intent(in) | garea, | ||
real(kind=kind_phys), dimension(:), intent(in) | zvfun, | ||
real(kind=kind_phys), dimension(:), intent(in) | sigmaf, | ||
real(kind=kind_phys), dimension(:), intent(in) | psk, | ||
real(kind=kind_phys), dimension(:), intent(in) | rbsoil, | ||
real(kind=kind_phys), dimension(:), intent(in) | zorl, | ||
real(kind=kind_phys), dimension(:), intent(in) | u10m, | ||
real(kind=kind_phys), dimension(:), intent(in) | v10m, | ||
real(kind=kind_phys), dimension(:), intent(in) | fm, | ||
real(kind=kind_phys), dimension(:), intent(in) | fh, | ||
real(kind=kind_phys), dimension(:), intent(in) | tsea, | ||
real(kind=kind_phys), dimension(:), intent(in) | heat, | ||
real(kind=kind_phys), dimension(:), intent(in) | evap, | ||
real(kind=kind_phys), dimension(:), intent(in) | stress, | ||
real(kind=kind_phys), dimension(:), intent(in) | spd1, | ||
integer, dimension(:), intent(out) | kpbl, | ||
real(kind=kind_phys), dimension(:,:), intent(in) | prsi, | ||
real(kind=kind_phys), dimension(:,:), intent(in) | del, | ||
real(kind=kind_phys), dimension(:,:), intent(in) | prsl, | ||
real(kind=kind_phys), dimension(:,:), intent(in) | prslk, | ||
real(kind=kind_phys), dimension(:,:), intent(in) | phii, | ||
real(kind=kind_phys), dimension(:,:), intent(in) | phil, | ||
real(kind=kind_phys), intent(in) | delt, | ||
logical, intent(in) | dspheat, | ||
real(kind=kind_phys), dimension(:), intent(out) | dusfc, | ||
real(kind=kind_phys), dimension(:), intent(out) | dvsfc, | ||
real(kind=kind_phys), dimension(:), intent(out) | dtsfc, | ||
real(kind=kind_phys), dimension(:), intent(out) | dqsfc, | ||
real(kind=kind_phys), dimension(:), intent(out) | hpbl, | ||
real(kind=kind_phys), dimension(:,:), intent(out) | dkt, | ||
real(kind=kind_phys), dimension(:,:), intent(out) | dku, | ||
integer, dimension(:), intent(in) | kinver, | ||
real(kind=kind_phys), intent(in) | xkzm_m, | ||
real(kind=kind_phys), intent(in) | xkzm_h, | ||
real(kind=kind_phys), intent(in) | xkzm_s, | ||
real(kind=kind_phys), intent(in) | dspfac, | ||
real(kind=kind_phys), intent(in) | bl_upfr, | ||
real(kind=kind_phys), intent(in) | bl_dnfr, | ||
real(kind=kind_phys), intent(in) | rlmx, | ||
real(kind=kind_phys), intent(in) | elmx, | ||
integer, intent(in) | sfc_rlm, | ||
integer, intent(in) | tc_pbl, | ||
integer, intent(in) | ntqv, | ||
real(kind=kind_phys), dimension(:,:,:), intent(inout) | dtend, | ||
integer, dimension(:,:), intent(in) | dtidx, | ||
integer, intent(in) | index_of_temperature, | ||
integer, intent(in) | index_of_x_wind, | ||
integer, intent(in) | index_of_y_wind, | ||
integer, intent(in) | index_of_process_pbl, | ||
logical, intent(in) | gen_tend, | ||
logical, intent(in) | ldiag3d, | ||
character(len=*), intent(out) | errmsg, | ||
integer, intent(out) | errflg | ||
) |
satmedmfvdifq_run() computes subgrid vertical turbulence mixing using the scale-aware TKE-based moist eddy-diffusion mass-flux (EDMF) parameterization of Han and Bretherton (2019) [80] .
zi
and zl
)gdx
)tke
and tkeh
)The calculation of the boundary layer height follows Troen and Mahrt (1986) [190] section 3. The approach is to find the level in the column where a modified bulk Richardson number exceeds a critical value.
\[ Rb_{cr}=0.16(10^{-7}R_{0})^{-0.18} \]
\[ R_{0}=\frac{U_{10}}{f_{0}z_{0}} \]
where \(U_{10}\) is the wind speed at 10m above the ground surface, \(f_0\) the Coriolis parameter, and \(z_{0}\) the surface roughness length. To avoid too much variation, we restrict \(Rb_{cr}\) to vary within the range of 0.15~0.35Compute \(\frac{\Delta t}{\Delta z}\) , \(u_*\)
\[ \zeta = Ri_{sfc}\frac{F_m^2}{F_h} = \frac{z}{L} \]
where \(F_m\) and \(F_h\) are surface Monin-Obukhov stability functions calculated in sfc_diff.f and \(L\) is the Obukhov length.Calculate the nondimensional gradients of momentum and temperature ( \(\phi_m\) (phim) and \(\phi_h\)(phih)) are calculated using eqns 5 and 6 from Hong and Pan (1996) [95] depending on the surface layer stability:
\[ \phi_m=(1-16\frac{0.1h}{L})^{-1/4} \phi_h=(1-16\frac{0.1h}{L})^{-1/2} \]
\[ \phi_m=\phi_t=(1+5\frac{0.1h}{L}) \]
The \(z/L\) (zol) is used as the stability criterion for the PBL.Currently, strong unstable (convective) PBL for \(z/L < -0.02\) and weakly and moderately unstable PBL for \(0>z/L>-0.02\)
\[ w_s=(u_*^3+7\alpha\kappa w_*^3)^{1/3} \]
where \(u_*\) (ustar) is the surface friction velocity, \(\alpha\) is the ratio of the surface layer height to the PBL height (specified as sfcfrac =0.1), \(\kappa =0.4\) is the von Karman constant, and \(w_*\) is the convective velocity scale defined as eqn23 of Han et al.(2019):\[ w_{*}=[(g/T)\overline{(w'\theta_v^{'})}_0h]^{1/3} \]
Starting at the PBL top and going downward, if the level is less than the cloud top, find the level of the minimum radiative heating rate wihin the cloud. If the level of the minimum is the lowest model level or the minimum radiative heating rate is positive, then set scuflg to F.
Call mfpbltq(), which is an EDMF parameterization (Siebesma et al.(2007) [178]) to take into account nonlocal transport by large eddies. For details of the mfpbltq subroutine, step into its documentation ::mfpbltq
\[ l_2=min(l_{up},l_{down}) \]
and dissipation length scale \(l_d\) is given by:\[ l_d=(l_{up}l_{down})^{1/2} \]
where \(l_{up}\) and \(l_{down}\) are the distances that a parcel having an initial TKE can travel upward and downward before being stopped by buoyancy effects.Compute buoyancy and shear productions of TKE
References mfpbltq_mod::mfpbltq(), mfscuq_mod::mfscuq(), tridi_mod::tridi2(), tridi_mod::tridin(), and tridi_mod::tridit().