1 #ifndef ERF_WALL_SCALAR_BC_H_
2 #define ERF_WALL_SCALAR_BC_H_
4 #include <AMReX_REAL.H>
5 #include <AMReX_ParmParse.H>
61 [[nodiscard]]
bool ok () const noexcept {
return error.empty(); }
72 inline ParsedWallScalarBC
75 bool density_specified_on_same_face,
78 if (!value_specified) {
82 if (density_specified_on_same_face) {
84 density_value * primitive_value};
96 inline ParsedWallScalarBC
100 if (!gradient_specified) {
114 bool gradient_specified)
116 return value_specified && gradient_specified;
127 const std::string& variable)
129 return face +
"." + variable +
" and " + face +
"." + variable
130 +
"_grad are mutually exclusive";
142 bool density_specified,
143 bool density_gradient_specified)
145 if (!density_specified && !density_gradient_specified) {
149 std::string message = face +
": density and density_grad must be omitted "
150 "on solid walls in anelastic mode (density is fixed by the base state)";
151 if (density_specified && density_gradient_specified) {
152 message +=
"; both keywords were supplied";
153 }
else if (density_specified) {
154 message +=
"; " + face +
".density was supplied";
156 message +=
"; " + face +
".density_grad was supplied";
169 return face +
".density_grad is not supported for NoSlipWall; use "
170 + face +
".density for a fixed compressible wall density or omit "
171 "wall density in anelastic mode";
182 inline WallFaceParseResult
184 const std::string& face,
200 pp.queryAdd(
"density", density);
201 const bool density_specified = (density >
amrex::Real(0.0));
202 if (!density_specified) { density =
amrex::Real(0.0); }
205 const bool density_gradient_specified =
pp.query(
"density_grad", density_grad);
213 const bool theta_gradient_specified =
pp.query(
"theta_grad", theta_grad);
222 if (anelastic && (density_specified || density_gradient_specified)) {
224 face, density_specified, density_gradient_specified);
235 density_gradient_specified)) {
241 theta_gradient_specified)) {
246 if (density_specified) {
251 theta_specified,
theta, density_specified, density);
252 if (theta_gradient_specified) {
262 true,
qv, density_specified, density);
amrex::Real Real
Definition: ERF_ShocInterface.H:19
@ neumann
Definition: ERF_IndexDefines.H:345
@ foextrap
Definition: ERF_IndexDefines.H:339
@ ext_dir
Definition: ERF_IndexDefines.H:340
@ ext_dir_prim
Definition: ERF_IndexDefines.H:343
@ theta
Definition: ERF_Kessler.H:26
@ qv
Definition: ERF_Kessler.H:31
Definition: ERF_WallScalarBC.H:10
WallScalarBCIntent
Definition: ERF_WallScalarBC.H:14
std::string wall_scalar_value_gradient_error(const std::string &face, const std::string &variable)
Definition: ERF_WallScalarBC.H:126
bool wall_scalar_value_gradient_conflict(bool value_specified, bool gradient_specified)
Definition: ERF_WallScalarBC.H:113
int logical_boundary_type(WallScalarBCIntent intent) noexcept
Definition: ERF_WallScalarBC.H:23
std::string anelastic_wall_density_error(const std::string &face, bool density_specified, bool density_gradient_specified)
Definition: ERF_WallScalarBC.H:141
ParsedWallScalarBC resolve_wall_scalar_value(bool value_specified, amrex::Real primitive_value, bool density_specified_on_same_face, amrex::Real density_value)
Definition: ERF_WallScalarBC.H:73
SolidWallKind
Definition: ERF_WallScalarBC.H:38
std::string no_slip_density_gradient_error(const std::string &face)
Definition: ERF_WallScalarBC.H:167
ParsedWallScalarBC resolve_wall_scalar_gradient(bool gradient_specified, amrex::Real gradient)
Definition: ERF_WallScalarBC.H:97
WallFaceParseResult parse_wall_face_scalars(amrex::ParmParse &pp, const std::string &face, SolidWallKind wall_kind, bool anelastic)
Definition: ERF_WallScalarBC.H:183
Definition: ERF_WallScalarBC.H:48
ParsedWallScalarBC qv
Definition: ERF_WallScalarBC.H:51
ParsedWallScalarBC theta
Definition: ERF_WallScalarBC.H:50
ParsedWallScalarBC density
Definition: ERF_WallScalarBC.H:49
Definition: ERF_WallScalarBC.H:43
WallScalarBCIntent intent
Definition: ERF_WallScalarBC.H:44
amrex::Real stored_value
Definition: ERF_WallScalarBC.H:45
Definition: ERF_WallScalarBC.H:54
bool ok() const noexcept
Definition: ERF_WallScalarBC.H:61
ParsedWallFaceScalars scalars
Definition: ERF_WallScalarBC.H:55
std::string error
Definition: ERF_WallScalarBC.H:56