OGS
MaterialLib::Solids Namespace Reference

Namespaces

namespace  Creep
 
namespace  Ehlers
 
namespace  Lubby2
 
namespace  MFront
 
namespace  Phasefield
 

Classes

class  LinearElasticIsotropic
 
class  LinearElasticOrthotropic
 
struct  MechanicsBase
 

Enumerations

enum class  ConstitutiveModel {
  Ehlers , LinearElasticIsotropic , Lubby2 , CreepBGRa ,
  Invalid
}
 

Functions

template<int DisplacementDim>
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::unique_ptr< MaterialLib::Solids::MechanicsBase< 2 > > createConstitutiveRelation (std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, BaseLib::ConfigTree const &config)
 
template<int DisplacementDim>
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)
 
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)
 
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)
 
template<int DisplacementDim>
std::unique_ptr< MaterialLib::Solids::MechanicsBase< DisplacementDim > > createConstitutiveRelationIce (std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, BaseLib::ConfigTree const &config)
 
template std::unique_ptr< MaterialLib::Solids::MechanicsBase< 2 > > createConstitutiveRelationIce (std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &parameters, std::optional< ParameterLib::CoordinateSystem > const &local_coordinate_system, BaseLib::ConfigTree const &config)
 
template<typename SolidConstitutiveRelation >
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<int DisplacementDim>
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<int DisplacementDim>
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)
 
template std::unique_ptr< LinearElasticOrthotropic< 2 > > 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)
 
template<int DisplacementDim>
MathLib::KelvinVector::KelvinMatrixType< DisplacementDim > elasticTangentStiffness (double const first_lame_parameter, double const shear_modulus)
 
template<typename SolidMaterialsMap >
auto & selectSolidConstitutiveRelation (SolidMaterialsMap const &constitutive_relations, MeshLib::PropertyVector< int > const *const material_ids, std::size_t const element_id)
 

Enumeration Type Documentation

◆ ConstitutiveModel

Function Documentation

◆ createConstitutiveRelation() [1/2]

template<int DisplacementDim>
template std::unique_ptr< MaterialLib::Solids::MechanicsBase< 3 > > MaterialLib::Solids::createConstitutiveRelation ( std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &  parameters,
std::optional< ParameterLib::CoordinateSystem > const &  local_coordinate_system,
BaseLib::ConfigTree const &  config 
)
Input File Parameter:
material__solid__constitutive_relation__type

Definition at line 32 of file CreateConstitutiveRelation.cpp.

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}
#define OGS_FATAL(...)
Definition: Error.h:26
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)

References createLinearElasticIsotropic(), createLinearElasticOrthotropic(), OGS_FATAL, and BaseLib::ConfigTree::peekConfigParameter().

◆ createConstitutiveRelation() [2/2]

template std::unique_ptr< MaterialLib::Solids::MechanicsBase< 2 > > MaterialLib::Solids::createConstitutiveRelation ( std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &  parameters,
std::optional< ParameterLib::CoordinateSystem > const &  local_coordinate_system,
BaseLib::ConfigTree const &  config 
)

◆ createConstitutiveRelationIce() [1/2]

template<int DisplacementDim>
template std::unique_ptr< MaterialLib::Solids::MechanicsBase< 3 > > MaterialLib::Solids::createConstitutiveRelationIce ( std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &  parameters,
std::optional< ParameterLib::CoordinateSystem > const &  local_coordinate_system,
BaseLib::ConfigTree const &  config 
)
Input File Parameter:
material__solid__ice_constitutive_relation

Definition at line 22 of file CreateConstitutiveRelationIce.cpp.

27{
28 auto const ice_constitutive_relation_config =
30 config.getConfigSubtreeOptional("ice_constitutive_relation");
31
32 if (!ice_constitutive_relation_config)
33 {
34 return nullptr;
35 }
36
37 return MaterialLib::Solids::createConstitutiveRelation<DisplacementDim>(
38 parameters, local_coordinate_system, *ice_constitutive_relation_config);
39}

References BaseLib::ConfigTree::getConfigSubtreeOptional().

◆ createConstitutiveRelationIce() [2/2]

template std::unique_ptr< MaterialLib::Solids::MechanicsBase< 2 > > MaterialLib::Solids::createConstitutiveRelationIce ( std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &  parameters,
std::optional< ParameterLib::CoordinateSystem > const &  local_coordinate_system,
BaseLib::ConfigTree const &  config 
)

◆ createConstitutiveRelations()

template<int DisplacementDim>
std::map< int, std::unique_ptr< MaterialLib::Solids::MechanicsBase< DisplacementDim > > > MaterialLib::Solids::createConstitutiveRelations ( std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &  parameters,
std::optional< ParameterLib::CoordinateSystem > const &  local_coordinate_system,
BaseLib::ConfigTree const &  config 
)

Definition at line 102 of file CreateConstitutiveRelation.cpp.

107{
110 parameters,
111 local_coordinate_system,
112 config,
113 createConstitutiveRelation<DisplacementDim>);
114}
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 &))

References createConstitutiveRelationsGeneric().

◆ createConstitutiveRelations< 2 >()

template std::map< int, std::unique_ptr< MaterialLib::Solids::MechanicsBase< 2 > > > MaterialLib::Solids::createConstitutiveRelations< 2 > ( std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &  parameters,
std::optional< ParameterLib::CoordinateSystem > const &  local_coordinate_system,
BaseLib::ConfigTree const &  config 
)

◆ createConstitutiveRelations< 3 >()

template std::map< int, std::unique_ptr< MaterialLib::Solids::MechanicsBase< 3 > > > MaterialLib::Solids::createConstitutiveRelations< 3 > ( std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &  parameters,
std::optional< ParameterLib::CoordinateSystem > const &  local_coordinate_system,
BaseLib::ConfigTree const &  config 
)

◆ createConstitutiveRelationsGeneric()

template<typename SolidConstitutiveRelation >
std::map< int, std::unique_ptr< SolidConstitutiveRelation > > MaterialLib::Solids::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 >(*)(std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &, std::optional< ParameterLib::CoordinateSystem > const &, BaseLib::ConfigTree const &)  create_constitutive_relation 
)
Input File Parameter:
material__solid__constitutive_relation
Input File Parameter:
material__solid__constitutive_relation__id

Definition at line 20 of file CreateConstitutiveRelationsGeneric.h.

29{
30 auto const constitutive_relation_configs =
32 config.getConfigSubtreeList("constitutive_relation");
33
34 std::map<int, std::unique_ptr<SolidConstitutiveRelation>>
35 constitutive_relations;
36
37 for (auto const& constitutive_relation_config :
38 constitutive_relation_configs)
39 {
40 int const material_id =
42 constitutive_relation_config.getConfigAttribute<int>("id", 0);
43
44 if (constitutive_relations.find(material_id) !=
45 constitutive_relations.end())
46 {
48 "Multiple constitutive relations were specified for the same "
49 "material id {:d}. Keep in mind, that if no material id is "
50 "specified, it is assumed to be 0 by default.",
51 material_id);
52 }
53
54 constitutive_relations.emplace(
55 material_id,
56 create_constitutive_relation(parameters,
57 local_coordinate_system,
58 constitutive_relation_config));
59 }
60
61 DBUG("Found {:d} constitutive relations.", constitutive_relations.size());
62
63 return constitutive_relations;
64}
void DBUG(fmt::format_string< Args... > fmt, Args &&... args)
Definition: Logging.h:30

References DBUG(), BaseLib::ConfigTree::getConfigSubtreeList(), and OGS_FATAL.

Referenced by createConstitutiveRelations(), ProcessLib::LargeDeformation::ConstitutiveRelations::CreateConstitutiveSetting< DisplacementDim >::createSolidConstitutiveRelations(), and ProcessLib::ThermoRichardsMechanics::ConstitutiveStressSaturation_StrainPressureTemperature::CreateConstitutiveSetting< DisplacementDim >::createSolidConstitutiveRelations().

◆ createLinearElasticIsotropic()

template<int DisplacementDim>
std::unique_ptr< LinearElasticIsotropic< DisplacementDim > > MaterialLib::Solids::createLinearElasticIsotropic ( std::vector< std::unique_ptr< ParameterLib::ParameterBase > > const &  parameters,
BaseLib::ConfigTree const &  config,
const bool  skip_type_checking 
)
Input File Parameter:
material__solid__constitutive_relation__type
Input File Parameter:
material__solid__constitutive_relation__LinearElasticIsotropic__youngs_modulus
Input File Parameter:
material__solid__constitutive_relation__LinearElasticIsotropic__poissons_ratio

Definition at line 23 of file CreateLinearElasticIsotropic.h.

26{
27 if (!skip_type_checking)
28 {
30 config.checkConfigParameter("type", "LinearElasticIsotropic");
31 DBUG("Create LinearElasticIsotropic material");
32 }
33
34 // Youngs modulus
35 auto& youngs_modulus = ParameterLib::findParameter<double>(
37 config, "youngs_modulus", parameters, 1);
38
39 DBUG("Use '{:s}' as youngs_modulus parameter.", youngs_modulus.name);
40
41 // Poissons ratio
42 auto& poissons_ratio = ParameterLib::findParameter<double>(
44 config, "poissons_ratio", parameters, 1);
45
46 DBUG("Use '{:s}' as poissons_ratio parameter.", poissons_ratio.name);
47
48 typename LinearElasticIsotropic<DisplacementDim>::MaterialProperties mp{
49 youngs_modulus, poissons_ratio};
50
51 return std::make_unique<LinearElasticIsotropic<DisplacementDim>>(mp);
52}

References BaseLib::ConfigTree::checkConfigParameter(), and DBUG().

Referenced by createConstitutiveRelation().

◆ createLinearElasticOrthotropic() [1/2]

template<int DisplacementDim>
template std::unique_ptr< LinearElasticOrthotropic< 3 > > MaterialLib::Solids::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 
)
Input File Parameter:
material__solid__constitutive_relation__type
Input File Parameter:
material__solid__constitutive_relation__LinearElasticOrthotropic__youngs_moduli
Input File Parameter:
material__solid__constitutive_relation__LinearElasticOrthotropic__shear_moduli
Input File Parameter:
material__solid__constitutive_relation__LinearElasticOrthotropic__poissons_ratios

Definition at line 20 of file CreateLinearElasticOrthotropic.cpp.

25{
26 if (!skip_type_checking)
27 {
29 config.checkConfigParameter("type", "LinearElasticOrthotropic");
30 DBUG("Create LinearElasticOrthotropic material");
31 }
32
33 // The three Youngs moduli are required even in two-dimensional case. Same
34 // for the shear moduli and the Poissons ratios.
35 auto& youngs_moduli = ParameterLib::findParameter<double>(
37 config, "youngs_moduli", parameters, 3);
38 DBUG("Use '{:s}' as youngs_moduli parameter.", youngs_moduli.name);
39
40 // Shear moduli
41 auto& shear_moduli = ParameterLib::findParameter<double>(
43 config, "shear_moduli", parameters, 3);
44 DBUG("Use '{:s}' as shear_moduli parameter.", shear_moduli.name);
45
46 // Poissons ratios
47 auto& poissons_ratios = ParameterLib::findParameter<double>(
49 config, "poissons_ratios", parameters, 3);
50 DBUG("Use '{:s}' as poissons_ratios parameter.", poissons_ratios.name);
51
52 typename LinearElasticOrthotropic<DisplacementDim>::MaterialProperties mp{
53 youngs_moduli, shear_moduli, poissons_ratios};
54
55 return std::make_unique<LinearElasticOrthotropic<DisplacementDim>>(
56 mp, local_coordinate_system);
57}

References BaseLib::ConfigTree::checkConfigParameter(), and DBUG().

Referenced by createConstitutiveRelation().

◆ createLinearElasticOrthotropic() [2/2]

template std::unique_ptr< LinearElasticOrthotropic< 2 > > MaterialLib::Solids::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 
)

◆ elasticTangentStiffness()

template<int DisplacementDim>
MathLib::KelvinVector::KelvinMatrixType< DisplacementDim > MaterialLib::Solids::elasticTangentStiffness ( double const  first_lame_parameter,
double const  shear_modulus 
)

Definition at line 125 of file LinearElasticIsotropic.h.

127{
128 using KelvinMatrix =
130
131 KelvinMatrix tangentStiffness = KelvinMatrix::Zero();
132 tangentStiffness.template topLeftCorner<3, 3>().setConstant(
133 first_lame_parameter);
134 tangentStiffness.noalias() += 2 * shear_modulus * KelvinMatrix::Identity();
135 return tangentStiffness;
136}
Eigen::Matrix< double, kelvin_vector_dimensions(DisplacementDim), kelvin_vector_dimensions(DisplacementDim), Eigen::RowMajor > KelvinMatrixType
Definition: KelvinVector.h:57

◆ selectSolidConstitutiveRelation()

template<typename SolidMaterialsMap >
auto & MaterialLib::Solids::selectSolidConstitutiveRelation ( SolidMaterialsMap const &  constitutive_relations,
MeshLib::PropertyVector< int > const *const  material_ids,
std::size_t const  element_id 
)

Choose solid material model for given element id out of a set of models, possibly using the material ids.

Only two possibilities yield a valid result and result in OGS_FATAL call otherwise.

  1. If the material id is not defined then search for a constitutive relation with id 0 (the default value if not specified).
  2. There is only one constitutive relation with id 0 then the material and element ids are ignored and the only constitutive relation (under id 0) is returned.
  3. If material ids are defined then search for a constitutive relation corresponding to the material id of the current element.

Definition at line 36 of file SelectSolidConstitutiveRelation.h.

40{
41 // Multiple constitutive relations and no material ids should not be valid.
42 if (constitutive_relations.size() > 1 && material_ids == nullptr)
43 {
45 "There are {} constitutive relations provided in the project file "
46 "but no MaterialIDs could be found in the mesh.",
47 constitutive_relations.size());
48 }
49
50 int const material_id = ((constitutive_relations.size() == 1 &&
51 constitutive_relations.begin()->first == 0) ||
52 material_ids == nullptr)
53 ? 0
54 : (*material_ids)[element_id];
55
56 auto const constitutive_relation = constitutive_relations.find(material_id);
57 if (constitutive_relation == end(constitutive_relations))
58 {
60 "No constitutive relation found for material id {:d} and element "
61 "{:d}. There are {:d} constitutive relations available, "
62 "corresponding to the ids: {}",
63 material_id, element_id, constitutive_relations.size(),
64 fmt::join(constitutive_relations | ranges::views::keys, " "));
65 }
66
67 if (constitutive_relation->second == nullptr)
68 {
70 "The constitutive relation found for material id {:d} and element "
71 "{:d} is a nullptr, which is impossible.",
72 material_id, element_id);
73 }
74
75 return *constitutive_relation->second;
76}

References OGS_FATAL.

Referenced by ProcessLib::HydroMechanics::HydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::HydroMechanicsLocalAssembler(), ProcessLib::LIE::HydroMechanics::HydroMechanicsLocalAssemblerMatrix< ShapeFunctionDisplacement, ShapeFunctionPressure, GlobalDim >::HydroMechanicsLocalAssemblerMatrix(), ProcessLib::PhaseField::PhaseFieldLocalAssembler< ShapeFunction, DisplacementDim >::PhaseFieldLocalAssembler(), ProcessLib::RichardsMechanics::RichardsMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::RichardsMechanicsLocalAssembler(), ProcessLib::LIE::SmallDeformation::SmallDeformationLocalAssemblerMatrix< ShapeFunction, DisplacementDim >::SmallDeformationLocalAssemblerMatrix(), ProcessLib::LIE::SmallDeformation::SmallDeformationLocalAssemblerMatrixNearFracture< ShapeFunction, DisplacementDim >::SmallDeformationLocalAssemblerMatrixNearFracture(), ProcessLib::SmallDeformationNonlocal::SmallDeformationNonlocalLocalAssembler< ShapeFunction, DisplacementDim >::SmallDeformationNonlocalLocalAssembler(), ProcessLib::TH2M::TH2MLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::TH2MLocalAssembler(), ProcessLib::ThermoHydroMechanics::ThermoHydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::ThermoHydroMechanicsLocalAssembler(), ProcessLib::ThermoMechanicalPhaseField::ThermoMechanicalPhaseFieldLocalAssembler< ShapeFunction, DisplacementDim >::ThermoMechanicalPhaseFieldLocalAssembler(), ProcessLib::ThermoMechanics::ThermoMechanicsLocalAssembler< ShapeFunction, DisplacementDim >::ThermoMechanicsLocalAssembler(), ProcessLib::HydroMechanics::HydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::assembleWithJacobian(), ProcessLib::HydroMechanics::HydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::assembleWithJacobianForPressureEquations(), ProcessLib::HydroMechanics::HydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::postTimestepConcrete(), and ProcessLib::ThermoHydroMechanics::ThermoHydroMechanicsLocalAssembler< ShapeFunctionDisplacement, ShapeFunctionPressure, DisplacementDim >::updateConstitutiveRelations().