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) | 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) | 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 | ||
) |
local_name | standard_name | long_name | units | type | dimensions | kind | intent |
---|---|---|---|---|---|---|---|
im | horizontal_loop_extent | horizontal loop extent | count | integer | () | in | |
km | vertical_layer_dimension | vertical layer dimension | count | integer | () | in | |
ntrac | number_of_vertical_diffusion_tracers | number of tracers to diffuse vertically | count | integer | () | in | |
ntcw | index_for_liquid_cloud_condensate_vertical_diffusion_tracer | tracer index for cloud condensate (or liquid water) | index | integer | () | in | |
ntrw | index_for_rain_water_vertical_diffusion_tracer | tracer index for rain water in the vertically diffused tracer array | index | integer | () | in | |
ntiw | index_for_ice_cloud_condensate_vertical_diffusion_tracer | tracer index for ice water in the vertically diffused tracer array | index | integer | () | in | |
ntke | index_for_turbulent_kinetic_energy_vertical_diffusion_tracer | index for turbulent kinetic energy in the vertically diffused tracer array | index | integer | () | in | |
grav | gravitational_acceleration | gravitational acceleration | m s-2 | real | () | kind_phys | in |
rd | gas_constant_of_dry_air | ideal gas constant for dry air | J kg-1 K-1 | real | () | kind_phys | in |
cp | specific_heat_of_dry_air_at_constant_pressure | specific heat of dry air at constant pressure | J kg-1 K-1 | real | () | kind_phys | in |
rv | gas_constant_water_vapor | ideal gas constant for water vapor | J kg-1 K-1 | real | () | kind_phys | in |
hvap | latent_heat_of_vaporization_of_water_at_0c | latent heat of evaporation/sublimation | J kg-1 | real | () | kind_phys | in |
hfus | latent_heat_of_fusion_of_water_at_0c | latent heat of fusion | J kg-1 | real | () | kind_phys | in |
fv | ratio_of_vapor_to_dry_air_gas_constants_minus_one | (rv/rd) - 1 (rv = ideal gas constant for water vapor) | none | real | () | kind_phys | in |
eps | ratio_of_dry_air_to_water_vapor_gas_constants | rd/rv | none | real | () | kind_phys | in |
epsm1 | ratio_of_dry_air_to_water_vapor_gas_constants_minus_one | (rd/rv) - 1 | none | real | () | kind_phys | in |
dv | process_split_cumulative_tendency_of_y_wind | updated tendency of the y wind | m s-2 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | inout |
du | process_split_cumulative_tendency_of_x_wind | updated tendency of the x wind | m s-2 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | inout |
tdt | process_split_cumulative_tendency_of_air_temperature | updated tendency of the temperature | K s-1 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | inout |
rtg | tendency_of_vertically_diffused_tracer_concentration | updated tendency of the tracers due to vertical diffusion in PBL scheme | kg kg-1 s-1 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension, ccpp_constant_one:number_of_vertical_diffusion_tracers) | kind_phys | inout |
u1 | x_wind | x component of layer wind | m s-1 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | in |
v1 | y_wind | y component of layer wind | m s-1 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | in |
t1 | air_temperature | layer mean air temperature | K | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | in |
q1 | vertically_diffused_tracer_concentration | tracer concentration diffused by PBL scheme | kg kg-1 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension, ccpp_constant_one:number_of_vertical_diffusion_tracers) | kind_phys | in |
swh | tendency_of_air_temperature_due_to_shortwave_heating_on_radiation_timestep | total sky shortwave heating rate | K s-1 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | in |
hlw | tendency_of_air_temperature_due_to_longwave_heating_on_radiation_timestep | total sky longwave heating rate | K s-1 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | in |
xmu | zenith_angle_temporal_adjustment_factor_for_shortwave_fluxes | zenith angle temporal adjustment factor for shortwave | none | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
garea | cell_area | area of the grid cell | m2 | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
zvfun | function_of_surface_roughness_length_and_green_vegetation_fraction | function of surface roughness length and green vegetation fraction | none | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
psk | surface_dimensionless_exner_function | dimensionless Exner function at the surface interface | none | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
rbsoil | bulk_richardson_number_at_lowest_model_level | bulk Richardson number at the surface | none | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
zorl | surface_roughness_length | surface roughness length in cm | cm | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
u10m | x_wind_at_10m | x component of wind at 10 m | m s-1 | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
v10m | y_wind_at_10m | y component of wind at 10 m | m s-1 | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
fm | monin_obukhov_similarity_function_for_momentum | Monin-Obukhov similarity function for momentum | none | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
fh | monin_obukhov_similarity_function_for_heat | Monin-Obukhov similarity function for heat | none | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
tsea | surface_skin_temperature | surface skin temperature | K | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
heat | kinematic_surface_upward_sensible_heat_flux_reduced_by_surface_roughness_and_vegetation | kinematic surface upward sensible heat flux reduced by surface roughness and vegetation | K m s-1 | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
evap | surface_upward_specific_humidity_flux | kinematic surface upward latent heat flux | kg kg-1 m s-1 | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
stress | surface_wind_stress | surface wind stress | m2 s-2 | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
spd1 | wind_speed_at_lowest_model_layer | wind speed at lowest model level | m s-1 | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
kpbl | vertical_index_at_top_of_atmosphere_boundary_layer | PBL top model level index | index | integer | (ccpp_constant_one:horizontal_loop_extent) | out | |
prsi | air_pressure_at_interface | air pressure at model layer interfaces | Pa | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_interface_dimension) | kind_phys | in |
del | air_pressure_difference_between_midlayers | pres(k) - pres(k+1) | Pa | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | in |
prsl | air_pressure | mean layer pressure | Pa | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | in |
prslk | dimensionless_exner_function | Exner function at layers | none | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | in |
phii | geopotential_at_interface | geopotential at model layer interfaces | m2 s-2 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_interface_dimension) | kind_phys | in |
phil | geopotential | geopotential at model layer centers | m2 s-2 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | in |
delt | timestep_for_physics | time step for physics | s | real | () | kind_phys | in |
dspheat | flag_tke_dissipation_heating | flag for using TKE dissipation heating | flag | logical | () | in | |
dusfc | instantaneous_surface_x_momentum_flux | x momentum flux | Pa | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | out |
dvsfc | instantaneous_surface_y_momentum_flux | y momentum flux | Pa | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | out |
dtsfc | instantaneous_surface_upward_sensible_heat_flux | surface upward sensible heat flux | W m-2 | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | out |
dqsfc | instantaneous_surface_upward_latent_heat_flux | surface upward latent heat flux | W m-2 | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | out |
hpbl | atmosphere_boundary_layer_thickness | PBL thickness | m | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | out |
dkt | atmosphere_heat_diffusivity | atmospheric heat diffusivity | m2 s-1 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | out |
dku | atmosphere_momentum_diffusivity | atmospheric momentum diffusivity | m2 s-1 | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension) | kind_phys | out |
kinver | index_of_highest_temperature_inversion | index of highest temperature inversion | index | integer | (ccpp_constant_one:horizontal_loop_extent) | in | |
xkzm_m | atmosphere_momentum_diffusivity_due_to_background | background value of momentum diffusivity | m2 s-1 | real | () | kind_phys | in |
xkzm_h | atmosphere_heat_diffusivity_due_to_background | background value of heat diffusivity | m2 s-1 | real | () | kind_phys | in |
xkzm_s | sigma_pressure_threshold_at_upper_extent_of_background_diffusion | sigma level threshold for background diffusivity | none | real | () | kind_phys | in |
dspfac | multiplicative_tuning_parameter_for_tke_dissipative_heating | tke dissipative heating factor | none | real | () | kind_phys | in |
bl_upfr | updraft_area_fraction_in_scale_aware_tke_moist_edmf_pbl_scheme | updraft fraction in boundary layer mass flux scheme | none | real | () | kind_phys | in |
bl_dnfr | downdraft_area_fraction_in_scale_aware_tke_moist_edmf_pbl_scheme | downdraft fraction in boundary layer mass flux scheme | none | real | () | kind_phys | in |
rlmx | maximum_allowed_mixing_length_in_boundary_layer_mass_flux_scheme | maximum allowed mixing length in boundary layer mass flux scheme | m | real | () | kind_phys | in |
elmx | maximum_allowed_dissipation_mixing_length_in_boundary_layer_mass_flux_scheme | maximum allowed dissipation mixing length in boundary layer mass flux scheme | m | real | () | kind_phys | in |
sfc_rlm | choice_of_near_surface_mixing_length_in_boundary_layer_mass_flux_scheme | choice of near surface mixing length in boundary layer mass flux scheme | none | integer | () | in | |
ntqv | index_of_specific_humidity_in_tracer_concentration_array | tracer index for water vapor (specific humidity) | index | integer | () | in | |
dtend | cumulative_change_of_state_variables | diagnostic tendencies for state variables | mixed | real | (ccpp_constant_one:horizontal_loop_extent, ccpp_constant_one:vertical_layer_dimension, ccpp_constant_one:cumulative_change_of_state_variables_outer_index_max) | kind_phys | in |
dtidx | cumulative_change_of_state_variables_outer_index | index of state-variable and process in last dimension of diagnostic tendencies array AKA cumulative_change_index | index | integer | (ccpp_constant_one:number_of_tracers_plus_one_hundred, ccpp_constant_one:number_of_cumulative_change_processes) | in | |
index_of_temperature | index_of_temperature_in_cumulative_change_index | index of temperature in first dimension of array cumulative change index | index | integer | () | in | |
index_of_x_wind | index_of_x_wind_in_cumulative_change_index | index of x-wind in first dimension of array cumulative change index | index | integer | () | in | |
index_of_y_wind | index_of_y_wind_in_cumulative_change_index | index of x-wind in first dimension of array cumulative change index | index | integer | () | in | |
index_of_process_pbl | index_of_subgrid_scale_vertical_mixing_process_in_cumulative_change_index | index of subgrid scale vertical mixing process in second dimension of array cumulative change index | index | integer | () | in | |
gen_tend | flag_for_generic_tendency_due_to_planetary_boundary_layer | true if GFS_PBL_generic should calculate tendencies | flag | logical | () | in | |
ldiag3d | flag_for_diagnostics_3d | flag for 3d diagnostic fields | flag | logical | () | in | |
errmsg | ccpp_error_message | error message for error handling in CCPP | none | character | () | len=* | out |
errflg | ccpp_error_code | error code for error handling in CCPP | 1 | integer | () | out |
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) [76] .
zi
and zl
)gdx
)tke
and tkeh
)The calculation of the boundary layer height follows Troen and Mahrt (1986) [183] 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) [90] 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) [173]) 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