1#ifndef DUNE_FEM_PARAMETER_HH
2#define DUNE_FEM_PARAMETER_HH
7#include <unordered_map>
215 static void append (
const std::string &key,
const std::string &value,
const bool force =
false ) {
container().
append( key, value, force ); }
222 template<
class NumberType>
223 static void append (
const std::string &key,
const NumberType &value,
const bool force =
false ) {
container().
append( key, value, force ); }
258 static void get (
const std::string &key, T &value )
273 static void get (
const std::string &key,
const T &defaultValue, T &value )
287 static void get (
const std::string &key,
const char* defaultValue, std::string &value )
301 template<
class T,
class Val
idator >
302 static void getValid (
const std::string &key,
const Validator &validator, T &value )
317 template<
class T,
class Val
idator >
318 static void getValid (
const std::string &key,
const T &defaultValue,
const Validator &validator, T &value )
349 static T
getValue (
const std::string &key,
const T &defaultValue )
364 template<
class T,
class Val
idator >
365 static T
getValidValue (
const std::string &key,
const Validator &validator )
382 template<
class T,
class Val
idator >
383 static T
getValidValue (
const std::string &key,
const T &defaultValue,
const Validator &validator )
389 static int getEnum (
const std::string &key,
const std::string (&values)[ n ] )
395 static int getEnum (
const std::string &key,
const std::string (&values)[ n ],
int defaultValue )
462 static void write (
const std::string &filename,
const std::string &fileextension =
"",
bool writeAll =
true );
497 static void write (
const std::string &
path,
const std::string &filename,
const std::string &fileextension,
bool writeAll =
true );
510 if(
path[
path.length()-1 ] !=
'/' )
516 inline void Parameter::write (
const std::string &filename,
const std::string &fileextension,
bool writeAll )
525 inline void Parameter::write (
const std::string &
path,
const std::string &filename,
const std::string &fileextension,
bool writeAll )
531 std::string fullname(
path );
533 fullname += filename;
534 fullname += fileextension;
536 std::ofstream file( fullname );
538 write( file, writeAll );
540 std::cerr <<
"Warning: Unable to write parameter file '" << fullname <<
"'" << std::endl;
549 template<
class ParamDefault,
class ParamImpl >
555 virtual ParamDefault *
clone ()
const
557 return new ParamImpl(
asImp() );
560 template <
class... Args>
566 return static_cast< const ParamImpl &
>( *this );
570 template<
class ParamDefault >
576 virtual ParamDefault *
clone ()
const
578 return new ParamDefault(
static_cast< const ParamDefault &
>( *
this ) );
586 const std::string rmPrefix_;
587 std::unordered_map<std::string,std::string> dict_;
588 ParameterDict(
const std::string &rmPrefix,
589 const std::unordered_map<std::string,std::string> &dict )
590 : rmPrefix_(rmPrefix), dict_(dict) {}
591 const std::string*
operator()(
const std::string &key,
const std::string *def )
595 if (key.compare(0,rmPrefix_.size(),rmPrefix_) == 0)
598 assert(key.size()>rmPrefix_.size());
599 std::string reducedKey = key.substr(rmPrefix_.size(),key.size());
600 auto pos = dict_.find( reducedKey );
601 if (pos != dict_.end())
602 return &(pos->second);
620 const std::string &rmPrefix,
621 const std::unordered_map<std::string,std::string> &dict )
626 const std::unordered_map<std::string,std::string> &dict )
633 std::pair<std::string,std::string> convertValueToString(
const std::pair<const char*,const char*> &keyValue)
636 std::pair<std::string,std::string> convertValueToString(
const std::pair<const char*,V> &keyValue)
637 {
return std::make_pair(keyValue.first,std::to_string(keyValue.second)); }
638 std::pair<std::string,std::string> convertValueToString(
const std::pair<std::string,const char*> &keyValue)
641 std::pair<std::string,std::string> convertValueToString(
const std::pair<std::string,V> &keyValue)
642 {
return std::make_pair(keyValue.first,std::to_string(keyValue.second)); }
648 template<
class... Values>
651 std::unordered_map<std::string,std::string> dict;
652 dict.insert({convertValueToString(keyValues)...});
659 void insertIntoMap(std::unordered_map<std::string,std::string> &dict,
660 const std::string &key,
const V &v)
661 { dict.insert(convertValueToString( std::make_pair(key,v) )); }
662 template<
class V,
class... Values>
663 void insertIntoMap(std::unordered_map<std::string,std::string> &dict,
664 const std::string &key,
const V &v, Values... keyValues)
666 dict.insert(convertValueToString( std::make_pair(key,v) ));
667 insertIntoMap(dict,keyValues...);
670 template<
class... Values>
673 std::unordered_map<std::string,std::string> dict;
674 insertIntoMap(dict,keyValues...);
681 typedef std::unordered_map<std::string,LambdaType>
DictType;
682 template <
class... KeyValues>
684 : rmPrefix_(rmPrefix), dict_()
686 insertIntoMap(keyValues...);
688 const std::string*
operator()(
const std::string &key,
const std::string *def )
692 if (key.compare(0,rmPrefix_.size(),rmPrefix_) == 0)
695 assert(key.size()>rmPrefix_.size());
696 std::string reducedKey = key.substr(rmPrefix_.size(),key.size());
697 auto pos = dict_.find( reducedKey );
698 if (pos != dict_.end())
700 tmp_ = pos->second();
723 static std::string convertValueToString(
const std::string &value)
725 static std::string convertValueToString(
const char* value)
728 static std::string convertValueToString(
const V &value)
731 template<class V, std::enable_if_t<std::is_convertible<V,const LambdaType&>::value,
int> i=0>
732 void insertIntoMap_(
const std::string &key,
const V &v, Dune::PriorityTag<2>)
733 { dict_.insert( std::make_pair(key, v )); }
735 auto insertIntoMap_(
const std::string &key,
const V &v, Dune::PriorityTag<1>)
736 -> void_t< decltype(std::declval<const V&>()()) >
737 { dict_.insert( std::make_pair(key, [v]() {
return convertValueToString(v()); } )); }
739 void insertIntoMap_(
const std::string &key,
const V &v, Dune::PriorityTag<0>)
740 { dict_.insert( std::make_pair(key, [v]() {
return convertValueToString(v); } )); }
743 void insertIntoMap(
const std::string &key,
const V &v)
744 { insertIntoMap_(key,v,PriorityTag<42>()); }
745 template<
class V,
class... Values>
746 void insertIntoMap(
const std::string &key,
const V &v, Values... keyValues)
748 insertIntoMap_(key,v,PriorityTag<42>());
749 insertIntoMap(keyValues...);
753 const std::string rmPrefix_;
757 template<
class... KeyValues>
std::string path
Definition: readioparams.cc:156
Definition: bindguard.hh:11
ParameterReader parameterDict(const std::string &rmPrefix, KeyValues... keyValues)
Definition: io/parameter.hh:758
static const std::string & checkParameterExistsString()
Definition: reader.hh:20
bool createDirectory(const std::string &inName)
create a directory
Definition: io.cc:19
BasicParameterReader< std::function< const std::string *(const std::string &, const std::string *) > > ParameterReader
Definition: reader.hh:315
bool directoryExists(const std::string &name)
check whether a directory exists
Definition: io.cc:58
class with singleton instance managing all persistent objects
Definition: persistencemanager.hh:141
Container for User Specified Parameters.
Definition: io/parameter.hh:191
static ParameterContainer & container()
Definition: io/parameter.hh:193
static bool verbose()
obtain the cached value for fem.verbose
Definition: io/parameter.hh:445
static T getValue(const std::string &key, const T &defaultValue)
get an optional parameter from the container
Definition: io/parameter.hh:349
static void getValid(const std::string &key, const Validator &validator, T &value)
get a mandatory parameter from the container
Definition: io/parameter.hh:302
static std::string commonOutputPath()
obtain common output path
Definition: io/parameter.hh:411
static T getValidValue(const std::string &key, const T &defaultValue, const Validator &validator)
get an optional parameter from the container
Definition: io/parameter.hh:383
static int getEnum(const std::string &key, const std::string(&values)[n], int defaultValue)
Definition: io/parameter.hh:395
static void get(const std::string &key, T &value)
get a mandatory parameter from the container
Definition: io/parameter.hh:258
static void append(const std::string &filename)
add parameters from a file to the container
Definition: io/parameter.hh:229
static T getValue(const std::string &key)
get a mandatory parameter from the container
Definition: io/parameter.hh:333
static std::string outputPath()
obtain unique output path for this process
Definition: io/parameter.hh:505
static void get(const std::string &key, const char *defaultValue, std::string &value)
get an optional parameter from the container special case for string
Definition: io/parameter.hh:287
static T getValidValue(const std::string &key, const Validator &validator)
get an optional parameter from the container
Definition: io/parameter.hh:365
static void write(std::ostream &out, bool writeAll=true)
write the parameter database to a stream
Definition: io/parameter.hh:477
static void append(const std::string &key, const std::string &value, const bool force=false)
add a single parameter to the container
Definition: io/parameter.hh:215
static bool exists(const std::string &key)
find out, whether a parameter is defined in the container
Definition: io/parameter.hh:247
static void get(const std::string &key, const T &defaultValue, T &value)
get an optional parameter from the container
Definition: io/parameter.hh:273
static void append(int &argc, char **argv)
add parameters from the command line RangeType gRight;
Definition: io/parameter.hh:208
static std::string commonInputPath()
obtain common input path
Definition: io/parameter.hh:439
static void getValid(const std::string &key, const T &defaultValue, const Validator &validator, T &value)
get an optional parameter from the container
Definition: io/parameter.hh:318
static int getEnum(const std::string &key, const std::string(&values)[n])
Definition: io/parameter.hh:389
static void appendDGF(const std::string &filename)
add parameters from a DGF file to the container
Definition: io/parameter.hh:238
static void append(const std::string &key, const NumberType &value, const bool force=false)
add a single parameter to the container
Definition: io/parameter.hh:223
static void write(const std::string &filename, const std::string &fileextension="", bool writeAll=true)
write the parameter database to a file
Definition: io/parameter.hh:516
Definition: io/parameter.hh:551
virtual ParamDefault * clone() const
Definition: io/parameter.hh:555
LocalParameter(Args... args)
Definition: io/parameter.hh:561
virtual ~LocalParameter()
Definition: io/parameter.hh:552
const ParamImpl & asImp() const
Definition: io/parameter.hh:564
virtual ParamDefault * clone() const
Definition: io/parameter.hh:576
virtual ~LocalParameter()
Definition: io/parameter.hh:573
Definition: io/parameter.hh:679
ParameterDict(const std::string &rmPrefix, KeyValues... keyValues)
Definition: io/parameter.hh:683
std::unordered_map< std::string, LambdaType > DictType
Definition: io/parameter.hh:681
std::function< std::string()> LambdaType
Definition: io/parameter.hh:680
const std::string * operator()(const std::string &key, const std::string *def)
Definition: io/parameter.hh:688
Definition: container.hh:74
std::string commonInputPath() const
Definition: container.hh:179
void write(std::ostream &out, bool writeAll=true) const
write the parameter database to a stream
Definition: container.hh:584
bool verbose() const
obtain the cached value for fem.verbose
Definition: container.hh:177
void append(int &argc, char **argv)
add parameters from the command line
Definition: container.hh:529
void appendDGF(const std::string &filename)
add parameters from a DGF file
Definition: container.hh:549
std::string commonOutputPath() const
Definition: container.hh:184
static std::string toString(const T &value)
Definition: parser.hh:35
int getEnum(const std::string &key, const std::string(&values)[n]) const
Definition: reader.hh:225
void get(const std::string &key, T &value) const
get mandatory parameter
Definition: reader.hh:59
T getValue(const std::string &key) const
get mandatory parameter
Definition: reader.hh:159
bool exists(const std::string &key) const
check, whether a parameter is defined
Definition: reader.hh:44
T getValidValue(const std::string &key, const Validator &validator) const
get optional parameter
Definition: reader.hh:197
void getValid(const std::string &key, const Validator &validator, T &value) const
get mandatory parameter
Definition: reader.hh:118
static int rank()
Definition: mpimanager.hh:401
return singleton instance of given Object type.
Definition: singleton.hh:88