subroutine satmedmfvdifq::satmedmfvdifq_run | ( | integer, intent(in) | im, |
integer, intent(in) | km, | ||
integer, intent(in) | ntrac, | ||
integer, intent(in) | ntcw, | ||
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(im,km), intent(inout) | dv, | ||
real(kind=kind_phys), dimension(im,km), intent(inout) | du, | ||
real(kind=kind_phys), dimension(im,km), intent(inout) | tdt, | ||
real(kind=kind_phys), dimension(im,km,ntrac), intent(inout) | rtg, | ||
real(kind=kind_phys), dimension(im,km), intent(in) | u1, | ||
real(kind=kind_phys), dimension(im,km), intent(in) | v1, | ||
real(kind=kind_phys), dimension(im,km), intent(in) | t1, | ||
real(kind=kind_phys), dimension(im,km,ntrac), intent(in) | q1, | ||
real(kind=kind_phys), dimension(im,km), intent(in) | swh, | ||
real(kind=kind_phys), dimension(im,km), intent(in) | hlw, | ||
real(kind=kind_phys), dimension(im), intent(in) | xmu, | ||
real(kind=kind_phys), dimension(im), intent(in) | garea, | ||
integer, dimension(im), intent(in) | islimsk, | ||
real(kind=kind_phys), dimension(im), intent(in) | snwdph_lnd, | ||
real(kind=kind_phys), dimension(im), intent(in) | psk, | ||
real(kind=kind_phys), dimension(im), intent(in) | rbsoil, | ||
real(kind=kind_phys), dimension(im), intent(in) | zorl, | ||
real(kind=kind_phys), dimension(im), intent(in) | u10m, | ||
real(kind=kind_phys), dimension(im), intent(in) | v10m, | ||
real(kind=kind_phys), dimension(im), intent(in) | fm, | ||
real(kind=kind_phys), dimension(im), intent(in) | fh, | ||
real(kind=kind_phys), dimension(im), intent(in) | tsea, | ||
real(kind=kind_phys), dimension(im), intent(in) | heat, | ||
real(kind=kind_phys), dimension(im), intent(in) | evap, | ||
real(kind=kind_phys), dimension(im), intent(in) | stress, | ||
real(kind=kind_phys), dimension(im), intent(in) | spd1, | ||
integer, dimension(im), intent(out) | kpbl, | ||
real(kind=kind_phys), dimension(im,km+1), intent(in) | prsi, | ||
real(kind=kind_phys), dimension(im,km), intent(in) | del, | ||
real(kind=kind_phys), dimension(im,km), intent(in) | prsl, | ||
real(kind=kind_phys), dimension(im,km), intent(in) | prslk, | ||
real(kind=kind_phys), dimension(im,km+1), intent(in) | phii, | ||
real(kind=kind_phys), dimension(im,km), intent(in) | phil, | ||
real(kind=kind_phys), intent(in) | delt, | ||
logical, intent(in) | dspheat, | ||
real(kind=kind_phys), dimension(im), intent(out) | dusfc, | ||
real(kind=kind_phys), dimension(im), intent(out) | dvsfc, | ||
real(kind=kind_phys), dimension(im), intent(out) | dtsfc, | ||
real(kind=kind_phys), dimension(im), intent(out) | dqsfc, | ||
real(kind=kind_phys), dimension(im), intent(out) | hpbl, | ||
integer, dimension(im), 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, | ||
integer, intent(in) | ntoz, | ||
real(kind=kind_phys), dimension(:,:), intent(inout) | du3dt, | ||
real(kind=kind_phys), dimension(:,:), intent(inout) | dv3dt, | ||
real(kind=kind_phys), dimension(:,:), intent(inout) | dt3dt, | ||
real(kind=kind_phys), dimension(:,:), intent(inout) | dq3dt, | ||
real(kind=kind_phys), dimension(:,:), intent(inout) | do3dt, | ||
logical, intent(in) | gen_tend, | ||
logical, intent(in) | ldiag3d, | ||
logical, intent(in) | qdiag3d, | ||
character(len=*), intent(out) | errmsg, | ||
integer, intent(out) | errflg | ||
) |
local_name | standard_name | long_name | units | type | dimensions | kind | intent | optional |
---|---|---|---|---|---|---|---|---|
im | horizontal_loop_extent | horizontal loop extent | count | integer | () | in | False | |
km | vertical_dimension | vertical layer dimension | count | integer | () | in | False | |
ntrac | number_of_vertical_diffusion_tracers | number of tracers to diffuse vertically | count | integer | () | in | False | |
ntcw | index_for_liquid_cloud_condensate | tracer index for cloud condensate (or liquid water) | index | integer | () | in | False | |
ntiw | index_for_ice_cloud_condensate_vertical_diffusion_tracer | tracer index for ice water in the vertically diffused tracer array | index | integer | () | in | False | |
ntke | index_for_turbulent_kinetic_energy_vertical_diffusion_tracer | index for turbulent kinetic energy in the vertically diffused tracer array | index | integer | () | in | False | |
grav | gravitational_acceleration | gravitational acceleration | m s-2 | real | () | kind_phys | in | False |
rd | gas_constant_dry_air | ideal gas constant for dry air | J kg-1 K-1 | real | () | kind_phys | in | False |
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 | False |
rv | gas_constant_water_vapor | ideal gas constant for water vapor | J kg-1 K-1 | real | () | kind_phys | in | False |
hvap | latent_heat_of_vaporization_of_water_at_0C | latent heat of evaporation/sublimation | J kg-1 | real | () | kind_phys | in | False |
hfus | latent_heat_of_fusion_of_water_at_0C | latent heat of fusion | J kg-1 | real | () | kind_phys | in | False |
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 | False |
eps | ratio_of_dry_air_to_water_vapor_gas_constants | rd/rv | none | real | () | kind_phys | in | False |
epsm1 | ratio_of_dry_air_to_water_vapor_gas_constants_minus_one | (rd/rv) - 1 | none | real | () | kind_phys | in | False |
dv | tendency_of_y_wind_due_to_model_physics | updated tendency of the y wind | m s-2 | real | (horizontal_dimension, vertical_dimension) | kind_phys | inout | False |
du | tendency_of_x_wind_due_to_model_physics | updated tendency of the x wind | m s-2 | real | (horizontal_dimension, vertical_dimension) | kind_phys | inout | False |
tdt | tendency_of_air_temperature_due_to_model_physics | updated tendency of the temperature | K s-1 | real | (horizontal_dimension, vertical_dimension) | kind_phys | inout | False |
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 | (horizontal_dimension, vertical_dimension, number_of_vertical_diffusion_tracers) | kind_phys | inout | False |
u1 | x_wind | x component of layer wind | m s-1 | real | (horizontal_dimension, vertical_dimension) | kind_phys | in | False |
v1 | y_wind | y component of layer wind | m s-1 | real | (horizontal_dimension, vertical_dimension) | kind_phys | in | False |
t1 | air_temperature | layer mean air temperature | K | real | (horizontal_dimension, vertical_dimension) | kind_phys | in | False |
q1 | vertically_diffused_tracer_concentration | tracer concentration diffused by PBL scheme | kg kg-1 | real | (horizontal_dimension, vertical_dimension, number_of_vertical_diffusion_tracers) | kind_phys | in | False |
swh | tendency_of_air_temperature_due_to_shortwave_heating_on_radiation_time_step | total sky shortwave heating rate | K s-1 | real | (horizontal_dimension, vertical_dimension) | kind_phys | in | False |
hlw | tendency_of_air_temperature_due_to_longwave_heating_on_radiation_time_step | total sky longwave heating rate | K s-1 | real | (horizontal_dimension, vertical_dimension) | kind_phys | in | False |
xmu | zenith_angle_temporal_adjustment_factor_for_shortwave_fluxes | zenith angle temporal adjustment factor for shortwave | none | real | (horizontal_dimension) | kind_phys | in | False |
garea | cell_area | area of the grid cell | m2 | real | (horizontal_dimension) | kind_phys | in | False |
islimsk | sea_land_ice_mask | sea/land/ice mask (=0/1/2) | flag | integer | (horizontal_dimension) | in | False | |
snwdph_lnd | surface_snow_thickness_water_equivalent_over_land | water equivalent snow depth over land | mm | real | (horizontal_dimension) | kind_phys | in | False |
psk | dimensionless_exner_function_at_lowest_model_interface | dimensionless Exner function at the surface interface | none | real | (horizontal_dimension) | kind_phys | in | False |
rbsoil | bulk_richardson_number_at_lowest_model_level | bulk Richardson number at the surface | none | real | (horizontal_dimension) | kind_phys | in | False |
zorl | surface_roughness_length | surface roughness length in cm | cm | real | (horizontal_dimension) | kind_phys | in | False |
u10m | x_wind_at_10m | x component of wind at 10 m | m s-1 | real | (horizontal_dimension) | kind_phys | in | False |
v10m | y_wind_at_10m | y component of wind at 10 m | m s-1 | real | (horizontal_dimension) | kind_phys | in | False |
fm | Monin_Obukhov_similarity_function_for_momentum | Monin-Obukhov similarity function for momentum | none | real | (horizontal_dimension) | kind_phys | in | False |
fh | Monin_Obukhov_similarity_function_for_heat | Monin-Obukhov similarity function for heat | none | real | (horizontal_dimension) | kind_phys | in | False |
tsea | surface_skin_temperature | surface skin temperature | K | real | (horizontal_dimension) | kind_phys | in | False |
heat | kinematic_surface_upward_sensible_heat_flux_reduced_by_surface_roughness | kinematic surface upward sensible heat flux | K m s-1 | real | (horizontal_dimension) | kind_phys | in | False |
evap | kinematic_surface_upward_latent_heat_flux_reduced_by_surface_roughness | kinematic surface upward latent heat flux | kg kg-1 m s-1 | real | (horizontal_dimension) | kind_phys | in | False |
stress | surface_wind_stress | surface wind stress | m2 s-2 | real | (horizontal_dimension) | kind_phys | in | False |
spd1 | wind_speed_at_lowest_model_layer | wind speed at lowest model level | m s-1 | real | (horizontal_dimension) | kind_phys | in | False |
kpbl | vertical_index_at_top_of_atmosphere_boundary_layer | PBL top model level index | index | integer | (horizontal_dimension) | out | False | |
prsi | air_pressure_at_interface | air pressure at model layer interfaces | Pa | real | (horizontal_dimension, vertical_dimension_plus_one) | kind_phys | in | False |
del | air_pressure_difference_between_midlayers | pres(k) - pres(k+1) | Pa | real | (horizontal_dimension, vertical_dimension) | kind_phys | in | False |
prsl | air_pressure | mean layer pressure | Pa | real | (horizontal_dimension, vertical_dimension) | kind_phys | in | False |
prslk | dimensionless_exner_function_at_model_layers | Exner function at layers | none | real | (horizontal_dimension, vertical_dimension) | kind_phys | in | False |
phii | geopotential_at_interface | geopotential at model layer interfaces | m2 s-2 | real | (horizontal_dimension, vertical_dimension_plus_one) | kind_phys | in | False |
phil | geopotential | geopotential at model layer centers | m2 s-2 | real | (horizontal_dimension, vertical_dimension) | kind_phys | in | False |
delt | time_step_for_physics | time step for physics | s | real | () | kind_phys | in | False |
dspheat | flag_TKE_dissipation_heating | flag for using TKE dissipation heating | flag | logical | () | in | False | |
dusfc | instantaneous_surface_x_momentum_flux | x momentum flux | Pa | real | (horizontal_dimension) | kind_phys | out | False |
dvsfc | instantaneous_surface_y_momentum_flux | y momentum flux | Pa | real | (horizontal_dimension) | kind_phys | out | False |
dtsfc | instantaneous_surface_upward_sensible_heat_flux | surface upward sensible heat flux | W m-2 | real | (horizontal_dimension) | kind_phys | out | False |
dqsfc | instantaneous_surface_upward_latent_heat_flux | surface upward latent heat flux | W m-2 | real | (horizontal_dimension) | kind_phys | out | False |
hpbl | atmosphere_boundary_layer_thickness | PBL thickness | m | real | (horizontal_dimension) | kind_phys | out | False |
kinver | index_of_highest_temperature_inversion | index of highest temperature inversion | index | integer | (horizontal_dimension) | in | False | |
xkzm_m | atmosphere_momentum_diffusivity_background | background value of momentum diffusivity | m2 s-1 | real | () | kind_phys | in | False |
xkzm_h | atmosphere_heat_diffusivity_background | background value of heat diffusivity | m2 s-1 | real | () | kind_phys | in | False |
xkzm_s | diffusivity_background_sigma_level | sigma level threshold for background diffusivity | none | real | () | kind_phys | in | False |
dspfac | tke_dissipative_heating_factor | tke dissipative heating factor | none | real | () | kind_phys | in | False |
bl_upfr | updraft_fraction_in_boundary_layer_mass_flux_scheme | updraft fraction in boundary layer mass flux scheme | none | real | () | kind_phys | in | False |
bl_dnfr | downdraft_fraction_in_boundary_layer_mass_flux_scheme | downdraft fraction in boundary layer mass flux scheme | none | real | () | kind_phys | in | False |
ntoz | index_for_ozone | tracer index for ozone mixing ratio | index | integer | () | in | False | |
du3dt | cumulative_change_in_x_wind_due_to_PBL | cumulative change in x wind due to PBL | m s-1 | real | (horizontal_loop_extent, vertical_dimension) | kind_phys | inout | False |
dv3dt | cumulative_change_in_y_wind_due_to_PBL | cumulative change in y wind due to PBL | m s-1 | real | (horizontal_loop_extent, vertical_dimension) | kind_phys | inout | False |
dt3dt | cumulative_change_in_temperature_due_to_PBL | cumulative change in temperature due to PBL | K | real | (horizontal_loop_extent, vertical_dimension) | kind_phys | inout | False |
dq3dt | cumulative_change_in_water_vapor_specific_humidity_due_to_PBL | cumulative change in water vapor specific humidity due to PBL | kg kg-1 | real | (horizontal_loop_extent, vertical_dimension) | kind_phys | inout | False |
do3dt | cumulative_change_in_ozone_mixing_ratio_due_to_PBL | cumulative change in ozone mixing ratio due to PBL | kg kg-1 | real | (horizontal_loop_extent, vertical_dimension) | kind_phys | inout | False |
gen_tend | flag_for_generic_planetary_boundary_layer_tendency | true if GFS_PBL_generic should calculate tendencies | flag | logical | () | in | False | |
ldiag3d | flag_diagnostics_3D | flag for 3d diagnostic fields | flag | logical | () | inout | False | |
qdiag3d | flag_tracer_diagnostics_3D | flag for 3d tracer diagnostic fields | flag | logical | () | inout | False | |
errmsg | ccpp_error_message | error message for error handling in CCPP | none | character | () | len=* | out | False |
errflg | ccpp_error_flag | error flag for error handling in CCPP | flag | integer | () | out | False |
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) [75] .
zi
and zl
)gdx
)tke
and tkeh
)The calculation of the boundary layer height follows Troen and Mahrt (1986) [174] 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.35\[ \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.\[ \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}) \]
\[ 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} \]
to be less than or equal to xkzinv
\[ 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.References funcphys::fpvs(), mfpbltq(), mfscuq(), tridi2(), tridin(), and tridit().