6#include <deal.II/base/parameter_handler.h>
7#include <deal.II/base/patterns.h>
11#include <prismspf/config.h>
28static constexpr std::array<std::string_view, 3>
axis_labels {
"x",
"y",
"z"};
33template <std::ranges::input_range Range = std::vector<std::
string>>
34requires std::convertible_to<std::ranges::range_reference_t<Range>, std::string_view>
37 const std::string &existing_entry_name,
38 const Range &aliases = {})
40 for (
const auto &alias : aliases)
42 parameter_handler.declare_alias(existing_entry_name, alias);
55[[nodiscard]]
static std::array<std::string, 4>
60 std::string title_snake;
62 snake.reserve(
name.size());
63 title.reserve(
name.size());
64 title_snake.reserve(
name.size());
65 pascal.reserve(
name.size());
67 bool start_of_word =
true;
68 for (
char character :
name)
79 const char lower = (char) std::tolower((
unsigned char) character);
80 const char upper = (char) std::toupper((
unsigned char) character);
83 title += start_of_word ? upper : lower;
84 title_snake += start_of_word ? upper : lower;
85 pascal += start_of_word ? upper : lower;
87 start_of_word =
false;
93 std::move(title_snake),
101template <std::ranges::input_range Range>
102requires std::convertible_to<std::ranges::range_reference_t<Range>, std::string_view>
105 const std::string &existing_entry_name,
106 const Range &aliases)
112 for (
const auto &alias : aliases)
114 parameter_handler.declare_alias(existing_entry_name, std::string(alias));
121 const std::string_view &entry,
122 const std::string_view &default_value,
123 const dealii::Patterns::PatternBase &pattern,
124 const std::string_view &documentation,
125 const std::list<std::string_view> &aliases = {},
126 const std::string_view &warnings = {},
127 const std::string_view &example = {},
128 bool deprecated =
false)
130 const auto _entry = std::string(entry);
133 auto _doc = std::string(documentation);
135 if (!warnings.empty())
137 _doc +=
"\n\n@warning " + std::string(warnings) +
"\n@end_warning";
139 if (!example.empty())
141 _doc +=
"\n\n@example\n" + std::string(example) +
"\n@end_example";
144 parameter_handler.declare_entry(_entry, std::string(default_value), pattern, _doc);
145#if DEAL_II_VERSION_MAJOR >= 9 && DEAL_II_VERSION_MINOR >= 7
146 parameter_handler.mark_as_deprecated(_entry, deprecated);
152get(
const dealii::ParameterHandler ¶meter_handler,
const std::string_view &entry)
154 return parameter_handler.get(std::string(entry));
158get_int(
const dealii::ParameterHandler ¶meter_handler,
const std::string_view &entry)
161 return (
int) parameter_handler.get_integer(std::string(entry));
166 const std::string_view &entry)
169 return (
unsigned int) parameter_handler.get_integer(std::string(entry));
174 const std::string_view &entry)
176 return parameter_handler.get_double(std::string(entry));
180get_bool(
const dealii::ParameterHandler ¶meter_handler,
const std::string_view &entry)
182 return parameter_handler.get_bool(std::string(entry));
185template <
typename Map>
186requires requires(Map &map,
const typename Map::key_type &key) {
190typename Map::mapped_type
192 const std::string_view &entry,
195 const auto value =
get(parameter_handler, entry);
196 const auto iter = map.find(value);
197 AssertThrow(iter != map.end(), dealii::ExcMessage(
"Invalid selection"));
201static std::vector<std::string>
203 const std::string_view &entry)
205 return dealii::Utilities::split_string_list(parameter_handler.get(std::string(entry)));
208static std::vector<unsigned int>
210 const std::string_view &entry)
213 std::vector<unsigned int> list;
215 for (
const auto &list_entry :
get_string_list(parameter_handler, entry))
217 list.push_back((
unsigned int) std::stoul(list_entry));
227 static inline dealii::Patterns::Anything
233 static inline dealii::Patterns::Selection
236 return {std::string(options)};
239 static inline dealii::Patterns::Bool
245 static inline dealii::Patterns::Integer
248 return {-INT_MAX, INT_MAX};
251 static inline dealii::Patterns::Integer
257 static inline dealii::Patterns::Integer
263 static inline dealii::Patterns::Integer
266 return {-INT_MAX, 0};
269 static inline dealii::Patterns::Double
272 return {-DBL_MAX, DBL_MAX};
275 static inline dealii::Patterns::Double
278 return {0.0, DBL_MAX};
281 static inline dealii::Patterns::Double
284 return {-DBL_MAX, 0.0};
287 static inline dealii::Patterns::List
290 return {
Anything(), 0, INT_MAX,
","};
293 static inline dealii::Patterns::List
328 assign(dealii::ParameterHandler ¶meter_handler,
335 validate(
const std::vector<FieldAttributes> &field_attributes,
336 const std::vector<SolveBlock> &solve_blocks)
const = 0;
339PRISMS_PF_END_NAMESPACE
Structure to hold the attributes of a solve-block.
Definition solve_block.h:58
static constexpr unsigned int default_subsections
Max number of subsections.
Definition types.h:33
Definition conditional_ostreams.cc:20
Definition parameter_base.h:224
static dealii::Patterns::Selection Selection(std::string_view options)
Definition parameter_base.h:234
static dealii::Patterns::Double Double()
Definition parameter_base.h:270
static dealii::Patterns::List StringList()
Definition parameter_base.h:288
static dealii::Patterns::Double NegativeDouble()
Definition parameter_base.h:282
static dealii::Patterns::Integer Integer()
Definition parameter_base.h:246
static dealii::Patterns::Anything Anything()
Definition parameter_base.h:228
static dealii::Patterns::Integer UnsignedInteger()
Definition parameter_base.h:252
static dealii::Patterns::Integer PositiveInteger()
Definition parameter_base.h:258
static dealii::Patterns::Double PositiveDouble()
Definition parameter_base.h:276
static dealii::Patterns::Bool Bool()
Definition parameter_base.h:240
static dealii::Patterns::List UnsignedIntegerList()
Definition parameter_base.h:294
static dealii::Patterns::Integer NegativeInteger()
Definition parameter_base.h:264
static constexpr std::array< std::string_view, 3 > axis_labels
Cartesian axis labels.
Definition parameter_base.h:28
static std::vector< std::string > get_string_list(const dealii::ParameterHandler ¶meter_handler, const std::string_view &entry)
Definition parameter_base.h:202
static void declare_entry(dealii::ParameterHandler ¶meter_handler, const std::string_view &entry, const std::string_view &default_value, const dealii::Patterns::PatternBase &pattern, const std::string_view &documentation, const std::list< std::string_view > &aliases={}, const std::string_view &warnings={}, const std::string_view &example={}, bool deprecated=false)
Definition parameter_base.h:120
static void declare_aliases(dealii::ParameterHandler ¶meter_handler, const std::string &existing_entry_name, const Range &aliases={})
Definition parameter_base.h:36
static bool get_bool(const dealii::ParameterHandler ¶meter_handler, const std::string_view &entry)
Definition parameter_base.h:180
static int get_int(const dealii::ParameterHandler ¶meter_handler, const std::string_view &entry)
Definition parameter_base.h:158
static double get_double(const dealii::ParameterHandler ¶meter_handler, const std::string_view &entry)
Definition parameter_base.h:173
static std::string get(const dealii::ParameterHandler ¶meter_handler, const std::string_view &entry)
Definition parameter_base.h:152
Map::mapped_type get_selection(const dealii::ParameterHandler ¶meter_handler, const std::string_view &entry, Map &map)
Definition parameter_base.h:191
static void declare_aliases_with_generated(dealii::ParameterHandler ¶meter_handler, const std::string &existing_entry_name, const Range &aliases)
Definition parameter_base.h:104
static std::vector< unsigned int > get_unsigned_int_list(const dealii::ParameterHandler ¶meter_handler, const std::string_view &entry)
Definition parameter_base.h:209
static std::array< std::string, 4 > generate_aliases(std::string_view name)
Definition parameter_base.h:56
static unsigned int get_unsigned_int(const dealii::ParameterHandler ¶meter_handler, const std::string_view &entry)
Definition parameter_base.h:165
Structure to hold the attributes of a field. This includes things like the name, rank,...
Definition field_attributes.h:26
std::string name
Field name.
Definition field_attributes.h:46
virtual void validate(const std::vector< FieldAttributes > &field_attributes, const std::vector< SolveBlock > &solve_blocks) const =0
Validate.
virtual ~ParameterBase()=default
virtual void assign(dealii::ParameterHandler ¶meter_handler, unsigned int n_subsections=Numbers::default_subsections)=0
Assign the parameters from file.
ParameterBase(ParameterBase &&)=default
ParameterBase & operator=(ParameterBase &&)=default
ParameterBase(const ParameterBase &)=default
ParameterBase & operator=(const ParameterBase &)=default