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().