32 template <
int DisplacementDim>
33 std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>
35 std::vector<std::unique_ptr<ParameterLib::ParameterBase>>
const& parameters,
36 std::optional<ParameterLib::CoordinateSystem>
const&
37 local_coordinate_system,
46 return MaterialLib::Solids::Ehlers::createEhlers<DisplacementDim>(
49 if (type ==
"LinearElasticIsotropic")
51 const bool skip_type_checking =
false;
53 DisplacementDim>(parameters, config, skip_type_checking);
55 if (type ==
"LinearElasticOrthotropic")
57 const bool skip_type_checking =
false;
60 parameters, local_coordinate_system, config, skip_type_checking);
64 return MaterialLib::Solids::Lubby2::createLubby2<DisplacementDim>(
67 if (type ==
"CreepBGRa")
69 return MaterialLib::Solids::Creep::createCreepBGRa<DisplacementDim>(
75 return MaterialLib::Solids::MFront::createMFront<DisplacementDim>(
76 parameters, local_coordinate_system, config);
79 "OGS is compiled without MFront support. See OGS_USE_MFRONT CMake "
83 OGS_FATAL(
"Cannot construct constitutive relation of given type '{:s}'.",
87 template <
int DisplacementDim>
89 std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>>
91 std::vector<std::unique_ptr<ParameterLib::ParameterBase>>
const& parameters,
92 std::optional<ParameterLib::CoordinateSystem>
const&
93 local_coordinate_system,
96 auto const constitutive_relation_configs =
100 std::map<int, std::unique_ptr<MechanicsBase<DisplacementDim>>>
101 constitutive_relations;
103 for (
auto const& constitutive_relation_config :
104 constitutive_relation_configs)
106 int const material_id =
108 constitutive_relation_config.getConfigAttribute<
int>(
"id", 0);
110 if (constitutive_relations.find(material_id) !=
111 constitutive_relations.end())
114 "Multiple constitutive relations were specified for the same "
115 "material id {:d}. Keep in mind, that if no material id is "
116 "specified, it is assumed to be 0 by default.",
120 constitutive_relations.emplace(
122 createConstitutiveRelation<DisplacementDim>(
124 local_coordinate_system,
125 constitutive_relation_config));
128 DBUG(
"Found {:d} constitutive relations.", constitutive_relations.size());
130 return constitutive_relations;
133 template std::map<int, std::unique_ptr<MaterialLib::Solids::MechanicsBase<2>>>
135 std::vector<std::unique_ptr<ParameterLib::ParameterBase>>
const& parameters,
136 std::optional<ParameterLib::CoordinateSystem>
const&
137 local_coordinate_system,
140 template std::map<int, std::unique_ptr<MaterialLib::Solids::MechanicsBase<3>>>
142 std::vector<std::unique_ptr<ParameterLib::ParameterBase>>
const& parameters,
143 std::optional<ParameterLib::CoordinateSystem>
const&
144 local_coordinate_system,
void DBUG(char const *fmt, Args const &... args)
T peekConfigParameter(std::string const ¶m) const
Range< SubtreeIterator > getConfigSubtreeList(std::string const &root) const
std::unique_ptr< LinearElasticIsotropic< DisplacementDim > > createLinearElasticIsotropic(std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, BaseLib::ConfigTree const &config, const bool skip_type_checking)
std::unique_ptr< LinearElasticOrthotropic< DisplacementDim > > createLinearElasticOrthotropic(std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, BaseLib::ConfigTree const &config, const bool skip_type_checking)
template std::map< int, std::unique_ptr< MaterialLib::Solids::MechanicsBase< 3 > > > createConstitutiveRelations< 3 >(std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, BaseLib::ConfigTree const &config)
std::unique_ptr< MaterialLib::Solids::MechanicsBase< DisplacementDim > > createConstitutiveRelation(std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, BaseLib::ConfigTree const &config)
std::map< int, std::unique_ptr< MaterialLib::Solids::MechanicsBase< DisplacementDim > > > createConstitutiveRelations(std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, BaseLib::ConfigTree const &config)
template std::map< int, std::unique_ptr< MaterialLib::Solids::MechanicsBase< 2 > > > createConstitutiveRelations< 2 >(std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, BaseLib::ConfigTree const &config)