Skip to content
Snippets Groups Projects
Commit 9a121939 authored by Dmitri Naumov's avatar Dmitri Naumov
Browse files

[MatL] Add createConstitutiveRelations().

The function wraps the original createConstitutiveRelation()
function while checking the "id" attribute in the
<constitutive_relation id="0"> tag. The return value becomes
a map from int to constitutive relation pointers.
parent 60b1ee2b
No related branches found
No related tags found
No related merge requests found
......@@ -33,47 +33,83 @@ createConstitutiveRelation(
std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
BaseLib::ConfigTree const& config)
{
auto const constitutive_relation_config =
//! \ogs_file_param{material__solid__constitutive_relation}
config.getConfigSubtree("constitutive_relation");
auto const type =
//! \ogs_file_param{material__solid__constitutive_relation__type}
constitutive_relation_config.peekConfigParameter<std::string>("type");
config.peekConfigParameter<std::string>("type");
if (type == "Ehlers")
{
return MaterialLib::Solids::Ehlers::createEhlers<DisplacementDim>(
parameters, constitutive_relation_config);
parameters, config);
}
if (type == "LinearElasticIsotropic")
{
const bool skip_type_checking = false;
return MaterialLib::Solids::createLinearElasticIsotropic<
DisplacementDim>(
parameters, constitutive_relation_config, skip_type_checking);
DisplacementDim>(parameters, config, skip_type_checking);
}
if (type == "Lubby2")
{
return MaterialLib::Solids::Lubby2::createLubby2<DisplacementDim>(
parameters, constitutive_relation_config);
parameters, config);
}
if (type == "CreepBGRa")
{
return MaterialLib::Solids::Creep::createCreepBGRa<DisplacementDim>(
parameters, constitutive_relation_config);
parameters, config);
}
OGS_FATAL("Cannot construct constitutive relation of given type \'%s\'.",
type.c_str());
}
template std::unique_ptr<MaterialLib::Solids::MechanicsBase<2>>
createConstitutiveRelation<2>(
template <int DisplacementDim>
std::map<int,
std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>>
createConstitutiveRelations(
std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
BaseLib::ConfigTree const& config)
{
auto const constitutive_relation_configs =
//! \ogs_file_param{material__solid__constitutive_relation}
config.getConfigSubtreeList("constitutive_relation");
std::map<int, std::unique_ptr<MechanicsBase<DisplacementDim>>>
constitutive_relations;
for (auto const& constitutive_relation_config :
constitutive_relation_configs)
{
int const material_id =
constitutive_relation_config.getConfigAttribute<int>("id", 0);
if (constitutive_relations.find(material_id) !=
constitutive_relations.end())
{
OGS_FATAL(
"Multiple constitutive relations were specified for the same "
"material id %d. Keep in mind, that if no material id is "
"specified, it is assumed to be 0 by default.",
material_id);
}
constitutive_relations.emplace(
material_id,
createConstitutiveRelation<DisplacementDim>(
parameters, constitutive_relation_config));
}
DBUG("Found %d constitutive relations.", constitutive_relations.size());
return constitutive_relations;
}
template std::map<int, std::unique_ptr<MaterialLib::Solids::MechanicsBase<2>>>
createConstitutiveRelations<2>(
std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
BaseLib::ConfigTree const& config);
template std::unique_ptr<MaterialLib::Solids::MechanicsBase<3>>
createConstitutiveRelation<3>(
template std::map<int, std::unique_ptr<MaterialLib::Solids::MechanicsBase<3>>>
createConstitutiveRelations<3>(
std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
BaseLib::ConfigTree const& config);
}
......
......@@ -11,6 +11,7 @@
#pragma once
#include <map>
#include <memory>
#include <vector>
......@@ -32,18 +33,21 @@ template <int DisplacementDim>
struct MechanicsBase;
template <int DisplacementDim>
std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>
createConstitutiveRelation(
std::map<int,
std::unique_ptr<MaterialLib::Solids::MechanicsBase<DisplacementDim>>>
createConstitutiveRelations(
std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
BaseLib::ConfigTree const& config);
extern template std::unique_ptr<MaterialLib::Solids::MechanicsBase<2>>
createConstitutiveRelation<2>(
extern template std::map<int,
std::unique_ptr<MaterialLib::Solids::MechanicsBase<2>>>
createConstitutiveRelations<2>(
std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
BaseLib::ConfigTree const& config);
extern template std::unique_ptr<MaterialLib::Solids::MechanicsBase<3>>
createConstitutiveRelation<3>(
extern template std::map<int,
std::unique_ptr<MaterialLib::Solids::MechanicsBase<3>>>
createConstitutiveRelations<3>(
std::vector<std::unique_ptr<ProcessLib::ParameterBase>> const& parameters,
BaseLib::ConfigTree const& config);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment