21 namespace PorousMedium
25 std::vector<std::unique_ptr<ParameterLib::ParameterBase>>
const& parameters)
27 DBUG(
"Create PorousMediaProperties.");
29 auto const& porous_medium_configs =
33 std::vector<std::unique_ptr<MaterialLib::PorousMedium::Permeability>>
34 intrinsic_permeability_models;
35 std::vector<std::unique_ptr<MaterialLib::PorousMedium::Porosity>>
37 std::vector<std::unique_ptr<MaterialLib::PorousMedium::Storage>>
40 std::vector<int> mat_ids;
41 for (
auto const& porous_medium_config :
43 porous_medium_configs.getConfigSubtreeList(
"porous_medium"))
47 mat_ids.push_back(
id);
49 auto const& porosity_config =
51 porous_medium_config.getConfigSubtree(
"porosity");
52 porosity_models.emplace_back(
58 auto const& permeability_config =
60 porous_medium_config.getConfigSubtree(
"permeability");
61 intrinsic_permeability_models.emplace_back(
63 permeability_config, parameters));
66 auto const& storage_config =
68 porous_medium_config.getConfigSubtree(
"storage");
69 storage_models.emplace_back(
78 int const max_material_id =
81 : *std::max_element(begin(*material_ids), end(*material_ids));
83 if (max_material_id >
static_cast<int>(mat_ids.size() - 1))
86 "The maximum value of MaterialIDs in mesh is {:d}. As the "
87 "given number of porous media definitions in the project file is "
88 "{:d}, the maximum value of MaterialIDs in mesh must be {:d} "
89 "(index starts with zero).",
90 max_material_id, mat_ids.size(), max_material_id - 1);
93 if (max_material_id <
static_cast<int>(mat_ids.size() - 1))
95 "There are {:d} porous medium definitions in the project file but "
96 "only {:d} different values in the MaterialIDs vector/data_array "
98 mat_ids.size(), max_material_id - 1);
100 if (mat_ids.back() !=
static_cast<int>(mat_ids.size()) - 1)
103 "The ids in the porous media definitions in the project file have "
104 "to be sequential, starting with the id zero.");
108 std::move(intrinsic_permeability_models),
109 std::move(storage_models), material_ids};
void DBUG(char const *fmt, Args const &... args)
void WARN(char const *fmt, Args const &... args)
Definition of the Mesh class.
T getConfigAttribute(std::string const &attr) const
ConfigTree getConfigSubtree(std::string const &root) const
void reorderVector(std::vector< ValueType > &v, std::vector< IndexType > const &order)
PorousMediaProperties createPorousMediaProperties(MeshLib::Mesh &mesh, BaseLib::ConfigTree const &configs, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters)
std::unique_ptr< Permeability > createPermeabilityModel(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters)
std::unique_ptr< Porosity > createPorosityModel(BaseLib::ConfigTree const &config, std::vector< std::unique_ptr< ParameterLib::ParameterBase >> const ¶meters)
std::unique_ptr< Storage > createStorageModel(BaseLib::ConfigTree const &config)
PropertyVector< int > const * materialIDs(Mesh const &mesh)