This subroutine contains the entirety of the SAMF deep convection scheme. More...
For grid sizes larger than threshold value, as in [28], the SAMF deep convection scheme can be described in terms of three types of "controls": static, dynamic, and feedback. The static control component consists of the simple entraining/detraining updraft/downdraft cloud model and is used to determine the cloud properties, convective precipitation, as well as the convective cloud top height. The dynamic control is the determination of the potential energy available for convection to "consume", or how primed the large-scale environment is for convection to occur due to changes by the dyanmics of the host model. The feedback control is the determination of how the parameterized convection changes the large-scale environment (the host model state variables) given the changes to the state variables per unit cloud base mass flux calculated in the static control portion and the deduced cloud base mass flux determined from the dynamic control.
For grid sizes smaller than threshold value, the cloud base mass flux in the SAMF scheme is determined by the cumulus updraft velocity averaged over the whole cloud depth ([33] ),which in turn, determines changes of the large-scale environment due to the cumulus convection.
local_name | standard_name | long_name | units | rank | type | kind | intent | optional |
---|---|---|---|---|---|---|---|---|
im | horizontal_loop_extent | horizontal loop extent | count | 0 | integer | in | F | |
ix | horizontal_dimension | horizontal dimension | count | 0 | integer | in | F | |
km | vertical_dimension | vertical layer dimension | count | 0 | integer | in | F | |
delt | time_step_for_physics | physics time step | s | 0 | real | kind_phys | in | F |
delp | air_pressure_difference_between_midlayers | pres(k) - pres(k+1) | Pa | 2 | real | kind_phys | in | F |
prslp | air_pressure | mean layer pressure | Pa | 2 | real | kind_phys | in | F |
psp | surface_air_pressure | surface pressure | Pa | 1 | real | kind_phys | in | F |
phil | geopotential | layer geopotential | m2 s-2 | 2 | real | kind_phys | in | F |
ql1 | cloud_ice_specific_humidity | cloud ice specific humidity | kg kg-1 | 2 | real | kind_phys | inout | F |
ql2 | cloud_liquid_water_specific_humidity | cloud water specific humidity | kg kg-1 | 2 | real | kind_phys | inout | F |
q1 | water_vapor_specific_humidity_updated_by_physics | updated vapor specific humidity | kg kg-1 | 2 | real | kind_phys | inout | F |
t1 | air_temperature_updated_by_physics | updated temperature | K | 2 | real | kind_phys | inout | F |
u1 | x_wind_updated_by_physics | updated x-direction wind | m s-1 | 2 | real | kind_phys | inout | F |
v1 | y_wind_updated_by_physics | updated y-direction wind | m s-1 | 2 | real | kind_phys | inout | F |
cldwrk | cloud_work_function | cloud work function | m2 s-2 | 1 | real | kind_phys | out | F |
rn | lwe_thickness_of_deep_convective_precipitation_amount | deep convective rainfall amount on physics timestep | m | 1 | real | kind_phys | out | F |
kbot | vertical_index_at_cloud_base | index for cloud base | index | 1 | integer | out | F | |
ktop | vertical_index_at_cloud_top | index for cloud top | index | 1 | integer | out | F | |
kcnv | flag_deep_convection | deep convection: 0=no, 1=yes | flag | 1 | integer | out | F | |
islimsk | sea_land_ice_mask | landmask: sea/land/ice=0/1/2 | flag | 1 | integer | in | F | |
garea | cell_area | grid cell area | m2 | 1 | real | kind_phys | in | F |
dot | omega | layer mean vertical velocity | Pa s-1 | 2 | real | kind_phys | in | F |
ncloud | number_of_hydrometeors | number of hydrometeors | count | 0 | integer | in | F | |
ud_mf | instantaneous_atmosphere_updraft_convective_mass_flux | (updraft mass flux) * delt | kg m-2 | 2 | real | kind_phys | out | F |
dd_mf | instantaneous_atmosphere_downdraft_convective_mass_flux | (downdraft mass flux) * delt | kg m-2 | 2 | real | kind_phys | out | F |
dt_mf | instantaneous_atmosphere_detrainment_convective_mass_flux | (detrainment mass flux) * delt | kg m-2 | 2 | real | kind_phys | out | F |
cnvw | convective_cloud_water_specific_humidity | convective cloud water | kg kg-1 | 2 | real | kind_phys | out | F |
cnvc | convective_cloud_cover | convective cloud cover | frac | 2 | real | kind_phys | out | F |
errmsg | error_message | error message for error handling in CCPP | none | 0 | character | len=* | out | F |
errflg | error_flag | error flag for error handling in CCPP | flag | 0 | integer | out | F |
Functions/Subroutines | |
subroutine | sasas_deep::sasas_deep_run (im, ix, km, delt, delp, prslp, psp, phil, ql1, ql2, q1, t1, u1, v1, cldwrk, rn, kbot, ktop, kcnv, islimsk, garea, dot, ncloud, ud_mf, dd_mf, dt_mf, cnvw, cnvc, errmsg, errflg) |
subroutine sasas_deep::sasas_deep_run | ( | integer, intent(in) | im, |
integer, intent(in) | ix, | ||
integer, intent(in) | km, | ||
real(kind=kind_phys), intent(in) | delt, | ||
real(kind=kind_phys), dimension(ix,km), intent(in) | delp, | ||
real(kind=kind_phys), dimension(ix,km), intent(in) | prslp, | ||
real(kind=kind_phys), dimension(im), intent(in) | psp, | ||
real(kind=kind_phys), dimension(ix,km), intent(in) | phil, | ||
real(kind=kind_phys), dimension(ix,km), intent(inout) | ql1, | ||
real(kind=kind_phys), dimension(ix,km), intent(inout) | ql2, | ||
real(kind=kind_phys), dimension(ix,km), intent(inout) | q1, | ||
real(kind=kind_phys), dimension(ix,km), intent(inout) | t1, | ||
real(kind=kind_phys), dimension(ix,km), intent(inout) | u1, | ||
real(kind=kind_phys), dimension(ix,km), intent(inout) | v1, | ||
real(kind=kind_phys), dimension(im), intent(out) | cldwrk, | ||
real(kind=kind_phys), dimension(im), intent(out) | rn, | ||
integer, dimension(im), intent(out) | kbot, | ||
integer, dimension(im), intent(out) | ktop, | ||
integer, dimension(im), intent(out) | kcnv, | ||
integer, dimension(im), intent(in) | islimsk, | ||
real(kind=kind_phys), dimension(im), intent(in) | garea, | ||
real(kind=kind_phys), dimension(ix,km), intent(in) | dot, | ||
integer, intent(in) | ncloud, | ||
real(kind=kind_phys), dimension(im,km), intent(out) | ud_mf, | ||
real(kind=kind_phys), dimension(im,km), intent(out) | dd_mf, | ||
real(kind=kind_phys), dimension(im,km), intent(out) | dt_mf, | ||
real(kind=kind_phys), dimension(ix,km), intent(out) | cnvw, | ||
real(kind=kind_phys), dimension(ix,km), intent(out) | cnvc, | ||
character(len=*), intent(out) | errmsg, | ||
integer, intent(out) | errflg | ||
) |
\[ \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 [28] equation B.10 using B.2 and B.3 of [3] 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]\).\[ \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.\[ \frac{\partial A}{\partial t}_{LS}=\frac{A^+-cA^0}{\Delta t_{LS}} \]
Here \(A^0\) is set to zero following [33] , 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 [66]
\[ 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.