OGS
CreateConstitutiveRelationsGeneric.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#pragma once
5
10
11namespace MaterialLib::Solids
12{
13template <typename SolidConstitutiveRelation>
14std::map<int, std::shared_ptr<SolidConstitutiveRelation>>
16 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const& parameters,
17 std::optional<ParameterLib::CoordinateSystem> const&
18 local_coordinate_system,
19 MeshLib::PropertyVector<int> const* const material_ids,
20 BaseLib::ConfigTree const& config,
21 std::unique_ptr<SolidConstitutiveRelation> (*create_constitutive_relation)(
22 std::vector<std::unique_ptr<ParameterLib::ParameterBase>> const&,
23 std::optional<ParameterLib::CoordinateSystem> const&,
24 BaseLib::ConfigTree const&))
25{
26 auto const constitutive_relation_configs =
28 config.getConfigSubtreeList("constitutive_relation");
29
30 std::map<int, std::shared_ptr<SolidConstitutiveRelation>>
31 constitutive_relations;
32
33 for (auto const& constitutive_relation_config :
34 constitutive_relation_configs)
35 {
36 auto create = [&create_constitutive_relation,
37 &parameters,
38 &local_coordinate_system,
39 &constitutive_relation_config](int const /*id*/)
40 {
41 return create_constitutive_relation(parameters,
42 local_coordinate_system,
43 constitutive_relation_config);
44 };
45
46 auto const material_id_string =
48 constitutive_relation_config.getConfigAttribute<std::string>("id",
49 "0");
50
51 auto const material_ids_of_this_constitutive_relation =
52 MaterialLib::parseMaterialIdString(material_id_string,
53 material_ids);
54
55 for (auto const& material_id :
56 material_ids_of_this_constitutive_relation)
57 {
59 material_id,
60 constitutive_relations,
61 material_ids_of_this_constitutive_relation,
62 create);
63 }
64 }
65
66 DBUG("Found {:d} constitutive relations.", constitutive_relations.size());
67
68 return constitutive_relations;
69}
70
71} // namespace MaterialLib::Solids
void DBUG(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:22
Range< SubtreeIterator > getConfigSubtreeList(std::string const &root) const
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 &))
void createMediumForId(int const id, std::map< int, std::shared_ptr< T > > &media, std::vector< int > const &material_ids_of_this_medium, CreateMedium &&create_medium)
std::vector< int > parseMaterialIdString(std::string const &material_id_string, MeshLib::PropertyVector< int > const *const material_ids)