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) | usfco, | ||
real(kind=kind_phys), dimension(:), intent(in) | vsfco, | ||
integer, intent(in) | icplocn2atm, | ||
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) | sigmaf, | ||
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) | tc_pbl, | ||
integer, intent(in) | ntqv, | ||
real(kind=kind_phys), dimension(:,:,:), intent(inout), optional | 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 |
usfco | x_ocean_current | zonal current at ocean surface | m s-1 | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
vsfco | y_ocean_current | meridional current at ocean surface | m s-1 | real | (ccpp_constant_one:horizontal_loop_extent) | kind_phys | in |
icplocn2atm | control_for_air_sea_flux_computation_over_water | air-sea flux option | 1 | integer | () | 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 |
sigmaf | bounded_vegetation_area_fraction | areal fractional cover of green vegetation bounded on the bottom | frac | 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 | |
tc_pbl | control_for_tc_applications_in_the_pbl_scheme | control for TC applications in the PBL 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 | inout |
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) [193] 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} \]
\[ 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.Definition at line 76 of file satmedmfvdifq.F.
References mfpbltq_mod::mfpbltq(), mfscuq_mod::mfscuq(), tridi_mod::tridi2(), tridi_mod::tridin(), and tridi_mod::tridit().