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 IsSet_(
const std::string& paramName,
bool errorIfNotRegistered);
85 void Register_(
const std::string& paramName,
86 const std::string& paramTypeName,
87 const std::string& defaultValue,
88 const char* usageString);
91 void SetDefault_(
const std::string& paramName,
92 const std::string& paramValue);
108 void printUsage(
const std::string& helpPreamble,
110 const std::string& errorMsg =
"",
111 const bool showAll =
false);
114 using PositionalArgumentCallback = std::function<int(std::function<
void(
const std::string&,
115 const std::string&)>,
116 std::set<std::string>&,
143 const std::string& helpPreamble =
"");
186 template <
class Param>
187 auto Get(
bool errorIfNotRegistered =
true)
189 using ParamType = std::conditional_t<std::is_same_v<decltype(Param::value),
190 const char*
const>, std::string,
191 std::remove_const_t<decltype(Param::value)>>;
192 ParamType defaultValue = Param::value;
193 return detail::Get_(detail::getParamName<Param>(),
194 defaultValue, errorIfNotRegistered);
211 template <
class Param>
214 const std::string paramName = detail::getParamName<Param>();
215 std::ostringstream oss;
217 detail::SetDefault_(paramName, oss.str());
225 Parameter(
const std::string& k,
const std::string& v)
229 friend std::ostream& operator<<(std::ostream& os,
const Parameter& param)
231 os << param.key <<
"=\"" << param.value <<
'"';
235 bool operator==(
const Parameter& setting)
const 237 return setting.key == key
238 && setting.value == value;
241 bool operator !=(
const Parameter& setting)
const 243 return !(*
this == setting);
246 std::string key, value;
255 void getLists(std::vector<Parameter>& usedParams,
256 std::vector<Parameter>& unusedParams);
269 template <
class Param>
270 bool IsSet(
bool errorIfNotRegistered =
true)
272 return detail::IsSet_(detail::getParamName<Param>(), errorIfNotRegistered);
291 template <
class Param>
294 const std::string paramName = detail::getParamName<Param>();
295 const auto defaultValue = Param::value;
296 using ParamType = std::conditional_t<std::is_same_v<decltype(defaultValue),
297 const char*
const>, std::string,
298 std::remove_const_t<decltype(defaultValue)>>;
300 std::ostringstream oss;
302 detail::Register_(paramName, Dune::className<ParamType>(), oss.str(), usageString);
310 template <
class Param>
313 detail::Hide_(detail::getParamName<Param>());
320 bool IsRegistrationOpen();
329 void endRegistration();
334 #endif // OPM_PARAMETER_SYSTEM_HPP auto Get(bool errorIfNotRegistered=true)
Retrieve a runtime parameter.
Definition: parametersystem.hpp:187
void Hide()
Indicate that a given parameter should not be mentioned in the help message.
Definition: parametersystem.hpp:311
void SetDefault(decltype(Param::value) new_value)
Set a runtime parameter.
Definition: parametersystem.hpp:212
bool parseParameterFile(const std::string &fileName, bool overwrite)
Read the parameters from an INI-style file.
Definition: parametersystem.cpp:564
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:637
bool printUnused(std::ostream &os)
Print the list of unused run-time parameters.
Definition: parametersystem.cpp:791
Definition: parametersystem.hpp:50
A struct holding the key-value pair for a parameter.
Definition: parametersystem.hpp:223
Definition: blackoilnewtonmethodparams.hpp:31
void Register(const char *usageString)
Register a run-time parameter.
Definition: parametersystem.hpp:292
void reset()
Reset parameter system.
Definition: parametersystem.cpp:486
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:270
void getLists(std::vector< Parameter > &usedParams, std::vector< Parameter > &unusedParams)
Retrieves the lists of parameters specified at runtime and their values.
Definition: parametersystem.cpp:506
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:121
void printValues(std::ostream &os)
Print values of the run-time parameters.
Definition: parametersystem.cpp:742