32 #ifndef OPM_PARAMETER_SYSTEM_HPP 33 #define OPM_PARAMETER_SYSTEM_HPP 35 #include <dune/common/classname.hh> 42 #include <type_traits> 49 template <
typename,
class =
void>
53 struct has_name<T, std::void_t<decltype(std::declval<T>().name)>>
54 :
public std::true_type {};
57 template<
class Parameter>
61 return Parameter::name;
63 std::string paramName = Dune::className<Parameter>();
64 paramName.replace(0, std::strlen(
"Opm::Parameters::"),
"");
65 const auto pos = paramName.find_first_of(
'<');
66 if (pos != std::string::npos) {
74 template<
class ParamType>
75 ParamType Get_(
const std::string& paramName, ParamType defaultValue,
76 bool errorIfNotRegistered);
79 void Hide_(
const std::string& paramName);
82 bool HideIfRegistered_(
const std::string& paramName);
85 bool IsSet_(
const std::string& paramName,
bool errorIfNotRegistered);
88 void Register_(
const std::string& paramName,
89 const std::string& paramTypeName,
90 const std::string& defaultValue,
91 const char* usageString);
94 void SetDefault_(
const std::string& paramName,
95 const std::string& paramValue);
111 void printUsage(
const std::string& helpPreamble,
113 const std::string& errorMsg =
"",
114 const bool showAll =
false);
117 using PositionalArgumentCallback = std::function<int(std::function<
void(
const std::string&,
118 const std::string&)>,
119 std::set<std::string>&,
146 const std::string& helpPreamble =
"");
189 template <
class Param>
190 auto Get(
bool errorIfNotRegistered =
true)
192 using ParamType = std::conditional_t<std::is_same_v<decltype(Param::value),
193 const char*
const>, std::string,
194 std::remove_const_t<decltype(Param::value)>>;
195 ParamType defaultValue = Param::value;
196 return detail::Get_(detail::getParamName<Param>(),
197 defaultValue, errorIfNotRegistered);
214 template <
class Param>
217 const std::string paramName = detail::getParamName<Param>();
218 std::ostringstream oss;
220 detail::SetDefault_(paramName, oss.str());
228 Parameter(
const std::string& k,
const std::string& v)
232 friend std::ostream& operator<<(std::ostream& os,
const Parameter& param)
234 os << param.key <<
"=\"" << param.value <<
'"';
238 bool operator==(
const Parameter& setting)
const 240 return setting.key == key
241 && setting.value == value;
244 bool operator !=(
const Parameter& setting)
const 246 return !(*
this == setting);
249 std::string key, value;
258 void getLists(std::vector<Parameter>& usedParams,
259 std::vector<Parameter>& unusedParams);
272 template <
class Param>
273 bool IsSet(
bool errorIfNotRegistered =
true)
275 return detail::IsSet_(detail::getParamName<Param>(), errorIfNotRegistered);
294 template <
class Param>
297 const std::string paramName = detail::getParamName<Param>();
298 const auto defaultValue = Param::value;
299 using ParamType = std::conditional_t<std::is_same_v<decltype(defaultValue),
300 const char*
const>, std::string,
301 std::remove_const_t<decltype(defaultValue)>>;
303 std::ostringstream oss;
305 detail::Register_(paramName, Dune::className<ParamType>(), oss.str(), usageString);
313 template <
class Param>
316 detail::Hide_(detail::getParamName<Param>());
324 template <
class Param>
327 return detail::HideIfRegistered_(detail::getParamName<Param>());
334 bool IsRegistrationOpen();
343 void endRegistration();
348 #endif // OPM_PARAMETER_SYSTEM_HPP auto Get(bool errorIfNotRegistered=true)
Retrieve a runtime parameter.
Definition: parametersystem.hpp:190
void Hide()
Indicate that a given parameter should not be mentioned in the help message.
Definition: parametersystem.hpp:314
void SetDefault(decltype(Param::value) new_value)
Set a runtime parameter.
Definition: parametersystem.hpp:215
bool parseParameterFile(const std::string &fileName, bool overwrite)
Read the parameters from an INI-style file.
Definition: parametersystem.cpp:610
std::string parseCommandLineOptions(int argc, const char **argv, const PositionalArgumentCallback &posArgCallback, const std::string &helpPreamble)
Parse the parameters provided on the command line.
Definition: parametersystem.cpp:683
bool printUnused(std::ostream &os)
Print the list of unused run-time parameters.
Definition: parametersystem.cpp:827
Definition: parametersystem.hpp:50
A struct holding the key-value pair for a parameter.
Definition: parametersystem.hpp:226
Definition: blackoilnewtonmethodparams.hpp:31
void Register(const char *usageString)
Register a run-time parameter.
Definition: parametersystem.hpp:295
void reset()
Reset parameter system.
Definition: parametersystem.cpp:532
auto getParamName()
get the name data member of a parameter
Definition: parametersystem.hpp:58
bool IsSet(bool errorIfNotRegistered=true)
Returns true if a parameter has been specified at runtime, false otherwise.
Definition: parametersystem.hpp:273
void getLists(std::vector< Parameter > &usedParams, std::vector< Parameter > &unusedParams)
Retrieves the lists of parameters specified at runtime and their values.
Definition: parametersystem.cpp:552
bool HideIfRegistered()
Indicate that a given parameter should not be mentioned in the help message if present.
Definition: parametersystem.hpp:325
std::function< int(std::function< void(const std::string &, const std::string &)>, std::set< std::string > &, std::string &, int, const char **, int, int)> PositionalArgumentCallback
Callback function for command line parsing.
Definition: parametersystem.hpp:124
void printValues(std::ostream &os)
Print values of the run-time parameters.
Definition: parametersystem.cpp:778