OGS
CreateConstitutiveRelationsGeneric.h
Go to the documentation of this file.
1
11#pragma once
12
13#include "BaseLib/ConfigTree.h"
15
16namespace MaterialLib::Solids
17{
18template <typename SolidConstitutiveRelation>
19std::map<int, std::unique_ptr<SolidConstitutiveRelation>>
21 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
22 std::optional<ParameterLib::CoordinateSystem> const&
23 local_coordinate_system,
24 BaseLib::ConfigTree const& config,
25 std::unique_ptr<SolidConstitutiveRelation> (*create_constitutive_relation)(
26 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&,
27 std::optional<ParameterLib::CoordinateSystem> const&,
28 BaseLib::ConfigTree const&))
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}
65
66} // namespace MaterialLib::Solids
#define OGS_FATAL(...)
Definition Error.h:26
void DBUG(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:30
Range< SubtreeIterator > getConfigSubtreeList(std::string const &root) const
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 &))