1 #ifndef ERF_WALL_SCALAR_BC_H_
2 #define ERF_WALL_SCALAR_BC_H_
4 #include <AMReX_REAL.H>
5 #include <AMReX_ParmParse.H>
43 [[nodiscard]]
bool ok () const noexcept {
return error.empty(); }
54 inline ParsedWallScalarBC
57 bool density_specified_on_same_face,
60 if (!value_specified) {
64 if (density_specified_on_same_face) {
66 density_value * primitive_value};
78 inline ParsedWallScalarBC
82 if (!gradient_specified) {
96 bool gradient_specified)
98 return value_specified && gradient_specified;
109 const std::string& variable)
111 return face +
"." + variable +
" and " + face +
"." + variable
112 +
"_grad are mutually exclusive";
124 bool density_specified,
125 bool density_gradient_specified)
127 if (!density_specified && !density_gradient_specified) {
131 std::string message = face +
": density and density_grad must be omitted "
132 "on solid walls in anelastic mode (density is fixed by the base state)";
133 if (density_specified && density_gradient_specified) {
134 message +=
"; both keywords were supplied";
135 }
else if (density_specified) {
136 message +=
"; " + face +
".density was supplied";
138 message +=
"; " + face +
".density_grad was supplied";
151 return face +
".density_grad is not supported for NoSlipWall; use "
152 + face +
".density for a fixed compressible wall density or omit "
153 "wall density in anelastic mode";
164 inline WallFaceParseResult
166 const std::string& face,
171 const bool density_specified =
pp.query(
"density", density);
173 const bool density_gradient_specified =
pp.query(
"density_grad", density_grad);
175 const bool theta_specified =
pp.query(
"theta",
theta);
177 const bool theta_gradient_specified =
pp.query(
"theta_grad", theta_grad);
184 if (anelastic && (density_specified || density_gradient_specified)) {
186 face, density_specified, density_gradient_specified);
197 density_gradient_specified)) {
203 theta_gradient_specified)) {
208 if (density_specified) {
213 theta_specified,
theta, density_specified, density);
214 if (theta_gradient_specified) {
224 true,
qv, density_specified, density);
amrex::Real Real
Definition: ERF_ShocInterface.H:19
@ theta
Definition: ERF_SLM.H:20
@ qv
Definition: ERF_Kessler.H:30
Definition: ERF_WallScalarBC.H:9
WallScalarBCIntent
Definition: ERF_WallScalarBC.H:13
std::string wall_scalar_value_gradient_error(const std::string &face, const std::string &variable)
Definition: ERF_WallScalarBC.H:108
bool wall_scalar_value_gradient_conflict(bool value_specified, bool gradient_specified)
Definition: ERF_WallScalarBC.H:95
std::string anelastic_wall_density_error(const std::string &face, bool density_specified, bool density_gradient_specified)
Definition: ERF_WallScalarBC.H:123
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:55
SolidWallKind
Definition: ERF_WallScalarBC.H:20
std::string no_slip_density_gradient_error(const std::string &face)
Definition: ERF_WallScalarBC.H:149
ParsedWallScalarBC resolve_wall_scalar_gradient(bool gradient_specified, amrex::Real gradient)
Definition: ERF_WallScalarBC.H:79
WallFaceParseResult parse_wall_face_scalars(amrex::ParmParse &pp, const std::string &face, SolidWallKind wall_kind, bool anelastic)
Definition: ERF_WallScalarBC.H:165
Definition: ERF_WallScalarBC.H:30
ParsedWallScalarBC qv
Definition: ERF_WallScalarBC.H:33
ParsedWallScalarBC theta
Definition: ERF_WallScalarBC.H:32
ParsedWallScalarBC density
Definition: ERF_WallScalarBC.H:31
Definition: ERF_WallScalarBC.H:25
WallScalarBCIntent intent
Definition: ERF_WallScalarBC.H:26
amrex::Real stored_value
Definition: ERF_WallScalarBC.H:27
Definition: ERF_WallScalarBC.H:36
bool ok() const noexcept
Definition: ERF_WallScalarBC.H:43
ParsedWallFaceScalars scalars
Definition: ERF_WallScalarBC.H:37
std::string error
Definition: ERF_WallScalarBC.H:38