1 #ifndef ERF_ADV_STRUCT_H_
2 #define ERF_ADV_STRUCT_H_
7 #include <AMReX_ParmParse.H>
8 #include <AMReX_Print.H>
10 #include <AMReX_Geometry.H>
23 amrex::ParmParse
pp(pp_prefix);
27 std::string dycore_horiz_adv_string =
"" ; std::string dycore_vert_adv_string =
"";
28 std::string dryscal_horiz_adv_string =
"" ; std::string dryscal_vert_adv_string =
"";
29 pp.query(
"dycore_horiz_adv_type" , dycore_horiz_adv_string);
30 pp.query(
"dycore_vert_adv_type" , dycore_vert_adv_string);
31 pp.query(
"dryscal_horiz_adv_type" , dryscal_horiz_adv_string);
32 pp.query(
"dryscal_vert_adv_type" , dryscal_vert_adv_string);
34 std::string moistscal_horiz_adv_string =
""; std::string moistscal_vert_adv_string =
"";
35 pp.query(
"moistscal_horiz_adv_type", moistscal_horiz_adv_string);
36 pp.query(
"moistscal_vert_adv_type" , moistscal_vert_adv_string);
39 amrex::Print() <<
"Using efficient advection scheme" << std::endl;
42 if ( (dycore_horiz_adv_string ==
"Blended_3rd4th") ||
43 (dycore_horiz_adv_string ==
"Blended_5th6th") )
47 "The dycore horizontal upwinding fraction must be between 0 and 1");
50 if ( (dycore_vert_adv_string ==
"Blended_3rd4th") ||
51 (dycore_vert_adv_string ==
"Blended_5th6th") )
55 "The dycore vertical upwinding fraction must be between 0 and 1");
58 if ( (dryscal_horiz_adv_string ==
"Blended_3rd4th") ||
59 (dryscal_horiz_adv_string ==
"Blended_5th6th") )
63 "The dry scalar horizontal upwinding fraction must be between 0 and 1");
66 if ( (dryscal_vert_adv_string ==
"Blended_3rd4th") ||
67 (dryscal_vert_adv_string ==
"Blended_5th6th") )
71 "The dry scalar vertical upwinding fraction must be between 0 and 1");
74 if ( (moistscal_horiz_adv_string ==
"Blended_3rd4th") ||
75 (moistscal_horiz_adv_string ==
"Blended_5th6th") )
79 "The moist scalar horizontal upwinding fraction must be between 0 and 1");
82 if ( (moistscal_vert_adv_string ==
"Blended_3rd4th") ||
83 (moistscal_vert_adv_string ==
"Blended_5th6th") )
87 "The moist scalar vertical upwinding fraction must be between 0 and 1");
90 if ( (dycore_horiz_adv_string ==
"Centered_2nd") ||
91 (dycore_horiz_adv_string ==
"Upwind_3rd" ) ||
92 (dycore_horiz_adv_string ==
"Blended_3rd4th") ||
93 (dycore_horiz_adv_string ==
"Centered_4th") ||
94 (dycore_horiz_adv_string ==
"Upwind_5th" ) ||
95 (dycore_horiz_adv_string ==
"Blended_5th6th") ||
96 (dycore_horiz_adv_string ==
"Centered_6th") ||
97 (dycore_horiz_adv_string ==
"WENO3" ) ||
98 (dycore_horiz_adv_string ==
"WENOZ3" ) ||
99 (dycore_horiz_adv_string ==
"WENO5" ) ||
100 (dycore_horiz_adv_string ==
"WENOZ5" ) ||
101 (dycore_horiz_adv_string ==
"WENO7" ) ||
102 (dycore_horiz_adv_string ==
"WENOZ7" ))
107 if ( (dycore_vert_adv_string ==
"Centered_2nd") ||
108 (dycore_vert_adv_string ==
"Upwind_3rd" ) ||
109 (dycore_vert_adv_string ==
"Blended_3rd4th") ||
110 (dycore_vert_adv_string ==
"Centered_4th") ||
111 (dycore_vert_adv_string ==
"Upwind_5th" ) ||
112 (dycore_vert_adv_string ==
"Blended_5th6th") ||
113 (dycore_vert_adv_string ==
"Centered_6th") ||
114 (dycore_vert_adv_string ==
"WENO3" ) ||
115 (dycore_vert_adv_string ==
"WENOZ3" ) ||
116 (dycore_vert_adv_string ==
"WENO5" ) ||
117 (dycore_vert_adv_string ==
"WENOZ5" ) ||
118 (dycore_vert_adv_string ==
"WENO7" ) ||
119 (dycore_vert_adv_string ==
"WENOZ7" ))
124 if ( (dryscal_horiz_adv_string ==
"Centered_2nd") ||
125 (dryscal_horiz_adv_string ==
"Upwind_3rd" ) ||
126 (dryscal_horiz_adv_string ==
"Upwind_3rd_SL") ||
127 (dryscal_horiz_adv_string ==
"Blended_3rd4th") ||
128 (dryscal_horiz_adv_string ==
"Centered_4th") ||
129 (dryscal_horiz_adv_string ==
"Upwind_5th" ) ||
130 (dryscal_horiz_adv_string ==
"Blended_5th6th") ||
131 (dryscal_horiz_adv_string ==
"Centered_6th") ||
132 (dryscal_horiz_adv_string ==
"WENO3" ) ||
133 (dryscal_horiz_adv_string ==
"WENOZ3" ) ||
134 (dryscal_horiz_adv_string ==
"WENOMZQ3" ) ||
135 (dryscal_horiz_adv_string ==
"WENO5" ) ||
136 (dryscal_horiz_adv_string ==
"WENOZ5" ) ||
137 (dryscal_horiz_adv_string ==
"WENO7" ) ||
138 (dryscal_horiz_adv_string ==
"WENOZ7" ) )
143 if ( (dryscal_vert_adv_string ==
"Centered_2nd") ||
144 (dryscal_vert_adv_string ==
"Upwind_3rd" ) ||
145 (dryscal_vert_adv_string ==
"Upwind_3rd_SL") ||
146 (dryscal_vert_adv_string ==
"Blended_3rd4th") ||
147 (dryscal_vert_adv_string ==
"Centered_4th") ||
148 (dryscal_vert_adv_string ==
"Upwind_5th" ) ||
149 (dryscal_vert_adv_string ==
"Blended_5th6th") ||
150 (dryscal_vert_adv_string ==
"Centered_6th") ||
151 (dryscal_vert_adv_string ==
"WENO3" ) ||
152 (dryscal_vert_adv_string ==
"WENOZ3" ) ||
153 (dryscal_vert_adv_string ==
"WENOMZQ3" ) ||
154 (dryscal_vert_adv_string ==
"WENO5" ) ||
155 (dryscal_vert_adv_string ==
"WENOZ5" ) ||
156 (dryscal_vert_adv_string ==
"WENO7" ) ||
157 (dryscal_vert_adv_string ==
"WENOZ7" ))
162 if ( (moistscal_horiz_adv_string ==
"Centered_2nd") ||
163 (moistscal_horiz_adv_string ==
"Upwind_3rd" ) ||
164 (moistscal_horiz_adv_string ==
"Upwind_3rd_SL" ) ||
165 (moistscal_horiz_adv_string ==
"Blended_3rd4th") ||
166 (moistscal_horiz_adv_string ==
"Centered_4th") ||
167 (moistscal_horiz_adv_string ==
"Upwind_5th" ) ||
168 (moistscal_horiz_adv_string ==
"Blended_5th6th") ||
169 (moistscal_horiz_adv_string ==
"Centered_6th") ||
170 (moistscal_horiz_adv_string ==
"WENO3" ) ||
171 (moistscal_horiz_adv_string ==
"WENOZ3" ) ||
172 (moistscal_horiz_adv_string ==
"WENOMZQ3" ) ||
173 (moistscal_horiz_adv_string ==
"WENO5" ) ||
174 (moistscal_horiz_adv_string ==
"WENOZ5" ) ||
175 (moistscal_horiz_adv_string ==
"WENO7" ) ||
176 (moistscal_horiz_adv_string ==
"WENOZ7" ))
181 if ( (moistscal_vert_adv_string ==
"Centered_2nd") ||
182 (moistscal_vert_adv_string ==
"Upwind_3rd" ) ||
183 (moistscal_vert_adv_string ==
"Upwind_3rd_SL" ) ||
184 (moistscal_vert_adv_string ==
"Blended_3rd4th") ||
185 (moistscal_vert_adv_string ==
"Centered_4th") ||
186 (moistscal_vert_adv_string ==
"Upwind_5th" ) ||
187 (moistscal_vert_adv_string ==
"Blended_5th6th") ||
188 (moistscal_vert_adv_string ==
"Centered_6th") ||
189 (moistscal_vert_adv_string ==
"WENO3" ) ||
190 (moistscal_vert_adv_string ==
"WENOZ3" ) ||
191 (moistscal_vert_adv_string ==
"WENOMZQ3" ) ||
192 (moistscal_vert_adv_string ==
"WENO5" ) ||
193 (moistscal_vert_adv_string ==
"WENOZ5" ) ||
194 (moistscal_vert_adv_string ==
"WENO7" ) ||
195 (moistscal_vert_adv_string ==
"WENOZ7" ))
201 std::string terrain_type;
202 pp.query(
"terrain_type", terrain_type);
213 amrex::Print() <<
"Advection Choices: " << std::endl;
216 amrex::ParmParse
pp(pp_prefix);
217 std::string dycore_horiz_adv_string =
"" ; std::string dycore_vert_adv_string =
"";
218 std::string dryscal_horiz_adv_string =
"" ; std::string dryscal_vert_adv_string =
"";
219 pp.query(
"dycore_horiz_adv_type" , dycore_horiz_adv_string);
220 pp.query(
"dycore_vert_adv_type" , dycore_vert_adv_string);
221 pp.query(
"dryscal_horiz_adv_type" , dryscal_horiz_adv_string);
222 pp.query(
"dryscal_vert_adv_type" , dryscal_vert_adv_string);
223 std::string moistscal_horiz_adv_string =
""; std::string moistscal_vert_adv_string =
"";
224 pp.query(
"moistscal_horiz_adv_type", moistscal_horiz_adv_string);
225 pp.query(
"moistscal_vert_adv_type" , moistscal_vert_adv_string);
227 if (dycore_horiz_adv_string !=
"") {
228 amrex::Print() <<
" dycore_horiz_adv_type : " << dycore_horiz_adv_string;
232 if ( (dycore_horiz_adv_string ==
"Blended_3rd4th") ||
233 (dycore_horiz_adv_string ==
"Blended_5th6th") ) {
236 amrex::Print() << std::endl;
238 if (dycore_vert_adv_string !=
"") {
239 amrex::Print() <<
" dycore_vert_adv_type : " << dycore_vert_adv_string;
243 if ( (dycore_vert_adv_string ==
"Blended_3rd4th") ||
244 (dycore_vert_adv_string ==
"Blended_5th6th") ) {
247 amrex::Print() << std::endl;
249 if (dryscal_horiz_adv_string !=
"") {
250 amrex::Print() <<
" dryscal_horiz_adv_type : " << dryscal_horiz_adv_string;
254 if ( (dryscal_horiz_adv_string ==
"Blended_3rd4th") ||
255 (dryscal_horiz_adv_string ==
"Blended_5th6th") ) {
258 amrex::Print() << std::endl;
260 if (dryscal_vert_adv_string !=
"") {
261 amrex::Print() <<
" dryscal_vert_adv_type : " << dryscal_vert_adv_string;
265 if ( (dryscal_vert_adv_string ==
"Blended_3rd4th") ||
266 (dryscal_vert_adv_string ==
"Blended_5th6th") ) {
269 amrex::Print() << std::endl;
271 if (moistscal_horiz_adv_string !=
"") {
272 amrex::Print() <<
" moistscal_horiz_adv_type : " << moistscal_horiz_adv_string;
276 if ( (moistscal_horiz_adv_string ==
"Blended_3rd4th") ||
277 (moistscal_horiz_adv_string ==
"Blended_5th6th") ) {
280 amrex::Print() << std::endl;
282 if (moistscal_vert_adv_string !=
"") {
283 amrex::Print() <<
" moistscal_vert_adv_type : " << moistscal_vert_adv_string;
287 if ( (moistscal_vert_adv_string ==
"Blended_3rd4th") ||
288 (moistscal_vert_adv_string ==
"Blended_5th6th") ) {
291 amrex::Print() << std::endl;
298 return "Centered_2nd";
302 return "Upwind_3rd_SL";
304 return "Centered_4th";
308 return "Centered_6th";
330 if (adv_string ==
"Centered_2nd") {
332 }
else if ((adv_string ==
"Upwind_3rd") || (adv_string ==
"Blended_3rd4th")) {
334 }
else if (adv_string ==
"Upwind_3rd_SL") {
336 }
else if (adv_string ==
"Centered_4th") {
338 }
else if (adv_string ==
"Upwind_5th" || (adv_string ==
"Blended_5th6th")) {
340 }
else if (adv_string ==
"Centered_6th") {
342 }
else if (adv_string ==
"WENO3") {
344 }
else if (adv_string ==
"WENOZ3") {
346 }
else if (adv_string ==
"WENO5") {
348 }
else if (adv_string ==
"WENOZ5") {
350 }
else if (adv_string ==
"WENOMZQ3") {
352 }
else if (adv_string ==
"WENO7") {
354 }
else if (adv_string ==
"WENOZ7") {
364 bool using_weno_momentum =
381 amrex::ignore_unused(use_embedded_boundary, using_weno_momentum);
382 AMREX_ASSERT_WITH_MESSAGE(!using_weno_momentum || !use_embedded_boundary,
383 "WENO momentum advection schemes are not yet implemented for embedded boundaries. "
384 "Please use traditional momentum advection schemes when using embedded boundaries:\n"
AdvType
Definition: ERF_IndexDefines.H:221
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real pp(amrex::Real y)
Definition: ERF_MicrophysicsUtils.H:230
Definition: ERF_AdvStruct.H:19
void display(std::string &pp_prefix)
Definition: ERF_AdvStruct.H:211
void init_params(std::string pp_prefix)
Definition: ERF_AdvStruct.H:21
amrex::Vector< amrex::IntVect > zero_yflux
Definition: ERF_AdvStruct.H:414
void validate_weno_momentum_compatibility(bool use_embedded_boundary)
Definition: ERF_AdvStruct.H:361
AdvType adv_type_convert_string_to_advtype(std::string adv_string)
Definition: ERF_AdvStruct.H:328
amrex::Real dryscal_vert_upw_frac
Definition: ERF_AdvStruct.H:408
AdvType moistscal_horiz_adv_type
Definition: ERF_AdvStruct.H:399
AdvType dycore_vert_adv_type
Definition: ERF_AdvStruct.H:396
AdvType moistscal_vert_adv_type
Definition: ERF_AdvStruct.H:400
amrex::Real moistscal_vert_upw_frac
Definition: ERF_AdvStruct.H:410
amrex::Real dycore_vert_upw_frac
Definition: ERF_AdvStruct.H:406
bool use_efficient_advection
Definition: ERF_AdvStruct.H:394
amrex::Real moistscal_horiz_upw_frac
Definition: ERF_AdvStruct.H:409
AdvType dryscal_horiz_adv_type
Definition: ERF_AdvStruct.H:397
amrex::Vector< amrex::IntVect > zero_xflux
Definition: ERF_AdvStruct.H:413
amrex::Vector< amrex::IntVect > zero_zflux
Definition: ERF_AdvStruct.H:415
AdvType dycore_horiz_adv_type
Definition: ERF_AdvStruct.H:395
bool have_zero_flux_faces
Definition: ERF_AdvStruct.H:416
amrex::Real dycore_horiz_upw_frac
Definition: ERF_AdvStruct.H:405
std::string adv_type_convert_int_to_string(AdvType adv_int)
Definition: ERF_AdvStruct.H:295
AdvType dryscal_vert_adv_type
Definition: ERF_AdvStruct.H:398
amrex::Real dryscal_horiz_upw_frac
Definition: ERF_AdvStruct.H:407