OGS
CreateConstitutiveRelation.cpp
Go to the documentation of this file.
1
13
14#include "CreateCreepBGRa.h"
15#include "CreateEhlers.h"
18#include "CreateLubby2.h"
19#ifdef OGS_USE_MFRONT
20#include "MFront/CreateMFront.h"
21#endif // OGS_USE_MFRONT
22
24#include "MechanicsBase.h"
25
26namespace MaterialLib
27{
28namespace Solids
29{
30template <int DisplacementDim>
31std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>
33 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
34 std::optional<ParameterLib::CoordinateSystem> const&
35 local_coordinate_system,
36 BaseLib::ConfigTree const& config)
37{
38 auto const type =
40 config.peekConfigParameter<std::string>("type");
41
42 if (type == "Ehlers")
43 {
44 return MaterialLib::Solids::Ehlers::createEhlers<DisplacementDim>(
45 parameters, config);
46 }
47 if (type == "LinearElasticIsotropic")
48 {
49 const bool skip_type_checking = false;
51 DisplacementDim>(parameters, config, skip_type_checking);
52 }
53 if (type == "LinearElasticOrthotropic")
54 {
55 const bool skip_type_checking = false;
57 DisplacementDim>(
58 parameters, local_coordinate_system, config, skip_type_checking);
59 }
60 if (type == "Lubby2")
61 {
62 return MaterialLib::Solids::Lubby2::createLubby2<DisplacementDim>(
63 parameters, config);
64 }
65 if (type == "CreepBGRa")
66 {
67 return MaterialLib::Solids::Creep::createCreepBGRa<DisplacementDim>(
68 parameters, config);
69 }
70 if (type == "MFront")
71 {
72#ifdef OGS_USE_MFRONT
73 return MaterialLib::Solids::MFront::createMFront<DisplacementDim>(
74 parameters, local_coordinate_system, config);
75#else // OGS_USE_MFRONT
77 "OGS is compiled without MFront support. See OGS_USE_MFRONT CMake "
78 "option.");
79#endif // OGS_USE_MFRONT
80 }
81 OGS_FATAL("Cannot construct constitutive relation of given type '{:s}'.",
82 type);
83}
84
85template std::unique_ptr<MaterialLib::Solids::MechanicsBase<2>>
87 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
88 std::optional<ParameterLib::CoordinateSystem> const&
89 local_coordinate_system,
90 BaseLib::ConfigTree const& config);
91
92template std::unique_ptr<MaterialLib::Solids::MechanicsBase<3>>
94 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
95 std::optional<ParameterLib::CoordinateSystem> const&
96 local_coordinate_system,
97 BaseLib::ConfigTree const& config);
98
99template <int DisplacementDim>
100std::map<int,
101 std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>>
103 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
104 std::optional<ParameterLib::CoordinateSystem> const&
105 local_coordinate_system,
106 BaseLib::ConfigTree const& config)
107{
110 parameters,
111 local_coordinate_system,
112 config,
113 createConstitutiveRelation<DisplacementDim>);
114}
115
116template std::map<int, std::unique_ptr<MaterialLib::Solids::MechanicsBase<2>>>
118 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
119 std::optional<ParameterLib::CoordinateSystem> const&
120 local_coordinate_system,
121 BaseLib::ConfigTree const& config);
122
123template std::map<int, std::unique_ptr<MaterialLib::Solids::MechanicsBase<3>>>
125 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
126 std::optional<ParameterLib::CoordinateSystem> const&
127 local_coordinate_system,
128 BaseLib::ConfigTree const& config);
129} // namespace Solids
130} // namespace MaterialLib
#define OGS_FATAL(...)
Definition: Error.h:26
T peekConfigParameter(std::string const &param) const
std::unique_ptr< LinearElasticOrthotropic< DisplacementDim > > createLinearElasticOrthotropic(std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, BaseLib::ConfigTree const &config, const bool skip_type_checking)
std::map< int, std::unique_ptr< MaterialLib::Solids::MechanicsBase< DisplacementDim > > > createConstitutiveRelations(std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, BaseLib::ConfigTree const &config)
std::map< int, std::unique_ptr< SolidConstitutiveRelation > > createConstitutiveRelationsGeneric(std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, BaseLib::ConfigTree const &config, std::unique_ptr< SolidConstitutiveRelation >(*create_constitutive_relation)(std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &, std::optional< ParameterLib::CoordinateSystem > const &, BaseLib::ConfigTree const &))
template std::map< int, std::unique_ptr< MaterialLib::Solids::MechanicsBase< 2 > > > createConstitutiveRelations< 2 >(std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, BaseLib::ConfigTree const &config)
std::unique_ptr< LinearElasticIsotropic< DisplacementDim > > createLinearElasticIsotropic(std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, 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 &parameters, 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 &parameters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, BaseLib::ConfigTree const &config)