117 Parameter(
const std::string& name, T value,
bool required, std::vector<T> range = {}) :
118 value_(value), name_(name), required_(required)
124 std::string name()
const {
return name_; };
125 T value()
const {
return value_; };
126 T operator()()
const {
return value_; };
127 bool defined()
const {
return value_set_; };
132 std::ostringstream str_stream;
133 str_stream << value_;
134 return str_stream.str();
137 friend std::ostream& operator << (std::ostream& out,
const Parameter<T>& param)
139 out << param.value();
144 void set(
const std::string& name,
bool required, T value) {
146 required_ = required;
151 void set(
const std::string& str_value)
153 if (str_value ==
"") {
157 auto str = str_value;
158 std::string::iterator end_pos = std::remove(str.begin(), str.end(),
' ');
159 str.erase(end_pos, str.end());
161 std::istringstream str_stream(str);
162 if (!(str_stream >> value_)) {
163 std::istringstream str_stream(str);
164 if (!(str_stream >> std::boolalpha >> value_)) {
165 throw std::runtime_error(
"Incorrect value '" + str +
"' for '" + name_ +
"'.");
172 bool check_required_set()
181 std::string name_ =
"";
182 bool required_ =
false;
183 bool value_set_ =
false;
184 std::vector<T> range_;
196 VectorParameter(
const std::string& name,
const std::vector<T>& value,
bool required, std::vector<T> range = {}) :
197 value_(value), name_(name), required_(required)
203 std::string name()
const {
return name_; };
204 std::vector<T> value()
const {
return value_; };
205 bool defined()
const {
return value_set_; };
206 int size()
const {
return value_.size(); };
208 std::vector<T> operator()()
const {
return value_; };
209 const double& operator[](
const int i)
const {
return value_[i]; };
216 if constexpr (std::is_same<T, std::string>::value) {
217 for (
auto v : value_) {
218 str +=
" " + v +
" ";
221 for (
auto v : value_) {
222 str +=
" " + std::to_string(v);
231 for (
int i = 0; i < param.size(); i++) {
232 out << param.value_[i];
238 void set(
const std::string& name,
bool required,
const std::vector<T>& value)
241 required_ = required;
246 void set(
const std::string& str_value)
248 if (str_value ==
"") {
252 std::string error_msg =
"Improper vector format '" + str_value +
"' found in '" + name_ +
"'." +
" Vector format is: (x,y,z)";
253 std::regex sep(
"\\(|\\)|\\,");
254 auto str = std::regex_replace(str_value, sep,
" ");
256 if constexpr (std::is_same<T, std::string>::value) {
257 std::stringstream ssin(str);
259 while (ssin >> value) {
260 value_.push_back(value);
264 std::istringstream ssin(str);
265 while (ssin >> value) {
266 value_.push_back(value);
271 bool check_required_set()
279 std::vector<T> value_;
281 bool required_ =
false;
282 bool value_set_ =
false;
283 std::vector<T> range_;
294 void set_xml_element_name(
const std::string& name)
296 xml_element_name = name;
302 param.
set(name, required, value);
308 param.
set(name, required, value);
314 param.
set(name, required, value);
320 param.
set(name, required, value);
324 void set_parameter(
const std::string& name, std::initializer_list<std::string> value,
bool required,
327 param.
set(name, required, value);
333 param.
set(name, required, value);
339 param.
set(name, required, value);
347 throw std::runtime_error(
"Unknown " + xml_element_name +
" XML element '" + name +
"'.");
350 std::visit([value](
auto&& p) { p->set(value); },
params_map[name]);
356 bool unset_found =
false;
359 if (std::visit([](
auto&& p) {
360 return !p->check_required_set();
362 throw std::runtime_error(xml_element_name +
" XML element '" + key +
"' has not been set.");
370 std::map<std::string,std::string> params;
373 std::visit([¶ms](
auto&& p) {
374 params[p->name()] = p->svalue();
385 std::cout << key <<
": ";
386 std::visit([](
auto& p) {
387 std::cout << p->name_ << std::endl;
388 std::cout << p->svalue() << std::endl;
398 std::string xml_element_name =
"";
412 bool defined()
const {
return value_set; };
413 void set_values(tinyxml2::XMLElement* con_model_params);
414 void print_parameters();
420 bool value_set =
false;
427 bool defined()
const {
return value_set; };
428 void set_values(tinyxml2::XMLElement* con_model_params);
429 void print_parameters();
434 bool value_set =
false;
444 bool defined()
const {
return value_set; };
445 void set_values(tinyxml2::XMLElement* con_model_params);
446 void print_parameters();
458 bool value_set =
false;
465 bool defined()
const {
return value_set; };
466 void set_values(tinyxml2::XMLElement* con_model_params);
467 void print_parameters();
473 bool value_set =
false;
480 bool defined()
const {
return value_set; };
481 void set_values(tinyxml2::XMLElement* con_model_params);
482 void print_parameters();
485 bool value_set =
false;
492 void set_values(tinyxml2::XMLElement* modl_params);
493 void print_parameters();
494 bool value_set =
false;
501 void set_values(tinyxml2::XMLElement* modl_params);
502 void print_parameters();
503 bool value_set =
false;
512 void print_parameters();
514 bool defined()
const {
return value_set; };
515 void set_values(tinyxml2::XMLElement* modl_params);
519 static const std::string GUCCIONE_MODEL;
520 static const std::string HGO_MODEL;
521 static const std::string HOLZAPFEL_OGDEN_MODEL;
522 static const std::string HOLZAPFEL_OGDEN_MA_MODEL;
523 static const std::string LEE_SACKS;
524 static const std::string NEOHOOKEAN_MODEL;
525 static const std::string STVENANT_KIRCHHOFF_MODEL;
539 bool value_set =
false;
550 bool defined()
const {
return value_set; };
551 void set_values(tinyxml2::XMLElement* xml_elem);
552 void print_parameters();
565 bool value_set =
false;
576 bool defined()
const {
return value_set; };
577 void set_values(tinyxml2::XMLElement* xml_elem);
585 bool value_set =
false;
598 static const std::string xml_element_name_;
600 bool defined()
const {
return value_set; };
601 void set_values(tinyxml2::XMLElement* xml_elem);
606 bool value_set =
false;
621 void print_parameters();
622 void set_values(tinyxml2::XMLElement* xml_elem);
657 static const std::string xml_element_name_;
659 void set_values(tinyxml2::XMLElement* xml_elem);
660 void print_parameters();
668 bool value_set =
false;
677 void print_parameters();
678 void set_values(tinyxml2::XMLElement* bc_params);
742 void print_parameters();
743 void set_values(tinyxml2::XMLElement* xml_elem);
750 std::vector<Parameter<bool>> output_list;
753 std::vector<Parameter<std::string>> alias_list;
770 void set_values(tinyxml2::XMLElement* xml_elem);
772 static const std::string xml_element_name_;
793 void set_values(tinyxml2::XMLElement* xml_elem);
810 bool defined()
const {
return value_set; };
811 void set_values(tinyxml2::XMLElement* xml_elemnt);
815 bool value_set =
false;
830 void print_parameters();
831 void set_values(tinyxml2::XMLElement* equation_params);
839 void print_parameters();
840 void set_values(tinyxml2::XMLElement* xml_elem);
853 void print_parameters();
854 void set_values(tinyxml2::XMLElement* xml_elem);
867 static const std::string CONSTANT_MODEL;
868 static const std::string CARREAU_YASUDA_MODEL;
869 static const std::string CASSONS_MODEL;
870 static const std::set<std::string> model_names;
872 void print_parameters();
873 void set_values(tinyxml2::XMLElement* xml_elem);
893 void print_parameters();
894 void set_values(tinyxml2::XMLElement* equation_params);
902 void print_parameters();
903 void set_values(tinyxml2::XMLElement* equation_params);
914 static const std::string NEWTONIAN_MODEL;
915 static const std::string POTENTIAL_MODEL;
916 static const std::set<std::string> model_names;
918 void print_parameters();
919 void set_values(tinyxml2::XMLElement* xml_elem);
936 void print_parameters();
937 void set_values(tinyxml2::XMLElement* fsi_file);
938 bool defined()
const {
return values_set_; };
940 bool values_set_ =
false;
955 void print_parameters();
956 void set_values(tinyxml2::XMLElement* fsi_file);
997 bool defined()
const {
return value_set; };
998 void print_parameters();
999 void set_values(tinyxml2::XMLElement* xml_elem);
1008 bool value_set =
false;
1018 bool defined()
const {
return value_set; };
1019 void print_parameters();
1020 void set_values(tinyxml2::XMLElement* xml_elem);
1026 bool value_set =
false;
1046 bool defined()
const {
return value_set; };
1047 void print_parameters();
1048 void set_values(tinyxml2::XMLElement* xml_elem);
1056 bool value_set =
false;
1079 void print_parameters();
1080 void set_values(tinyxml2::XMLElement* xml_elem);
1162 bool values_set_ =
false;
1164 bool defined()
const {
return values_set_; };
1165 void print_parameters();
1166 double get_edge_size(
const std::string& name)
const {
return max_edge_sizes_.at(name); }
1167 bool has_edge_size(
const std::string& name)
const {
return max_edge_sizes_.count(name) == 1; }
1168 void set_values(tinyxml2::XMLElement* mesh_elem);
1171 std::map<std::string, double> max_edge_sizes_;
1190 void print_parameters();
1191 void set_values(tinyxml2::XMLElement* xml_elem);
1224 void print_parameters();
1225 void set_values(tinyxml2::XMLElement* xml_elem);
1260 std::vector<BodyForceParameters*> body_forces;
1262 std::vector<BoundaryConditionParameters*> boundary_conditions;
1270 std::vector<DomainParameters*> domains;
1274 std::vector<OutputParameters*> outputs;
1315 void print_parameters();
1316 void set_values(tinyxml2::XMLElement* xml_element);
1318 std::string xml_element_name;
1357 void print_parameters();
1358 void set_values(tinyxml2::XMLElement* xml_elem);
1399 void print_parameters();
1400 void set_values(tinyxml2::XMLElement* mesh_elem);
1401 std::string get_name()
const {
return name.value(); };
1402 std::string get_path()
const {
return mesh_file_path.value(); };
1404 std::vector<FaceParameters*> face_parameters;
1416 std::vector<VectorParameter<double>> fiber_directions;
1440 static const std::set<std::string> constitutive_model_names;
1441 static const std::set<std::string> equation_names;
1442 static const std::string FSI_FILE;
1444 void get_logging_levels(
int& verbose,
int& warning,
int& debug);
1445 void print_parameters();
1446 void read_xml(std::string file_name);
1448 void set_contact_values(tinyxml2::XMLElement* root_element);
1449 void set_equation_values(tinyxml2::XMLElement* root_element);
1450 void set_mesh_values(tinyxml2::XMLElement* root_element);
1451 void set_precomputed_solution_values(tinyxml2::XMLElement* root_element);
1452 void set_projection_values(tinyxml2::XMLElement* root_element);
1457 std::vector<MeshParameters*> mesh_parameters;
1458 std::vector<EquationParameters*> equation_parameters;
1459 std::vector<ProjectionParameters*> projection_parameters;
Body force over a mesh using the "Add_BF" command.
Definition Parameters.h:618
static const std::string xml_element_name_
Define the XML element name for boundary condition parameters.
Definition Parameters.h:623
The BoundaryConditionParameters stores paramaters for various type of boundary conditions under the A...
Definition Parameters.h:674
static const std::string xml_element_name_
Define the XML element name for equation boundary condition parameters.
Definition Parameters.h:679
RCR values for Neumann BC type.
Definition Parameters.h:653
BoundaryConditionRCRParameters()
RCR values for Neumann BC type.
Definition Parameters.cpp:329
The ConstitutiveModelParameters class store parameters for various constitutive models.
Definition Parameters.h:509
void check_constitutive_model(const Parameter< std::string > &eq_type)
Check if a constitutive model is valid for the given equation.
Definition Parameters.cpp:810
static const std::map< std::string, std::string > constitutive_model_types
Supported constitutive model types and their aliases.
Definition Parameters.h:491
static const std::string xml_element_name_
Process parameters for various constitutive models.
Definition Parameters.h:516
Couple to reduced-order models.
Definition Parameters.h:544
static const std::string xml_element_name_
Couple to reduced-order models.
Definition Parameters.h:548
Coupling to GenBC.
Definition Parameters.h:570
static const std::string xml_element_name_
Coupling to GenBC.
Definition Parameters.h:574
Definition Parameters.h:594
The DomainParameters class stores parameters for the XML 'Domain' element to specify properties for s...
Definition Parameters.h:1073
static const std::string xml_element_name_
Define the XML element name for domain parameters.
Definition Parameters.h:1077
Definition Parameters.h:1012
static const std::string xml_element_name_
Define the XML element name for ECG leads parameters.
Definition Parameters.h:1016
The EquationParameters class stores parameters for the 'Add_equation' XML element used to specify an ...
Definition Parameters.h:1218
static const std::string xml_element_name_
Define the XML element name for equation parameters.
Definition Parameters.h:1222
The FaceParameters class is used to store parameters for the 'Add_face' XML element.
Definition Parameters.h:1353
static const std::string xml_element_name_
Process parameters for the 'Add_face' XML element.
Definition Parameters.h:1360
The FiberReinforcementStressParameters class stores fiber reinforcement stress parameters for the 'Fi...
Definition Parameters.h:1040
static const std::string xml_element_name_
Define the XML element name for fiber reinforcement stress parameters.
Definition Parameters.h:1044
Definition Parameters.h:836
Definition Parameters.h:850
Definition Parameters.h:827
Definition Parameters.h:861
static const std::string xml_element_name_
Process parameters for various fluid viscosity models.
Definition Parameters.h:865
The GeneralSimulationParameters class stores paramaters for the 'GeneralSimulationParameters' XML ele...
Definition Parameters.h:1311
GeneralSimulationParameters()
Process paramaters for the 'GeneralSimulationParameters' XML element.
Definition Parameters.cpp:1994
void set_values(tinyxml2::XMLElement *xml_element)
Set general parameters values from XML.
Definition Parameters.cpp:2053
Definition Parameters.h:424
Definition Parameters.h:462
Definition Parameters.h:441
Definition Parameters.h:409
The LinearAlgebraParameters class stores parameters for the 'Linear_algebra' XML element.
Definition Parameters.h:931
void check_input_parameters()
Check the validity of the input parameters.
Definition Parameters.cpp:2496
static const std::string xml_element_name_
Define the XML element name for equation output parameters.
Definition Parameters.h:933
The LinearSolverParameters class stores parameters for the 'LS' XML element.
Definition Parameters.h:951
static const std::string xml_element_name_
Define the XML element name for equation output parameters.
Definition Parameters.h:958
The MeshParameters class is used to store paramaters for the 'Add_mesh' XML element.
Definition Parameters.h:1393
static const std::string xml_element_name_
Define the XML element name for mesh parameters.
Definition Parameters.h:1397
Definition Parameters.h:477
Definition Parameters.h:489
NeoHookeanParameters()
There are no parameters associated with a Neohookean model.
Definition Parameters.cpp:724
The OutputParameters class stores parameters for the Output XML element under Add_equation.
Definition Parameters.h:736
std::string get_alias_value(const std::string &name)
Get the value of an alias by name.
Definition Parameters.cpp:1037
bool get_output_value(const std::string &name)
Get the value of an output by name.
Definition Parameters.cpp:1049
static const std::string xml_element_name_
Define the XML element name for equation output parameters.
Definition Parameters.h:740
The Parameter class template is used to store a named paramater and its scalar value as a basic type:...
Definition Parameters.h:113
void set(const std::string &name, bool required, T value)
Set the parameter name and value, and if it is required.
Definition Parameters.h:144
void set(const std::string &str_value)
Set the parameter value from a string.
Definition Parameters.h:151
std::string svalue()
Get the value of a parameter as a string.
Definition Parameters.h:130
Defines parameter name and value, and stores them in maps for settng values from XML.
Definition Parameters.h:289
void check_required()
Check if any required parameters have not been set.
Definition Parameters.h:354
void set_parameter(const std::string &name, const bool value, bool required, Parameter< bool > ¶m)
Set the name, default value and the parameter required flag.
Definition Parameters.h:300
std::map< std::string, std::string > get_parameter_list()
Get the defined parameters as a map of strings.
Definition Parameters.h:368
void set_parameter_value(const std::string &name, const std::string &value)
Set the value of a paramter from a string.
Definition Parameters.h:344
std::map< std::string, std::variant< Parameter< bool > *, Parameter< double > *, Parameter< int > *, Parameter< std::string > *, VectorParameter< double > *, VectorParameter< int > *, VectorParameter< std::string > * > > params_map
Map used for storing parameters by name / Parameter template union.
Definition Parameters.h:396
void print_parameter_list()
Print the parameters.
Definition Parameters.h:382
The Parameters class stores parameter values read in from a solver input file.
Definition Parameters.h:1435
void read_xml(std::string file_name)
Set the simulation parameter values given in an XML format file.
Definition Parameters.cpp:148
The PrecomputedSolutionParameters class stores parameters for the 'Precomputed_solution' XML element ...
Definition Parameters.h:766
The ProjectionParameters class stores parameters for the 'Add_projection' XML element used for fluid-...
Definition Parameters.h:789
static const std::string xml_element_name_
Define the XML element name for mesh parameters.
Definition Parameters.h:795
The RemesherParameters class stores parameters for the 'Remesher' XML element used for remeshing.
Definition Parameters.h:1157
static const std::string xml_element_name_
Define the XML element name for mesh parameters.
Definition Parameters.h:1161
Definition Parameters.h:890
Definition Parameters.h:908
static const std::string xml_element_name_
Process parameters for various solid viscosity models.
Definition Parameters.h:912
Definition Parameters.h:899
Definition Parameters.h:498
StVenantKirchhoffParameters()
There are no parameters associated with a StVenantKirchhoff model.
Definition Parameters.cpp:738
The StimulusParameters class stores parameters for 'Stimulus' XML element used to parameters for pace...
Definition Parameters.h:991
static const std::string xml_element_name_
Define the XML element name for equation output parameters.
Definition Parameters.h:995
The VariableWallPropsParameters class stores parameters for variable wall properties for the CMM equa...
Definition Parameters.h:806
static const std::string xml_element_name_
The VariableWallPropsParameters class stores parameters for variable wall properties for the CMM equa...
Definition Parameters.h:809
The VectorParameter class template is used to store a named paramater and its vector of values as a b...
Definition Parameters.h:192
void set(const std::string &str_value)
Set the parameter value from a string.
Definition Parameters.h:246
void set(const std::string &name, bool required, const std::vector< T > &value)
Set the parameter name and value, and if it is required.
Definition Parameters.h:238
std::string svalue()
Get the string representation of the parameter value.
Definition Parameters.h:212