subroutine samfdeepcnv::samfdeepcnv_run | ( | integer, intent(in) | im, |
integer, intent(in) | km, | ||
integer, intent(in) | itc, | ||
integer, intent(in) | ntc, | ||
real(kind=kind_phys), intent(in) | cliq, | ||
real(kind=kind_phys), intent(in) | cp, | ||
real(kind=kind_phys), intent(in) | cvap, | ||
real(kind=kind_phys), intent(in) | eps, | ||
real(kind=kind_phys), intent(in) | epsm1, | ||
real(kind=kind_phys), intent(in) | fv, | ||
real(kind=kind_phys), intent(in) | grav, | ||
real(kind=kind_phys), intent(in) | hvap, | ||
real(kind=kind_phys), intent(in) | rd, | ||
real(kind=kind_phys), intent(in) | rv, | ||
real(kind=kind_phys), intent(in) | t0c, | ||
real(kind=kind_phys), intent(in) | delt, | ||
integer, intent(in) | ntk, | ||
integer, intent(in) | ntr, | ||
real(kind=kind_phys), dimension(:,:), intent(in) | delp, | ||
real(kind=kind_phys), dimension(:,:), intent(in) | prslp, | ||
real(kind=kind_phys), dimension(:), intent(in) | psp, | ||
real(kind=kind_phys), dimension(:,:), intent(in) | phil, | ||
real(kind=kind_phys), dimension(:,:,:), intent(inout) | qtr, | ||
real(kind=kind_phys), dimension(:,:), intent(inout) | q1, | ||
real(kind=kind_phys), dimension(:,:), intent(inout) | t1, | ||
real(kind=kind_phys), dimension(:,:), intent(inout) | u1, | ||
real(kind=kind_phys), dimension(:,:), intent(inout) | v1, | ||
real(kind=kind_phys), dimension(:), intent(in) | fscav, | ||
logical, intent(in) | hwrf_samfdeep, | ||
real(kind=kind_phys), dimension(:), intent(out) | cldwrk, | ||
real(kind=kind_phys), dimension(:), intent(out) | rn, | ||
integer, dimension(:), intent(out) | kbot, | ||
integer, dimension(:), intent(out) | ktop, | ||
integer, dimension(:), intent(inout) | kcnv, | ||
integer, dimension(:), intent(in) | islimsk, | ||
real(kind=kind_phys), dimension(:), intent(in) | garea, | ||
real(kind=kind_phys), dimension(:,:), intent(in) | dot, | ||
integer, intent(in) | ncloud, | ||
real(kind=kind_phys), dimension(:), intent(in) | hpbl, | ||
real(kind=kind_phys), dimension(:,:), intent(out) | ud_mf, | ||
real(kind=kind_phys), dimension(:,:), intent(out) | dd_mf, | ||
real(kind=kind_phys), dimension(:,:), intent(out) | dt_mf, | ||
real(kind=kind_phys), dimension(:,:), intent(inout) | cnvw, | ||
real(kind=kind_phys), dimension(:,:), intent(inout) | cnvc, | ||
real(kind=kind_phys), dimension(:,:), intent(inout) | QLCN, | ||
real(kind=kind_phys), dimension(:,:), intent(inout) | QICN, | ||
real(kind=kind_phys), dimension(:,:), intent(inout) | w_upi, | ||
real(kind=kind_phys), dimension(:,:), intent(inout) | cf_upi, | ||
real(kind=kind_phys), dimension(:,:), intent(inout) | CNV_MFD, | ||
real(kind=kind_phys), dimension(:,:), intent(inout) | CNV_DQLDT, | ||
real(kind=kind_phys), dimension(:,:), intent(inout) | CLCN, | ||
real(kind=kind_phys), dimension(:,:), intent(inout) | CNV_FICE, | ||
real(kind=kind_phys), dimension(:,:), intent(inout) | CNV_NDROP, | ||
real(kind=kind_phys), dimension(:,:), intent(inout) | CNV_NICE, | ||
integer, intent(in) | mp_phys, | ||
integer, intent(in) | mp_phys_mg, | ||
real(kind=kind_phys), intent(in) | clam, | ||
real(kind=kind_phys), intent(in) | c0s, | ||
real(kind=kind_phys), intent(in) | c1, | ||
real(kind=kind_phys), intent(in) | betal, | ||
real(kind=kind_phys), intent(in) | betas, | ||
real(kind=kind_phys), intent(in) | evef, | ||
real(kind=kind_phys), intent(in) | pgcon, | ||
real(kind=kind_phys), intent(in) | asolfac, | ||
logical, intent(in) | do_ca, | ||
logical, intent(in) | ca_closure, | ||
logical, intent(in) | ca_entr, | ||
logical, intent(in) | ca_trigger, | ||
real(kind=kind_phys), intent(in) | nthresh, | ||
real(kind=kind_phys), dimension(:), intent(in) | ca_deep, | ||
real(kind=kind_phys), dimension(:), intent(out) | rainevap, | ||
character(len=*), intent(out) | errmsg, | ||
integer, intent(out) | errflg | ||
) |
Initialize column-integrated and other single-value-per-column variable arrays.
Search below index "kbm" and above kb1 for the level of maximum moist static energy.
\epsilon = \epsilon_0F_0 + d_1\left(1-RH\right)F_1
where \epsilon_0 is the cloud base entrainment rate, d_1 is a tunable constant, and F_0=\left(\frac{q_s}{q_{s,b}}\right)^2 and F_1=\left(\frac{q_s}{q_{s,b}}\right)^3 where q_s and q_{s,b} are the saturation specific humidities at a given level and cloud base, respectively. The detrainment rate in the cloud is assumed to be equal to the entrainment rate at cloud base.\frac{1}{\eta}\frac{\partial \eta}{\partial z} = \lambda_e - \lambda_d
where \eta is the normalized mass flux, \lambda_e is the entrainment rate and \lambda_d is the detrainment rate.A_u=\int_{z_0}^{z_t}\frac{g}{c_pT(z)}\frac{\eta}{1 + \gamma}[h(z)-h^*(z)]dz
(discretized according to Grell (1993) [74] equation B.10 using B.2 and B.3 of Arakawa and Schubert (1974) [6] and assuming \eta=1) where A_u is the updraft cloud work function, z_0 and z_t are cloud base and cloud top, respectively, \gamma = \frac{L}{c_p}\left(\frac{\partial \overline{q_s}}{\partial T}\right)_p and other quantities are previously defined.E = 1.591 - 0.639\frac{\Delta V}{\Delta z} + 0.0953\left(\frac{\Delta V}{\Delta z}\right)^2 - 0.00496\left(\frac{\Delta V}{\Delta z}\right)^3
where \Delta V is the integrated horizontal shear over the cloud depth, \Delta z, (the ratio is converted to units of 10^{-3} s^{-1}). The variable "edto" is 1-E and is constrained to the range [0,0.9].Next, calculate the variable detrainment rate between the surface and the LFC according to:
\lambda_d = \frac{1-\beta^{\frac{1}{k_{LFC}}}}{\overline{\Delta z}}
\lambda_d is the detrainment rate, \beta is a constant currently set to 0.05, implying that only 5% of downdraft mass flux at LFC reaches the ground surface due to detrainment, k_{LFC} is the vertical index of the LFC level, and \overline{\Delta z} is the average vertical grid spacing below the LFC.
As before, recalculate the updraft cloud work function.
\frac{\partial A}{\partial t}_{LS}=\frac{A^+-cA^0}{\Delta t_{LS}}
Here A^0 is set to zero following Han et al.'s (2017) [80] , implying that the instability is completely eliminated after the convective adjustment time, \Delta t_{LS}.\frac{\partial A}{\partial t}_{cu}=\frac{A^*-A^+}{\Delta t_{cu}}
\Delta t_{cu} is the short timescale of the convection.The cloud base mass flux (xmb) is then calculated from equation 7 of Pan and Wu (1995) [152]
M_c=\frac{-\frac{\partial A}{\partial t}_{LS}}{\frac{\partial A}{\partial t}_{cu}}
Again when dtconv is larger than tauadv, the cloud base mass flux is further reduced in proportion to the ratio of tauadv to dtconv.
Recalculate saturation specific humidity using the updated temperature.
References scale().