ERF
Energy Research and Forecasting: An Atmospheric Modeling Code
ERF_SpongeStruct.H
Go to the documentation of this file.
1 #ifndef ERF_SPONGE_STRUCT_H_
2 #define ERF_SPONGE_STRUCT_H_
3 
4 #include <string>
5 #include <iostream>
6 
7 #include <AMReX_ParmParse.H>
8 #include <AMReX_Print.H>
9 #include <AMReX_Gpu.H>
10 
11 /**
12  * @brief Sponge damping model used near selected domain boundaries.
13  */
14 AMREX_ENUM(SpongeType,
15  None, Standard, Input_Sponge
16 );
17 
18 /**
19  * Container holding the sponge-related choices
20  */
21 
22 struct SpongeChoice {
23  public:
24  /**
25  * @brief Read sponge-layer options from the input parameter database.
26  * @param pp_prefix ParmParse prefix for the ERF input namespace.
27  */
28  void init_params(std::string pp_prefix)
29  {
30  amrex::ParmParse pp(pp_prefix);
31 
32  // The default type is SpongeType::Standard
33  // Here we can overwrite the default with None or Input_Sponge
34  pp.query_enum_case_insensitive("sponge_type",sponge_type);
35 
36  if (sponge_type == SpongeType::None) return;
37 
38  pp.query("sponge_strength" , sponge_strength);
39 
40  // If sponge_strength == 0 then we set sponge_type to None
41  if (std::abs(sponge_strength) == zero)
42  {
43  sponge_type = SpongeType::None;
44  }
45  else
46  {
47  pp.query("use_xlo_sponge_damping", use_xlo_sponge_damping);
48  pp.query("use_xhi_sponge_damping", use_xhi_sponge_damping);
49  pp.query("use_ylo_sponge_damping", use_ylo_sponge_damping);
50  pp.query("use_yhi_sponge_damping", use_yhi_sponge_damping);
51  pp.query("use_zlo_sponge_damping", use_zlo_sponge_damping);
52  pp.query("use_zhi_sponge_damping", use_zhi_sponge_damping);
53 
55  pp.get("xlo_sponge_end" , xlo_sponge_end);
56  }
58  pp.get("xhi_sponge_start" , xhi_sponge_start);
59  }
61  pp.get("ylo_sponge_end" , ylo_sponge_end);
62  }
64  pp.get("yhi_sponge_start" , yhi_sponge_start);
65  }
67  pp.get("zlo_sponge_end" , zlo_sponge_end);
68  }
70  pp.get("zhi_sponge_start" , zhi_sponge_start);
71  }
72 
73  pp.query("sponge_density" , sponge_density);
74  pp.query("sponge_rhotheta" , sponge_rhotheta);
75  pp.query("sponge_rhomoist" , sponge_rhomoist);
76  pp.query("sponge_x_velocity" , sponge_x_velocity);
77  pp.query("sponge_y_velocity" , sponge_y_velocity);
78  pp.query("sponge_z_velocity" , sponge_z_velocity);
79  }
80  }
81 
82  /**
83  * @brief Print the configured sponge-layer options.
84  */
85  void display()
86  {
87  amrex::Print() << "Sponge choices: " << std::endl;
88  }
89 
90  bool use_xlo_sponge_damping = false;
91  bool use_xhi_sponge_damping = false;
92  bool use_ylo_sponge_damping = false;
93  bool use_yhi_sponge_damping = false;
94  bool use_zlo_sponge_damping = false;
95  bool use_zhi_sponge_damping = false;
96 
98 
99  inline static
100  SpongeType sponge_type = SpongeType::Standard;
101 
111 };
112 
113 /**
114  * @var SpongeChoice::use_xlo_sponge_damping
115  * @brief Whether sponge damping is applied at the low-x boundary.
116  * @var SpongeChoice::use_xhi_sponge_damping
117  * @brief Whether sponge damping is applied at the high-x boundary.
118  * @var SpongeChoice::use_ylo_sponge_damping
119  * @brief Whether sponge damping is applied at the low-y boundary.
120  * @var SpongeChoice::use_yhi_sponge_damping
121  * @brief Whether sponge damping is applied at the high-y boundary.
122  * @var SpongeChoice::use_zlo_sponge_damping
123  * @brief Whether sponge damping is applied at the low-z boundary.
124  * @var SpongeChoice::use_zhi_sponge_damping
125  * @brief Whether sponge damping is applied at the high-z boundary.
126  * @var SpongeChoice::sponge_strength
127  * @brief Sponge damping strength.
128  * @var SpongeChoice::sponge_type
129  * @brief Selected sponge damping model.
130  * @var SpongeChoice::xlo_sponge_end
131  * @brief Physical end location of the low-x sponge layer.
132  * @var SpongeChoice::xhi_sponge_start
133  * @brief Physical start location of the high-x sponge layer.
134  * @var SpongeChoice::ylo_sponge_end
135  * @brief Physical end location of the low-y sponge layer.
136  * @var SpongeChoice::yhi_sponge_start
137  * @brief Physical start location of the high-y sponge layer.
138  * @var SpongeChoice::zlo_sponge_end
139  * @brief Physical end location of the low-z sponge layer.
140  * @var SpongeChoice::zhi_sponge_start
141  * @brief Physical start location of the high-z sponge layer.
142  * @var SpongeChoice::sponge_density
143  * @brief Target density used by sponge damping.
144  * @var SpongeChoice::sponge_rhotheta
145  * @brief Target rho-theta used by sponge damping.
146  * @var SpongeChoice::sponge_rhomoist
147  * @brief Target moist density variable used by sponge damping.
148  * @var SpongeChoice::sponge_x_velocity
149  * @brief Target x velocity used by sponge damping.
150  * @var SpongeChoice::sponge_y_velocity
151  * @brief Target y velocity used by sponge damping.
152  * @var SpongeChoice::sponge_z_velocity
153  * @brief Target vertical velocity used by sponge damping.
154  */
155 #endif
constexpr amrex::Real one
Definition: ERF_Constants.H:9
constexpr amrex::Real zero
Definition: ERF_Constants.H:8
ParmParse pp("prob")
amrex::Real Real
Definition: ERF_ShocInterface.H:19
AMREX_ENUM(SpongeType, None, Standard, Input_Sponge)
Sponge damping model used near selected domain boundaries.
Definition: ERF_SpongeStruct.H:22
amrex::Real zlo_sponge_end
Physical end location of the low-z sponge layer.
Definition: ERF_SpongeStruct.H:104
amrex::Real xlo_sponge_end
Physical end location of the low-x sponge layer.
Definition: ERF_SpongeStruct.H:102
bool use_zlo_sponge_damping
Whether sponge damping is applied at the low-z boundary.
Definition: ERF_SpongeStruct.H:94
amrex::Real sponge_y_velocity
Target y velocity used by sponge damping.
Definition: ERF_SpongeStruct.H:109
amrex::Real sponge_x_velocity
Target x velocity used by sponge damping.
Definition: ERF_SpongeStruct.H:108
amrex::Real ylo_sponge_end
Physical end location of the low-y sponge layer.
Definition: ERF_SpongeStruct.H:103
amrex::Real sponge_strength
Sponge damping strength.
Definition: ERF_SpongeStruct.H:97
amrex::Real sponge_rhotheta
Target rho-theta used by sponge damping.
Definition: ERF_SpongeStruct.H:106
amrex::Real yhi_sponge_start
Physical start location of the high-y sponge layer.
Definition: ERF_SpongeStruct.H:103
void display()
Print the configured sponge-layer options.
Definition: ERF_SpongeStruct.H:85
bool use_zhi_sponge_damping
Whether sponge damping is applied at the high-z boundary.
Definition: ERF_SpongeStruct.H:95
amrex::Real sponge_density
Target density used by sponge damping.
Definition: ERF_SpongeStruct.H:105
static SpongeType sponge_type
Selected sponge damping model.
Definition: ERF_SpongeStruct.H:100
amrex::Real sponge_z_velocity
Target vertical velocity used by sponge damping.
Definition: ERF_SpongeStruct.H:110
bool use_xlo_sponge_damping
Whether sponge damping is applied at the low-x boundary.
Definition: ERF_SpongeStruct.H:90
void init_params(std::string pp_prefix)
Read sponge-layer options from the input parameter database.
Definition: ERF_SpongeStruct.H:28
amrex::Real xhi_sponge_start
Physical start location of the high-x sponge layer.
Definition: ERF_SpongeStruct.H:102
bool use_xhi_sponge_damping
Whether sponge damping is applied at the high-x boundary.
Definition: ERF_SpongeStruct.H:91
amrex::Real sponge_rhomoist
Target moist density variable used by sponge damping.
Definition: ERF_SpongeStruct.H:107
bool use_yhi_sponge_damping
Whether sponge damping is applied at the high-y boundary.
Definition: ERF_SpongeStruct.H:93
bool use_ylo_sponge_damping
Whether sponge damping is applied at the low-y boundary.
Definition: ERF_SpongeStruct.H:92
amrex::Real zhi_sponge_start
Physical start location of the high-z sponge layer.
Definition: ERF_SpongeStruct.H:104