1 #ifndef ERF_TURB_STRUCT_H_
2 #define ERF_TURB_STRUCT_H_
6 AMREX_ENUM(LESType, None, Smagorinsky, Smagorinsky2D, Deardorff);
15 const amrex::ParmParse&
pp,
16 const char* query_string,
21 int count =
pp.countval(query_string);
24 }
else if (count == 1) {
25 pp.query(query_string, query_var);
26 }
else if (count == maxlev + 1) {
27 pp.query(query_string, query_var, lev);
30 "For parmparse variable " +
pp.prefixedName(query_string) +
31 ": if specified, specify once total or once for each level");
41 void init_params(
int lev,
int max_level, std::string pp_prefix)
43 amrex::ParmParse
pp(pp_prefix);
46 std::string les_type_string =
"None";
50 if (
les_type == LESType::Smagorinsky2D) {
56 std::string rans_type_string =
"None";
60 amrex::Error(
"Hybrid RANS-LES not implemented");
64 static std::string pbl_type_string =
"None";
71 amrex::Print() <<
"Selected a PBL model and an LES model: "
72 <<
"Using PBL for vertical transport, LES for horizontal"
75 if (
les_type == LESType::Smagorinsky) {
77 amrex::Error(
"If using Smagorinsky with a PBL model, the 2-D "
78 "formulation should be used");
79 }
else if (
les_type == LESType::Deardorff) {
81 "It is not recommended to use Deardorff LES and a PBL model");
110 }
else if (
pbl_type == PBLType::YSU) {
114 pp,
"pbl_ysu_use_consistent_coriolis",
123 }
else if (
pbl_type == PBLType::MRF) {
159 if (
les_type == LESType::Deardorff) {
187 if (
les_type == LESType::Smagorinsky) {
189 amrex::Error(
"Need to specify Cs for Smagorsinky LES");
192 amrex::Print() <<
"Turning off mix_isotropic for 2-D Smagorinsky"
201 amrex::Print() <<
"Turbulence Settings at level " << lev << std::endl;
206 amrex::Print() <<
" Using DNS model at level " << lev << std::endl;
207 }
else if (
les_type == LESType::Smagorinsky) {
209 amrex::Print() <<
" Using 2D Smagorinsky LES model at level " << lev
212 amrex::Print() <<
" Using Smagorinsky LES model at level " << lev
215 }
else if (
les_type == LESType::Deardorff) {
216 amrex::Print() <<
" Using Deardorff LES model at level " << lev
218 }
else if (
rans_type == RANSType::kEqn) {
220 <<
" Using Axell & Liungman one-equation RANS k model at level "
222 }
else if (
pbl_type == PBLType::MYNN25) {
223 amrex::Print() <<
" Using MYNN2.5 PBL model at level " << lev
225 }
else if (
pbl_type == PBLType::MYNNEDMF) {
226 amrex::Print() <<
" Using MYNNEDMF PBL model at level " << lev
228 }
else if (
pbl_type == PBLType::YSU) {
229 amrex::Print() <<
" Using YSU PBL model at level " << lev << std::endl;
230 }
else if (
pbl_type == PBLType::MRF) {
231 amrex::Print() <<
" Using MRF PBL model at level " << lev << std::endl;
233 amrex::Error(
"Unknown turbulence model");
237 if (
les_type == LESType::Smagorinsky) {
238 amrex::Print() <<
"Cs : " <<
Cs << std::endl;
240 if (
les_type == LESType::Deardorff) {
241 amrex::Print() <<
"Ce : " <<
Ce << std::endl;
242 amrex::Print() <<
"Ce at wall : " <<
Ce_wall
244 amrex::Print() <<
"Ck : " <<
Ck << std::endl;
245 amrex::Print() <<
"sigma_k : " <<
sigma_k
247 amrex::Print() <<
"reference theta : " <<
theta_ref
250 amrex::Real Cs_equiv = std::sqrt(
Ck * std::sqrt(
Ck /
Ce));
251 amrex::Print() <<
"equivalent Cs : " << Cs_equiv
260 amrex::Print() <<
"Cmu0 : " <<
Cmu0 << std::endl;
261 amrex::Print() <<
"sigma_k : " <<
sigma_k
263 amrex::Print() <<
"Cb : " <<
Cb << std::endl;
264 amrex::Print() <<
"Rt_crit : " <<
Rt_crit
266 amrex::Print() <<
"Rt_min : " <<
Rt_min
268 amrex::Print() <<
"max_geom_lscale : " <<
l_g_max
270 amrex::Print() <<
"reference theta : " <<
theta_ref
276 amrex::Print() <<
"Pr_t : " <<
Pr_t << std::endl;
277 amrex::Print() <<
"Sc_t : " <<
Sc_t << std::endl;
281 amrex::Print() <<
" pbl_mynn_A1 : " <<
pbl_mynn.
A1 << std::endl;
282 amrex::Print() <<
" pbl_mynn_A2 : " <<
pbl_mynn.
A2 << std::endl;
283 amrex::Print() <<
" pbl_mynn_B1 : " <<
pbl_mynn.
B1 << std::endl;
284 amrex::Print() <<
" pbl_mynn_B2 : " <<
pbl_mynn.
B2 << std::endl;
285 amrex::Print() <<
" pbl_mynn_C1 : " <<
pbl_mynn.
C1 << std::endl;
286 amrex::Print() <<
" pbl_mynn_C2 : " <<
pbl_mynn.
C2 << std::endl;
287 amrex::Print() <<
" pbl_mynn_C3 : " <<
pbl_mynn.
C3 << std::endl;
288 amrex::Print() <<
" pbl_mynn_C4 : " <<
pbl_mynn.
C4 << std::endl;
289 amrex::Print() <<
" pbl_mynn_C5 : " <<
pbl_mynn.
C5 << std::endl;
290 }
else if (
pbl_type == PBLType::YSU) {
291 amrex::Print() <<
" pbl_ysu_coriolis_freq : "
293 amrex::Print() <<
" pbl_ysu_use_consistent_coriolis : "
295 amrex::Print() <<
" pbl_ysu_force_over_water : "
297 amrex::Print() <<
" pbl_ysu_land_Ribcr : "
299 amrex::Print() <<
" pbl_ysu_unst_Ribcr : "
301 }
else if (
pbl_type == PBLType::MRF) {
308 amrex::Print() <<
" pbl_mrf_sf : " <<
pbl_mrf_sf
319 amrex::Real
Pr_t = amrex::Real(1.0) / amrex::Real(3.0);
327 amrex::Real
Cs = 0.0;
331 amrex::Real
Ce = 0.93;
333 amrex::Real
Ck = 0.1;
337 amrex::Real
Cb = 0.35;
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real pp(amrex::Real y)
Definition: ERF_MicrophysicsUtils.H:230
AMREX_ENUM(LESType, None, Smagorinsky, Smagorinsky2D, Deardorff)
void query_one_or_per_level(const amrex::ParmParse &pp, const char *query_string, T &query_var, const int lev, const int maxlev)
Definition: ERF_TurbStruct.H:14
@ T
Definition: ERF_IndexDefines.H:110
Definition: ERF_MYNNStruct.H:9
amrex::Real SMmax
Definition: ERF_MYNNStruct.H:56
amrex::Real SHmax
Definition: ERF_MYNNStruct.H:58
amrex::Real SQfac
Definition: ERF_MYNNStruct.H:52
amrex::Real C4
Definition: ERF_MYNNStruct.H:48
amrex::Real C1
Definition: ERF_MYNNStruct.H:45
amrex::Real C3
Definition: ERF_MYNNStruct.H:47
amrex::Real C2
Definition: ERF_MYNNStruct.H:46
amrex::Real A2
Definition: ERF_MYNNStruct.H:42
amrex::Real SHmin
Definition: ERF_MYNNStruct.H:57
amrex::Real B1
Definition: ERF_MYNNStruct.H:43
amrex::Real B2
Definition: ERF_MYNNStruct.H:44
amrex::Real C5
Definition: ERF_MYNNStruct.H:49
amrex::Real SMmin
Definition: ERF_MYNNStruct.H:55
amrex::Real A1
Definition: ERF_MYNNStruct.H:41
bool diffuse_moistvars
Definition: ERF_MYNNStruct.H:63
Definition: ERF_MYNNStruct.H:66
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)
Definition: ERF_MYNNStruct.H:67
Definition: ERF_TurbStruct.H:39
bool smag2d
Definition: ERF_TurbStruct.H:328
amrex::Real sigma_k
Definition: ERF_TurbStruct.H:344
MYNNLevel25 pbl_mynn
Definition: ERF_TurbStruct.H:358
PBLType pbl_type
Definition: ERF_TurbStruct.H:356
amrex::Real pbl_mrf_const_b
Definition: ERF_TurbStruct.H:389
bool use_pbl_tke
Definition: ERF_TurbStruct.H:366
amrex::Real Sc_t_inv
Definition: ERF_TurbStruct.H:324
amrex::Real Rt_min
Definition: ERF_TurbStruct.H:339
bool use_keqn
Definition: ERF_TurbStruct.H:363
amrex::Real pbl_mrf_coriolis_freq
Definition: ERF_TurbStruct.H:386
MYNNLevel2 pbl_mynn_level2
Definition: ERF_TurbStruct.H:359
RANSType rans_type
Definition: ERF_TurbStruct.H:353
amrex::Real pbl_mrf_Ribcr
Definition: ERF_TurbStruct.H:387
bool advect_tke
Definition: ERF_TurbStruct.H:396
amrex::Real Ck
Definition: ERF_TurbStruct.H:333
amrex::Real Cmu0
Definition: ERF_TurbStruct.H:336
bool pbl_ysu_use_consistent_coriolis
Definition: ERF_TurbStruct.H:375
amrex::Real Cb
Definition: ERF_TurbStruct.H:337
amrex::Real pbl_mrf_sf
Definition: ERF_TurbStruct.H:391
void init_params(int lev, int max_level, std::string pp_prefix)
Definition: ERF_TurbStruct.H:41
amrex::Real pbl_ysu_land_Ribcr
Definition: ERF_TurbStruct.H:381
bool mrf_moistvars
Definition: ERF_TurbStruct.H:393
bool use_tke
Definition: ERF_TurbStruct.H:368
bool diffuse_tke_3D
Definition: ERF_TurbStruct.H:398
amrex::Real Cs
Definition: ERF_TurbStruct.H:327
amrex::Real Pr_t_inv
Definition: ERF_TurbStruct.H:320
amrex::Real Ce_wall
Definition: ERF_TurbStruct.H:332
amrex::Real Ce
Definition: ERF_TurbStruct.H:331
LESType les_type
Definition: ERF_TurbStruct.H:316
amrex::Real pbl_ysu_coriolis_freq
Definition: ERF_TurbStruct.H:372
bool pbl_ysu_force_over_water
Definition: ERF_TurbStruct.H:378
void display(int lev)
Definition: ERF_TurbStruct.H:199
amrex::Real Pr_t
Definition: ERF_TurbStruct.H:319
bool use_kturb
Definition: ERF_TurbStruct.H:362
amrex::Real theta_ref
Definition: ERF_TurbStruct.H:347
amrex::Real Sc_t
Definition: ERF_TurbStruct.H:323
amrex::Real Rt_crit
Definition: ERF_TurbStruct.H:338
amrex::Real pbl_ysu_unst_Ribcr
Definition: ERF_TurbStruct.H:383
bool mix_isotropic
Definition: ERF_TurbStruct.H:350
amrex::Real l_g_max
Definition: ERF_TurbStruct.H:340