/home/runner/work/kynema-sgf/kynema-sgf/src/core/MultiParser.H Source File

Kynema-SGF API: /home/runner/work/kynema-sgf/kynema-sgf/src/core/MultiParser.H Source File
Kynema-SGF 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
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_WITH_MESSAGE(
49 val.size() == AMREX_SPACEDIM,
50 "name = " + name + ", val.size() = " + std::to_string(val.size()) +
51 ", AMREX_SPACEDIM = " + std::to_string(AMREX_SPACEDIM));
52 value.x() = val[0];
53 value.y() = val[1];
54 value.z() = val[2];
55 }
56
62 void query(const std::string& name, vs::Vector& value) const
63 {
64 amrex::Vector<vs::Vector::value_type> val;
65 queryarr(name, val);
66 if (!val.empty()) {
67 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(
68 val.size() == AMREX_SPACEDIM,
69 "name = " + name +
70 ", val.size() = " + std::to_string(val.size()) +
71 ", AMREX_SPACEDIM = " + std::to_string(AMREX_SPACEDIM));
72 value.x() = val[0];
73 value.y() = val[1];
74 value.z() = val[2];
75 }
76 }
77
83 void get_either(const std::string& name, vs::Vector& value) const
84 {
85 amrex::Vector<vs::Vector::value_type> val;
86 getarr(name, val);
87 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(
88 val.size() == AMREX_SPACEDIM || val.size() == 1,
89 "name = " + name + ", val.size() = " + std::to_string(val.size()) +
90 ", AMREX_SPACEDIM = " + std::to_string(AMREX_SPACEDIM));
91 if (val.size() == 1) {
92 value.x() = val[0];
93 value.y() = val[0];
94 value.z() = val[0];
95 } else {
96 value.x() = val[0];
97 value.y() = val[1];
98 value.z() = val[2];
99 }
100 }
101
107 void query_either(const std::string& name, vs::Vector& value) const
108 {
109 amrex::Vector<vs::Vector::value_type> val;
110 queryarr(name, val);
111 if (!val.empty()) {
112 AMREX_ALWAYS_ASSERT_WITH_MESSAGE(
113 val.size() == AMREX_SPACEDIM || val.size() == 1,
114 "name = " + name +
115 ", val.size() = " + std::to_string(val.size()) +
116 ", AMREX_SPACEDIM = " + std::to_string(AMREX_SPACEDIM));
117 if (val.size() == 1) {
118 value.x() = val[0];
119 value.y() = val[0];
120 value.z() = val[0];
121 } else {
122 value.x() = val[0];
123 value.y() = val[1];
124 value.z() = val[2];
125 }
126 }
127 }
128
130 template <typename T>
131 void get(const std::string& name, T& value) const
132 {
133 if (m_pp.contains(name)) {
134 m_pp.get(name, value);
135 } else {
136 m_pp_default.get(name, value);
137 }
138 }
139
141 template <typename T>
142 void getarr(const std::string& name, T& value) const
143 {
144 if (m_pp.contains(name)) {
145 m_pp.getarr(name, value);
146 } else {
147 m_pp_default.getarr(name, value);
148 }
149 }
150
152 template <typename T>
153 void query(const std::string& name, T& value) const
154 {
155 m_pp_default.query(name, value);
156 m_pp.query(name, value);
157 }
158
161 template <typename T>
162 void queryarr(const std::string& name, T& value) const
163 {
164 m_pp_default.queryarr(name, value);
165 m_pp.queryarr(name, value);
166 }
167
168private:
169 amrex::ParmParse m_pp_default;
170 amrex::ParmParse m_pp;
171};
172
173} // namespace kynema_sgf::utils
174
175#endif /* MULTIPARSER_H */
const amrex::ParmParse & params() const
Return the ParmParse instance for the specialized namespace.
Definition MultiParser.H:31
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:142
void query(const std::string &name, T &value) const
Query the value for the keyword entry from either namespace.
Definition MultiParser.H:153
void get(const std::string &name, vs::Vector &value) const
Definition MultiParser.H:44
const amrex::ParmParse & default_params() const
Return the ParmParse instance for the default namespace.
Definition MultiParser.H:25
void query_either(const std::string &name, vs::Vector &value) const
Definition MultiParser.H:107
MultiParser(const std::string &default_prefix, const std::string &prefix)
Definition MultiParser.H:20
void get(const std::string &name, T &value) const
Get the value for the keyword entry from either namespace.
Definition MultiParser.H:131
void get_either(const std::string &name, vs::Vector &value) const
Definition MultiParser.H:83
bool contains(const std::string &name) const
Check if the keyword is present in either namespace.
Definition MultiParser.H:34
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:162
amrex::ParmParse m_pp
Definition MultiParser.H:170
void query(const std::string &name, vs::Vector &value) const
Definition MultiParser.H:62
amrex::ParmParse m_pp_default
Definition MultiParser.H:169
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