OGS
MaterialLib::Solids Namespace Reference

Namespaces

namespace  Creep
 
namespace  Ehlers
 
namespace  Lubby2
 
namespace  MFront
 
namespace  Phasefield
 

Classes

class  LinearElasticIsotropic
 
class  LinearElasticOrthotropic
 
class  LinearElasticTransverseIsotropic
 Linear transverse isotropic elastic model. More...
 
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>
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)
 
template std::unique_ptr< LinearElasticTransverseIsotropic< 2 > > 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)
 
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 33 of file CreateConstitutiveRelation.cpp.

38{
39 auto const type =
41 config.peekConfigParameter<std::string>("type");
42
43 if (type == "Ehlers")
44 {
45 return MaterialLib::Solids::Ehlers::createEhlers<DisplacementDim>(
46 parameters, config);
47 }
48 if (type == "LinearElasticIsotropic")
49 {
50 const bool skip_type_checking = false;
52 DisplacementDim>(parameters, config, skip_type_checking);
53 }
54 if (type == "LinearElasticOrthotropic")
55 {
56 const bool skip_type_checking = false;
58 DisplacementDim>(
59 parameters, local_coordinate_system, config, skip_type_checking);
60 }
61 if (type == "LinearElasticTransverseIsotropic")
62 {
63 const bool skip_type_checking = false;
65 DisplacementDim>(
66 parameters, local_coordinate_system, config, skip_type_checking);
67 }
68 if (type == "Lubby2")
69 {
70 return MaterialLib::Solids::Lubby2::createLubby2<DisplacementDim>(
71 parameters, config);
72 }
73 if (type == "CreepBGRa")
74 {
75 return MaterialLib::Solids::Creep::createCreepBGRa<DisplacementDim>(
76 parameters, config);
77 }
78 if (type == "MFront")
79 {
80#ifdef OGS_USE_MFRONT
81 return MaterialLib::Solids::MFront::createMFront<DisplacementDim>(
82 parameters, local_coordinate_system, config);
83#else // OGS_USE_MFRONT
85 "OGS is compiled without MFront support. See OGS_USE_MFRONT CMake "
86 "option.");
87#endif // OGS_USE_MFRONT
88 }
89 OGS_FATAL("Cannot construct constitutive relation of given type '{:s}'.",
90 type);
91}
#define OGS_FATAL(...)
Definition Error.h:26
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)

References createLinearElasticIsotropic(), createLinearElasticOrthotropic(), createLinearElasticTransverseIsotropic(), 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 110 of file CreateConstitutiveRelation.cpp.

115{
118 parameters,
119 local_coordinate_system,
120 config,
121 createConstitutiveRelation<DisplacementDim>);
122}
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 )

◆ createLinearElasticTransverseIsotropic() [1/2]

template<int DisplacementDim>
std::unique_ptr< LinearElasticTransverseIsotropic< DisplacementDim > > MaterialLib::Solids::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 )
Input File Parameter
material__solid__constitutive_relation__type
Input File Parameter
material__solid__constitutive_relation__LinearElasticTransverseIsotropic__youngs_modulus_i
Input File Parameter
material__solid__constitutive_relation__LinearElasticTransverseIsotropic__youngs_modulus_a
Input File Parameter
material__solid__constitutive_relation__LinearElasticTransverseIsotropic__poissons_ratio_ii
Input File Parameter
material__solid__constitutive_relation__LinearElasticTransverseIsotropic__poissons_ratio_ia
Input File Parameter
material__solid__constitutive_relation__LinearElasticTransverseIsotropic__shear_modulus_ia

Definition at line 22 of file CreateLinearElasticTransverseIsotropic.cpp.

27{
28 if (!skip_type_checking)
29 {
31 config.checkConfigParameter("type", "LinearElasticTransverseIsotropic");
32 DBUG("Create LinearElasticTransverseIsotropic material");
33 }
34
35 auto const& E_i = ParameterLib::findParameter<double>(
37 config, "youngs_modulus_i", parameters, 1);
38 DBUG("Use '{}' as the in-plane Young’s modulus, E_i.", E_i.name);
39
40 auto const& E_a = ParameterLib::findParameter<double>(
42 config, "youngs_modulus_a", parameters, 1);
43 DBUG(
44 "Use '{}' as the Young’s modulus w.r.t. the direction of anisotropy, "
45 "E_a.",
46 E_a.name);
47
48 auto const& nu_ii = ParameterLib::findParameter<double>(
50 config, "poissons_ratio_ii", parameters, 1);
51 DBUG("Use '{}' as the in-plane Poisson’s ratio, nu_ii.", nu_ii.name);
52
53 auto const& nu_ia = ParameterLib::findParameter<double>(
55 config, "poissons_ratio_ia", parameters, 1);
56 DBUG(
57 "Use '{}' as the Poisson ratio perpendicular to the plane of isotropy, "
58 "due to strain in the plane of isotropy, nu_ia.",
59 nu_ia.name);
60
61 auto const& G_ia = ParameterLib::findParameter<double>(
63 config, "shear_modulus_ia", parameters, 1);
64 DBUG(
65 "Use '{}' as the shear modulus between directions of isotropy and "
66 "anisotropy , G_ia.",
67 G_ia.name);
68
69 return std::make_unique<LinearElasticTransverseIsotropic<DisplacementDim>>(
70 E_i, E_a, nu_ii, nu_ia, G_ia, local_coordinate_system);
71}

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

Referenced by createConstitutiveRelation().

◆ createLinearElasticTransverseIsotropic() [2/2]

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

◆ 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

◆ 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::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().