/home/runner/work/amr-wind/amr-wind/amr-wind/core/MultiParser.H Source File

AMR-Wind API: /home/runner/work/amr-wind/amr-wind/amr-wind/core/MultiParser.H Source File
AMR-Wind API v0.1.0
CFD solver for wind plant simulations
Loading...
Searching...
No Matches
MultiParser.H
Go to the documentation of this file.
1#ifndef MULTIPARSER_H
2#define MULTIPARSER_H
3
5#include "AMReX_ParmParse.H"
6
7namespace amr_wind::utils {
8
18{
19public:
20 MultiParser(const std::string& default_prefix, const std::string& prefix)
21 : m_pp_default(default_prefix), m_pp(prefix)
22 {}
23
25 [[nodiscard]] const amrex::ParmParse& default_params() const
26 {
27 return m_pp_default;
28 }
29
31 [[nodiscard]] const amrex::ParmParse& params() const { return m_pp; }
32
34 [[nodiscard]] bool contains(const std::string& name) const
35 {
36 return m_pp.contains(name) || m_pp_default.contains(name);
37 }
38
44 void get(const std::string& name, vs::Vector& value) const
45 {
46 amrex::Vector<vs::Vector::value_type> val;
47 getarr(name, val);
48 AMREX_ALWAYS_ASSERT(val.size() == AMREX_SPACEDIM);
49 value.x() = val[0];
50 value.y() = val[1];
51 value.z() = val[2];
52 }
53
59 void query(const std::string& name, vs::Vector& value) const
60 {
61 amrex::Vector<vs::Vector::value_type> val;
62 queryarr(name, val);
63 if (!val.empty()) {
64 AMREX_ALWAYS_ASSERT(val.size() == AMREX_SPACEDIM);
65 value.x() = val[0];
66 value.y() = val[1];
67 value.z() = val[2];
68 }
69 }
70
76 void get_either(const std::string& name, vs::Vector& value) const
77 {
78 amrex::Vector<vs::Vector::value_type> val;
79 getarr(name, val);
80 AMREX_ALWAYS_ASSERT(val.size() == AMREX_SPACEDIM || val.size() == 1);
81 if (val.size() == 1) {
82 value.x() = val[0];
83 value.y() = val[0];
84 value.z() = val[0];
85 } else {
86 value.x() = val[0];
87 value.y() = val[1];
88 value.z() = val[2];
89 }
90 }
91
97 void query_either(const std::string& name, vs::Vector& value) const
98 {
99 amrex::Vector<vs::Vector::value_type> val;
100 queryarr(name, val);
101 if (!val.empty()) {
102 AMREX_ALWAYS_ASSERT(
103 val.size() == AMREX_SPACEDIM || val.size() == 1);
104 if (val.size() == 1) {
105 value.x() = val[0];
106 value.y() = val[0];
107 value.z() = val[0];
108 } else {
109 value.x() = val[0];
110 value.y() = val[1];
111 value.z() = val[2];
112 }
113 }
114 }
115
117 template <typename T>
118 void get(const std::string& name, T& value) const
119 {
120 if (m_pp.contains(name)) {
121 m_pp.get(name, value);
122 } else {
123 m_pp_default.get(name, value);
124 }
125 }
126
128 template <typename T>
129 void getarr(const std::string& name, T& value) const
130 {
131 if (m_pp.contains(name)) {
132 m_pp.getarr(name, value);
133 } else {
134 m_pp_default.getarr(name, value);
135 }
136 }
137
139 template <typename T>
140 void query(const std::string& name, T& value) const
141 {
142 m_pp_default.query(name, value);
143 m_pp.query(name, value);
144 }
145
148 template <typename T>
149 void queryarr(const std::string& name, T& value) const
150 {
151 m_pp_default.queryarr(name, value);
152 m_pp.queryarr(name, value);
153 }
154
155private:
156 amrex::ParmParse m_pp_default;
157 amrex::ParmParse m_pp;
158};
159
160} // namespace amr_wind::utils
161
162#endif /* MULTIPARSER_H */
void getarr(const std::string &name, T &value) const
Get a vector of values for the given keyword entry from either namespace.
Definition MultiParser.H:129
void query_either(const std::string &name, vs::Vector &value) const
Definition MultiParser.H:97
void get(const std::string &name, vs::Vector &value) const
Definition MultiParser.H:44
void queryarr(const std::string &name, T &value) const
Query a vector of values for the given keyword entry from either namespace.
Definition MultiParser.H:149
void get_either(const std::string &name, vs::Vector &value) const
Definition MultiParser.H:76
MultiParser(const std::string &default_prefix, const std::string &prefix)
Definition MultiParser.H:20
bool contains(const std::string &name) const
Check if the keyword is present in either namespace.
Definition MultiParser.H:34
void query(const std::string &name, T &value) const
Query the value for the keyword entry from either namespace.
Definition MultiParser.H:140
const amrex::ParmParse & default_params() const
Return the ParmParse instance for the default namespace.
Definition MultiParser.H:25
amrex::ParmParse m_pp
Definition MultiParser.H:157
const amrex::ParmParse & params() const
Return the ParmParse instance for the specialized namespace.
Definition MultiParser.H:31
void get(const std::string &name, T &value) const
Get the value for the keyword entry from either namespace.
Definition MultiParser.H:118
void query(const std::string &name, vs::Vector &value) const
Definition MultiParser.H:59
amrex::ParmParse m_pp_default
Definition MultiParser.H:156
Definition MultiParser.H:7
VectorT< amrex::Real > Vector
Definition vector.H:145
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE T & y() &
Definition vector.H:98
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE T & z() &
Definition vector.H:99
AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE T & x() &
Definition vector.H:97