OGS
CreateConstitutiveRelation.cpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
5
6#include "CreateCreepBGRa.h"
7#include "CreateEhlers.h"
12#include "CreateLubby2.h"
13#ifdef OGS_USE_MFRONT
14#include "MFront/CreateMFront.h"
15#endif // OGS_USE_MFRONT
16
18#include "MechanicsBase.h"
19
20namespace MaterialLib
21{
22namespace Solids
23{
24template <int DisplacementDim>
25std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>
27 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
28 std::optional<ParameterLib::CoordinateSystem> const&
29 local_coordinate_system,
30 BaseLib::ConfigTree const& config)
31{
32 auto const type =
34 config.peekConfigParameter<std::string>("type");
35
36 if (type == "Ehlers")
37 {
39 parameters, config);
40 }
41 if (type == "LinearElasticIsotropic")
42 {
43 const bool skip_type_checking = false;
45 DisplacementDim>(parameters, config, skip_type_checking);
46 }
47 if (type == "LinearElasticOrthotropic")
48 {
49 const bool skip_type_checking = false;
51 DisplacementDim>(
52 parameters, local_coordinate_system, config, skip_type_checking);
53 }
54 if (type == "LinearElasticTransverseIsotropic")
55 {
56 const bool skip_type_checking = false;
58 DisplacementDim>(
59 parameters, local_coordinate_system, config, skip_type_checking);
60 }
61 if (type == "LinearElasticIsotropicSoftening")
62 {
63 const bool skip_type_checking = false;
65 DisplacementDim>(parameters, config, skip_type_checking);
66 }
67 if (type == "Lubby2")
68 {
70 parameters, config);
71 }
72 if (type == "CreepBGRa")
73 {
75 parameters, config);
76 }
77 if (type == "MFront")
78 {
79#ifdef OGS_USE_MFRONT
81 parameters, local_coordinate_system, config);
82#else // OGS_USE_MFRONT
84 "OGS is compiled without MFront support. See OGS_USE_MFRONT CMake "
85 "option.");
86#endif // OGS_USE_MFRONT
87 }
88 OGS_FATAL("Cannot construct constitutive relation of given type '{:s}'.",
89 type);
90}
91
92template std::unique_ptr<MaterialLib::Solids::MechanicsBase<2>>
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 std::unique_ptr<MaterialLib::Solids::MechanicsBase<3>>
101 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
102 std::optional<ParameterLib::CoordinateSystem> const&
103 local_coordinate_system,
104 BaseLib::ConfigTree const& config);
105
106template <int DisplacementDim>
107std::map<int,
108 std::shared_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>>
110 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
111 std::optional<ParameterLib::CoordinateSystem> const&
112 local_coordinate_system,
113 MeshLib::PropertyVector<int> const* const material_ids,
114 BaseLib::ConfigTree const& config)
115{
118 parameters,
119 local_coordinate_system,
120 material_ids,
121 config,
123}
124
125template std::map<int, std::shared_ptr<MaterialLib::Solids::MechanicsBase<2>>>
127 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
128 std::optional<ParameterLib::CoordinateSystem> const&
129 local_coordinate_system,
130 MeshLib::PropertyVector<int> const* const material_ids,
131 BaseLib::ConfigTree const& config);
132
133template std::map<int, std::shared_ptr<MaterialLib::Solids::MechanicsBase<3>>>
135 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
136 std::optional<ParameterLib::CoordinateSystem> const&
137 local_coordinate_system,
138 MeshLib::PropertyVector<int> const* const material_ids,
139 BaseLib::ConfigTree const& config);
140} // namespace Solids
141} // namespace MaterialLib
#define OGS_FATAL(...)
Definition Error.h:19
T peekConfigParameter(std::string const &param) const
std::unique_ptr< MaterialLib::Solids::MechanicsBase< DisplacementDim > > createCreepBGRa(std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, BaseLib::ConfigTree const &config)
std::unique_ptr< SolidEhlers< DisplacementDim > > createEhlers(std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, BaseLib::ConfigTree const &config)
std::unique_ptr< Lubby2< DisplacementDim > > createLubby2(std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, BaseLib::ConfigTree const &config)
std::unique_ptr< MechanicsBase< DisplacementDim > > createMFront(std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, BaseLib::ConfigTree const &config)
std::unique_ptr< LinearElasticIsotropicSoftening< DisplacementDim > > createLinearElasticIsotropicSoftening(std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, BaseLib::ConfigTree const &config, const bool skip_type_checking)
std::map< int, std::shared_ptr< MaterialLib::Solids::MechanicsBase< DisplacementDim > > > createConstitutiveRelations(std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, MeshLib::PropertyVector< int > const *const material_ids, BaseLib::ConfigTree const &config)
std::unique_ptr< LinearElasticTransverseIsotropic< DisplacementDim > > createLinearElasticTransverseIsotropic(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::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::unique_ptr< LinearElasticIsotropic< DisplacementDim > > createLinearElasticIsotropic(std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, BaseLib::ConfigTree const &config, const bool skip_type_checking)
std::map< int, std::shared_ptr< SolidConstitutiveRelation > > createConstitutiveRelationsGeneric(std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, MeshLib::PropertyVector< int > const *const material_ids, 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::shared_ptr< MaterialLib::Solids::MechanicsBase< 2 > > > createConstitutiveRelations< 2 >(std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, MeshLib::PropertyVector< int > const *const material_ids, 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)
template std::map< int, std::shared_ptr< MaterialLib::Solids::MechanicsBase< 3 > > > createConstitutiveRelations< 3 >(std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, MeshLib::PropertyVector< int > const *const material_ids, BaseLib::ConfigTree const &config)