1 #ifndef ERF_TURB_STRUCT_H_
2 #define ERF_TURB_STRUCT_H_
4 #include <AMReX_ParallelDescriptor.H>
10 AMREX_ENUM(LESType, None, Smagorinsky, Smagorinsky2D, Deardorff);
20 AMREX_ENUM(PBLType, None, MYJ, MYNN25, MYNNEDMF, YSU, YSUNew, MRF, SHOC, EAMXX_SHOC, NATIVE_SHOC);
40 const amrex::ParmParse&
pp,
41 const char* query_string,
46 int count =
pp.countval(query_string);
49 }
else if (count == 1) {
51 return pp.query(query_string, query_var);
52 }
else if (count >= maxlev + 1) {
56 return pp.query(query_string, query_var, lev);
63 "For parmparse variable " +
pp.prefixedName(query_string) +
64 ": if specified, specify once total or at least once for each level");
82 const amrex::ParmParse&
pp,
83 const char* query_string,
88 int count =
pp.countval(query_string);
91 }
else if (count == 1) {
93 return pp.query_enum_case_insensitive(query_string, query_var);
94 }
else if (count >= maxlev + 1) {
98 return pp.query_enum_case_insensitive(query_string, query_var, lev);
105 "For parmparse variable " +
pp.prefixedName(query_string) +
106 ": if specified, specify once total or at least once for each level");
125 amrex::ParmParse
pp(pp_prefix);
139 if (
les_type == LESType::Smagorinsky2D) {
148 amrex::Error(
"Hybrid RANS-LES not implemented");
154 static bool warned_legacy_shoc =
false;
155 if (!warned_legacy_shoc) {
156 amrex::Warning(
"erf.pbl_type = SHOC is deprecated; use erf.pbl_type = EAMXX_SHOC");
157 warned_legacy_shoc =
true;
166 amrex::Print() <<
"Selected a PBL model and an LES model: "
167 <<
"Using PBL for vertical transport, LES for horizontal"
170 if (
les_type == LESType::Smagorinsky) {
172 amrex::Error(
"If using Smagorinsky with a PBL model, the 2-D "
173 "formulation should be used");
174 }
else if (
les_type == LESType::Deardorff) {
176 "It is not recommended to use Deardorff LES and a PBL model");
182 amrex::Error(
"erf.rans_type = kEqn cannot be combined with erf.pbl_type = " +
183 std::string(amrex::getEnumNameString(
pbl_type)) +
184 ": both transport the turbulent kinetic energy");
222 pp,
"pbl_ysu_use_consistent_coriolis",
259 if (amrex::ParallelDescriptor::IOProcessor()) {
260 amrex::Print() <<
"WARNING: erf.ysu_rad_tend_limiter_magnitude = "
262 <<
" is not positive; using the default of 1.0 K/s\n";
280 amrex::Error(
"pblh_smoothing_weight must be in [0, 1]");
293 }
else if (
pbl_type == PBLType::MRF) {
345 amrex::Error(
"pblh_smoothing_weight must be in [0, 1]");
347 }
else if (
pbl_type == PBLType::SHOC) {
349 amrex::Abort(
"You set use_shoc to true but didn't build with SHOC; you must rebuild the executable");
353 #ifndef ERF_USE_EAMXX_SHOC
354 amrex::Abort(
"PBLType::EAMXX_SHOC requested, but ERF was not built with ERF_ENABLE_EAMXX_SHOC=ON");
359 std::string zlo_bc =
"none";
360 amrex::ParmParse pp_bc(
"zlo");
361 pp_bc.get(
"type",zlo_bc);
362 if (amrex::toLower(zlo_bc) !=
"surface_layer") {
363 amrex::Abort(
"You must use the surface_layer BC at zlo with the selected PBL.");
394 if (
les_type == LESType::Deardorff) {
403 amrex::Print() <<
"Thermal stratification based on gradient of potential temperature" << std::endl;
405 amrex::Print() <<
"Thermal stratification based on gradient of virtual potential temperature" << std::endl;
407 amrex::Print() <<
"Thermal stratification based on gradient of linearized liquid-water potential temperature" << std::endl;
423 amrex::Error(
"erf.rans_lscale_min must be > 0 with erf.rans_lscale_from_pblh");
430 if (!(
Cmu0 > 0)) { amrex::Error(
"erf.Cmu0 must be > 0 for the k-eqn RANS"); }
431 if (!(
Cb > 0)) { amrex::Error(
"erf.Cb must be > 0 for the k-eqn RANS"); }
432 if (!(
l_g_max > 0)) { amrex::Error(
"erf.max_geom_lscale must be > 0 for the k-eqn RANS"); }
433 if (!(
Rt_crit <= 0)) { amrex::Error(
"erf.Rt_crit must be <= 0 for the k-eqn RANS"); }
434 if (!(
Rt_min <
Rt_crit)) { amrex::Error(
"erf.Rt_min must be < erf.Rt_crit for the k-eqn RANS"); }
436 amrex::Error(
"erf.Rt_min must be > -3.6 for the k-eqn RANS (stability functions have poles near -3.61)");
439 if (
tke_floor < 0) { amrex::Error(
"erf.tke_floor must be >= 0"); }
443 amrex::Print() <<
"Overriding default sigma_k for k-eqn RANS" << std::endl;
468 if (
les_type == LESType::Smagorinsky) {
470 amrex::Error(
"Need to specify Cs for Smagorsinky LES");
473 amrex::Print() <<
"Turning off mix_isotropic for 2-D Smagorinsky" << std::endl;
483 void check_params (amrex::GpuArray<ERF_BC, AMREX_SPACEDIM*2>& phys_bc_type)
487 phys_bc_type[amrex::Orientation(amrex::Direction::z,amrex::Orientation::low)] !=
ERF_BC::surface_layer ) {
488 amrex::Abort(
"The selected PBL model requires MOST at lower boundary");
491 (phys_bc_type[amrex::Orientation(amrex::Direction::z,amrex::Orientation::low)] !=
ERF_BC::surface_layer) &&
492 (phys_bc_type[amrex::Orientation(amrex::Direction::z,amrex::Orientation::low)] !=
ERF_BC::slip_wall) &&
493 (phys_bc_type[amrex::Orientation(amrex::Direction::z,amrex::Orientation::low)] !=
ERF_BC::no_slip_wall) )
495 amrex::Warning(
"Deardorff LES assumes wall at zlo when applying Ce_wall");
505 amrex::Print() <<
"Turbulence Settings at level " << lev << std::endl;
510 amrex::Print() <<
" Using DNS model at level " << lev << std::endl;
511 }
else if (
les_type == LESType::Smagorinsky) {
513 amrex::Print() <<
" Using 2D Smagorinsky LES model at level " << lev << std::endl;
515 amrex::Print() <<
" Using Smagorinsky LES model at level " << lev << std::endl;
518 amrex::Print() <<
" Smagorinsky uses Richardson number correction with Ri_crit = "
521 }
else if (
les_type == LESType::Deardorff) {
522 amrex::Print() <<
" Using Deardorff LES model at level " << lev << std::endl;
523 }
else if (
rans_type == RANSType::kEqn) {
525 <<
" Using Axell & Liungman one-equation RANS k model at level " << lev
527 }
else if (
pbl_type == PBLType::MYJ) {
528 amrex::Print() <<
" Using MYJ PBL model at level " << lev << std::endl;
529 }
else if (
pbl_type == PBLType::MYNN25) {
530 amrex::Print() <<
" Using MYNN2.5 PBL model at level " << lev << std::endl;
531 }
else if (
pbl_type == PBLType::MYNNEDMF) {
532 amrex::Print() <<
" Using MYNNEDMF PBL model at level " << lev << std::endl;
533 }
else if (
pbl_type == PBLType::YSU) {
534 amrex::Print() <<
" Using YSU PBL model at level " << lev << std::endl;
535 }
else if (
pbl_type == PBLType::YSUNew) {
536 amrex::Print() <<
" Using YSU PBL model at level " << lev << std::endl;
537 }
else if (
pbl_type == PBLType::MRF) {
538 amrex::Print() <<
" Using MRF PBL model at level " << lev << std::endl;
539 }
else if (
pbl_type == PBLType::EAMXX_SHOC) {
540 amrex::Print() <<
" Using EAMxx SHOC PBL model at level " << lev << std::endl;
541 }
else if (
pbl_type == PBLType::NATIVE_SHOC) {
542 amrex::Print() <<
" Using native SHOC PBL model at level " << lev << std::endl;
544 amrex::Error(
"Unknown turbulence model");
548 if (
les_type == LESType::Smagorinsky) {
549 amrex::Print() <<
" Cs : " <<
Cs << std::endl;
551 if (
les_type == LESType::Deardorff) {
552 amrex::Print() <<
" Ce : " <<
Ce << std::endl;
553 amrex::Print() <<
" Ce at wall : " <<
Ce_wall << std::endl;
554 amrex::Print() <<
" Ck : " <<
Ck << std::endl;
555 amrex::Print() <<
" sigma_k : " <<
sigma_k << std::endl;
559 amrex::Print() <<
" equivalent Cs : " << Cs_equiv
568 amrex::Print() <<
"Cmu0 : " <<
Cmu0 << std::endl;
569 amrex::Print() <<
"sigma_k : " <<
sigma_k << std::endl;
570 amrex::Print() <<
"Cb : " <<
Cb << std::endl;
571 amrex::Print() <<
"Rt_crit : " <<
Rt_crit << std::endl;
572 amrex::Print() <<
"Rt_min : " <<
Rt_min << std::endl;
573 amrex::Print() <<
"max_geom_lscale : " <<
l_g_max << std::endl;
574 amrex::Print() <<
"dirichlet_k : " <<
dirichlet_k << std::endl;
575 amrex::Print() <<
"tke_floor : " <<
tke_floor << std::endl;
583 if ((
les_type == LESType::Deardorff) ||
586 amrex::Print() <<
" reference theta : " <<
theta_ref << std::endl;
588 amrex::Print() <<
" reference theta : n/a" << std::endl;
593 amrex::Print() <<
" Pr_t : " <<
Pr_t << std::endl;
594 amrex::Print() <<
" Sc_t : " <<
Sc_t << std::endl;
598 amrex::Print() <<
" pbl_mynn_A1 : " <<
pbl_mynn.
A1 << std::endl;
599 amrex::Print() <<
" pbl_mynn_A2 : " <<
pbl_mynn.
A2 << std::endl;
600 amrex::Print() <<
" pbl_mynn_B1 : " <<
pbl_mynn.
B1 << std::endl;
601 amrex::Print() <<
" pbl_mynn_B2 : " <<
pbl_mynn.
B2 << std::endl;
602 amrex::Print() <<
" pbl_mynn_C1 : " <<
pbl_mynn.
C1 << std::endl;
603 amrex::Print() <<
" pbl_mynn_C2 : " <<
pbl_mynn.
C2 << std::endl;
604 amrex::Print() <<
" pbl_mynn_C3 : " <<
pbl_mynn.
C3 << std::endl;
605 amrex::Print() <<
" pbl_mynn_C4 : " <<
pbl_mynn.
C4 << std::endl;
606 amrex::Print() <<
" pbl_mynn_C5 : " <<
pbl_mynn.
C5 << std::endl;
608 amrex::Print() <<
" pbl_ysu_coriolis_freq : "
610 amrex::Print() <<
" pbl_ysu_use_consistent_coriolis : "
612 amrex::Print() <<
" pbl_ysu_force_over_water : "
614 amrex::Print() <<
" pbl_ysu_land_Ribcr : "
616 amrex::Print() <<
" pbl_ysu_unst_Ribcr : "
618 amrex::Print() <<
" enable_ysu_liquid_theta : "
620 amrex::Print() <<
" enable_ysu_countergradient : "
622 amrex::Print() <<
" enable_ysu_terrain_pblh_floor : "
624 amrex::Print() <<
" enable_ysu_sat_limiter : "
626 amrex::Print() <<
" enable_ysu_topdown : "
628 amrex::Print() <<
" enable_ysu_entrainment : "
630 amrex::Print() <<
" enable_ysu_cloud_pblh : "
632 amrex::Print() <<
" ysu_qcloud_threshold : "
634 amrex::Print() <<
" ysu_moistvars : "
636 amrex::Print() <<
" pbl_ysunew_highres_bounds : "
639 amrex::Print() <<
" enable_ysu_rad_tend_limiter : "
641 amrex::Print() <<
" ysu_rad_tend_limiter_magnitude : "
643 amrex::Print() <<
" enable_vh96_shear_correction : "
645 amrex::Print() <<
" vh96_shear_const_b : "
647 amrex::Print() <<
" enable_pblh_smoothing : "
649 amrex::Print() <<
" pblh_smoothing_passes : "
651 amrex::Print() <<
" pblh_smoothing_weight : "
653 amrex::Print() <<
" enable_mrf_unbounded_vpert : "
655 amrex::Print() <<
" enable_qnse_stable_functions : "
658 amrex::Print() <<
" qnse_am (momentum coeff) : " <<
qnse_am << std::endl;
659 amrex::Print() <<
" qnse_bm (momentum coeff) : " <<
qnse_bm << std::endl;
660 amrex::Print() <<
" qnse_ah (heat coeff) : " <<
qnse_ah << std::endl;
661 amrex::Print() <<
" qnse_bh (heat coeff) : " <<
qnse_bh << std::endl;
663 }
else if (
pbl_type == PBLType::MRF) {
670 amrex::Print() <<
" pbl_mrf_sf : " <<
pbl_mrf_sf
700 amrex::Print() <<
" enable_qnse_stable_functions : "
703 amrex::Print() <<
" qnse_am (momentum coeff) : " <<
qnse_am << std::endl;
704 amrex::Print() <<
" qnse_bm (momentum coeff) : " <<
qnse_bm << std::endl;
705 amrex::Print() <<
" qnse_ah (heat coeff) : " <<
qnse_ah << std::endl;
706 amrex::Print() <<
" qnse_bh (heat coeff) : " <<
qnse_bh << std::endl;
787 return pbl_type == PBLType::EAMXX_SHOC;
796 return pbl_type == PBLType::NATIVE_SHOC;
814 return (
pbl_type == PBLType::MYNN25) ||
constexpr amrex::Real three
Definition: ERF_NumericalConstants.H:32
constexpr amrex::Real one
Definition: ERF_NumericalConstants.H:30
constexpr amrex::Real fourth
Definition: ERF_NumericalConstants.H:35
constexpr amrex::Real zero
Definition: ERF_NumericalConstants.H:29
amrex::Real Real
Definition: ERF_ShocInterface.H:19
AMREX_ENUM(LESType, None, Smagorinsky, Smagorinsky2D, Deardorff)
Large-eddy simulation closure type.
int query_one_or_per_level_enum_case_insensitive(const amrex::ParmParse &pp, const char *query_string, T &query_var, const int lev, const int maxlev)
Query a scalar or per-level enum input value using case-insensitive matching.
Definition: ERF_TurbStruct.H:81
int query_one_or_per_level(const amrex::ParmParse &pp, const char *query_string, T &query_var, const int lev, const int maxlev)
Query a scalar or per-level input value.
Definition: ERF_TurbStruct.H:39
@ theta
Definition: ERF_SLM.H:19
@ T
Definition: ERF_IndexDefines.H:128
Coefficients and stability functions for the Level 2.5 MYNN closure.
Definition: ERF_MYNNStruct.H:14
amrex::Real SMmax
Definition: ERF_MYNNStruct.H:61
amrex::Real SHmax
Definition: ERF_MYNNStruct.H:63
amrex::Real SQfac
Definition: ERF_MYNNStruct.H:57
amrex::Real C4
Definition: ERF_MYNNStruct.H:53
amrex::Real C1
Definition: ERF_MYNNStruct.H:50
amrex::Real C3
Definition: ERF_MYNNStruct.H:52
amrex::Real C2
Definition: ERF_MYNNStruct.H:51
amrex::Real A2
Definition: ERF_MYNNStruct.H:47
amrex::Real SHmin
Definition: ERF_MYNNStruct.H:62
amrex::Real B1
Definition: ERF_MYNNStruct.H:48
amrex::Real B2
Definition: ERF_MYNNStruct.H:49
amrex::Real C5
Definition: ERF_MYNNStruct.H:54
amrex::Real SMmin
Definition: ERF_MYNNStruct.H:60
amrex::Real A1
Definition: ERF_MYNNStruct.H:46
bool diffuse_moistvars
Definition: ERF_MYNNStruct.H:70
amrex::Real SQmax
Definition: ERF_MYNNStruct.H:65
Coefficients and stability functions for the Level 2 MYNN closure.
Definition: ERF_MYNNStruct.H:76
void init_coeffs(amrex::Real A1_lvl25, amrex::Real A2_lvl25, amrex::Real B1, amrex::Real B2, amrex::Real C1, amrex::Real C2, amrex::Real C3, amrex::Real, amrex::Real C5)
Initialize Level 2 closure coefficients from Level 2.5 coefficients.
Definition: ERF_MYNNStruct.H:88
Definition: ERF_TurbStruct.H:115
bool advect_tke
Whether TKE/QKE is advected.
Definition: ERF_TurbStruct.H:925
bool pbl_ysu_force_over_water
Whether YSU is forced to use over-water behavior.
Definition: ERF_TurbStruct.H:859
bool implicit_tke_dissipation
Definition: ERF_TurbStruct.H:765
StratType strat_type
Thermodynamic variable used for stability stratification.
Definition: ERF_TurbStruct.H:745
bool rans_consistent_diffusivities
Definition: ERF_TurbStruct.H:770
amrex::Real Ce
Deardorff dissipation coefficient.
Definition: ERF_TurbStruct.H:727
bool enable_mrf_unbounded_vpert
Whether MRF leaves VPERT unlimited by GAMCRT.
Definition: ERF_TurbStruct.H:910
amrex::Real Sc_t
Turbulent Schmidt number.
Definition: ERF_TurbStruct.H:719
MYNNLevel2 pbl_mynn_level2
MYNN level-2 closure coefficients for limiting.
Definition: ERF_TurbStruct.H:832
bool diffuse_tke_3D
Whether three-dimensional numerical diffusion is applied to TKE/QKE.
Definition: ERF_TurbStruct.H:927
bool use_tke
Whether any TKE or QKE closure is active.
Definition: ERF_TurbStruct.H:841
amrex::Real sigma_k
TKE diffusivity coefficient denominator.
Definition: ERF_TurbStruct.H:740
bool use_Ri_correction
Whether Richardson-number correction is applied.
Definition: ERF_TurbStruct.H:750
bool pbl_ysu_use_consistent_coriolis
Whether YSU uses the ERF Coriolis frequency.
Definition: ERF_TurbStruct.H:856
amrex::Real pbl_blend_length
Boutle blending length L [m]. 0 = off.
Definition: ERF_TurbStruct.H:901
amrex::Real Ck
Deardorff eddy-viscosity coefficient.
Definition: ERF_TurbStruct.H:729
bool pbl_mrf_use_zero_ri_extent
Whether MRF uses the Ri=0 K-profile extent.
Definition: ERF_TurbStruct.H:911
amrex::Real Ce_wall
Wall value for the Deardorff dissipation coefficient.
Definition: ERF_TurbStruct.H:728
amrex::Real qnse_ah
Definition: ERF_TurbStruct.H:921
RANSType rans_type
Selected RANS closure.
Definition: ERF_TurbStruct.H:754
void check_params(amrex::GpuArray< ERF_BC, AMREX_SPACEDIM *2 > &phys_bc_type)
Validate turbulence options against physical boundary conditions.
Definition: ERF_TurbStruct.H:483
bool enable_vh96_shear_correction
Whether Vogelezang & Holtslag (1996) shear-correction term is enabled.
Definition: ERF_TurbStruct.H:888
amrex::Real theta_ref
Reference potential temperature for stable stratification.
Definition: ERF_TurbStruct.H:743
amrex::Real Sc_t_inv
Inverse turbulent Schmidt number.
Definition: ERF_TurbStruct.H:720
amrex::Real l_g_max
Maximum geometric length scale.
Definition: ERF_TurbStruct.H:736
bool enable_mrf_cloud_adjustment
Whether MRF cloud-aware stability adjustments are enabled.
Definition: ERF_TurbStruct.H:908
bool use_keqn
Whether a microscale TKE closure is active.
Definition: ERF_TurbStruct.H:836
bool uses_eamxx_shoc() const noexcept
Query whether this level uses the EAMxx SHOC PBL scheme.
Definition: ERF_TurbStruct.H:785
bool enable_ysu_entrainment
Whether YSU entrainment-layer parameterization is enabled.
Definition: ERF_TurbStruct.H:876
bool enable_ysu_sat_limiter
Whether YSU applies a saturation limiter to moisture countergradient terms.
Definition: ERF_TurbStruct.H:872
bool enable_ysu_cloud_pblh
Whether YSU cloud-based PBL-height detection is enabled.
Definition: ERF_TurbStruct.H:878
amrex::Real pbl_mrf_const_b
MRF constant used to compute PBL height.
Definition: ERF_TurbStruct.H:896
amrex::Real pblh_smoothing_weight
Center-cell weight in PBLH smoothing stencil (must be in [0,1]).
Definition: ERF_TurbStruct.H:892
amrex::Real pbl_blend_cs
Smagorinsky coeff for K_h ceiling.
Definition: ERF_TurbStruct.H:902
amrex::Real tke_floor
Definition: ERF_TurbStruct.H:761
bool uses_shoc_family() const noexcept
Query whether this level uses any SHOC-family PBL scheme.
Definition: ERF_TurbStruct.H:803
amrex::Real ysu_qcloud_threshold
Cloud liquid water threshold for YSUNew [kg/kg].
Definition: ERF_TurbStruct.H:880
amrex::Real qnse_bm
Definition: ERF_TurbStruct.H:920
amrex::Real pbl_blend_c_max
Power-law ceiling coeff [m^(2/3)/s].
Definition: ERF_TurbStruct.H:903
bool init_tke_from_ustar
Whether initial TKE/QKE profiles are based on surface friction velocity.
Definition: ERF_TurbStruct.H:846
amrex::Real qnse_bh
Definition: ERF_TurbStruct.H:922
bool enable_qnse_stable_functions
Definition: ERF_TurbStruct.H:917
bool enable_mrf_countergradient
Whether MRF countergradient corrections are enabled.
Definition: ERF_TurbStruct.H:905
bool enable_ysu_countergradient
Whether YSU countergradient corrections are enabled.
Definition: ERF_TurbStruct.H:868
bool mix_isotropic
Whether subgrid mixing uses isotropic length scales.
Definition: ERF_TurbStruct.H:748
bool enable_pblh_smoothing
Whether spatial smoothing of diagnosed PBLH is enabled.
Definition: ERF_TurbStruct.H:890
bool uses_native_shoc() const noexcept
Query whether this level uses the native SHOC PBL scheme.
Definition: ERF_TurbStruct.H:794
bool dirichlet_k
Whether TKE uses Dirichlet boundary treatment.
Definition: ERF_TurbStruct.H:756
int pblh_smoothing_passes
Number of PBLH smoothing iterations to apply.
Definition: ERF_TurbStruct.H:891
LESType les_type
Selected LES closure.
Definition: ERF_TurbStruct.H:712
void init_params(int lev, int max_level, std::string pp_prefix)
Read turbulence options for one AMR level from the input parameter database.
Definition: ERF_TurbStruct.H:123
amrex::Real pbl_ib_z0
Definition: ERF_TurbStruct.H:907
bool enable_ysu_topdown
Whether YSU top-down mixing is enabled.
Definition: ERF_TurbStruct.H:874
bool rans_lscale_from_pblh
Definition: ERF_TurbStruct.H:775
bool pbl_ib_aware
Definition: ERF_TurbStruct.H:906
amrex::Real ysu_rad_tend_limiter_magnitude
Definition: ERF_TurbStruct.H:886
amrex::Real rans_lscale_min
Definition: ERF_TurbStruct.H:776
bool pbl_mrf_highres_bounds
Whether MRF applies high-resolution grid-dependent diffusivity bounds.
Definition: ERF_TurbStruct.H:909
amrex::Real Rt_min
Minimum turbulent Reynolds number.
Definition: ERF_TurbStruct.H:735
bool pbl_blend_use_smag
Use Smagorinsky ceiling (else power-law).
Definition: ERF_TurbStruct.H:904
MYNNLevel25 pbl_mynn
MYNN level-2.5 closure coefficients.
Definition: ERF_TurbStruct.H:831
amrex::Real pbl_ysu_land_Ribcr
Critical bulk Richardson number over land for stable YSU conditions.
Definition: ERF_TurbStruct.H:862
amrex::Real Cb
One-equation RANS buoyancy coefficient.
Definition: ERF_TurbStruct.H:733
amrex::Real Ri_crit
Critical Richardson number for stability correction.
Definition: ERF_TurbStruct.H:751
amrex::Real pbl_ysu_unst_Ribcr
Critical bulk Richardson number for unstable YSU conditions.
Definition: ERF_TurbStruct.H:864
amrex::Real Rt_crit
Critical turbulent Reynolds number.
Definition: ERF_TurbStruct.H:734
amrex::Real vh96_shear_const_b
Vogelezang & Holtslag (1996) shear-correction constant b.
Definition: ERF_TurbStruct.H:889
bool pbl_suppresses_microphysics_condensation() const noexcept
Query whether the selected PBL scheme suppresses microphysics condensation.
Definition: ERF_TurbStruct.H:826
amrex::Real pbl_mrf_Ribcr
Critical bulk Richardson number for the MRF PBL scheme.
Definition: ERF_TurbStruct.H:895
amrex::Real qnse_am
Definition: ERF_TurbStruct.H:919
amrex::Real pbl_mrf_sf
MRF surface flux value used to compute PBL height.
Definition: ERF_TurbStruct.H:897
amrex::Real Cmu0
One-equation RANS Cmu0 coefficient.
Definition: ERF_TurbStruct.H:732
amrex::Real Cs
Smagorinsky model coefficient.
Definition: ERF_TurbStruct.H:723
amrex::Real Pr_t
Turbulent Prandtl number.
Definition: ERF_TurbStruct.H:715
amrex::Real pbl_mrf_coriolis_freq
Coriolis frequency used by the MRF PBL scheme.
Definition: ERF_TurbStruct.H:894
bool pbl_ysunew_highres_bounds
Whether YSUNew applies high-resolution grid-dependent diffusivity bounds.
Definition: ERF_TurbStruct.H:883
amrex::Real tke_min
Minimum TKE/QKE value.
Definition: ERF_TurbStruct.H:849
amrex::Real pbl_ysu_coriolis_freq
Coriolis frequency used by YSU-family PBL schemes.
Definition: ERF_TurbStruct.H:853
void display(int lev)
Print turbulence settings for one AMR level.
Definition: ERF_TurbStruct.H:503
bool use_kturb
Whether any turbulence model is active.
Definition: ERF_TurbStruct.H:835
bool ysu_moistvars
Whether YSU applies turbulence to moisture variables.
Definition: ERF_TurbStruct.H:882
PBLType pbl_type
Selected PBL closure.
Definition: ERF_TurbStruct.H:779
amrex::Real Pr_t_inv
Inverse turbulent Prandtl number.
Definition: ERF_TurbStruct.H:716
bool enable_ysu_terrain_pblh_floor
Whether YSU applies a terrain-following PBL-height floor.
Definition: ERF_TurbStruct.H:870
bool enable_ysu_liquid_theta
Whether YSU uses liquid-water virtual potential temperature for stability.
Definition: ERF_TurbStruct.H:866
bool smag2d
Whether the 2-D Smagorinsky formulation is used.
Definition: ERF_TurbStruct.H:724
bool enable_ysu_rad_tend_limiter
Definition: ERF_TurbStruct.H:885
bool pbl_requires_surface_layer() const noexcept
Query whether the selected PBL scheme requires surface-layer boundary conditions.
Definition: ERF_TurbStruct.H:812
bool use_pbl_tke
Whether a mesoscale PBL TKE closure is active.
Definition: ERF_TurbStruct.H:839