Loading [MathJax]/extensions/MathMenu.js
OGS
MaterialSpatialDistributionMap.cpp
Go to the documentation of this file.
1
13
14#include <spdlog/fmt/ranges.h>
15
16#include <range/v3/view/map.hpp>
17
18#include "MeshLib/Mesh.h"
19
20namespace MaterialPropertyLib
21{
23{
24 return const_cast<Medium*>(
25 static_cast<MaterialSpatialDistributionMap const&>(*this).getMedium(
26 element_id));
27}
28
30 std::size_t const element_id) const
31{
32 auto const material_id =
33 material_ids_ == nullptr ? 0 : (*material_ids_)[element_id];
34
35 assert(!media_.empty());
36
37 if (auto const it = media_.find(material_id); it != media_.end())
38 {
39 return it->second.get();
40 }
41
42 //
43 // Error handling until end of the function.
44 //
45
46 if (material_ids_ == nullptr)
47 {
48 assert(material_id == 0);
49 ERR("No MaterialIDs given in the mesh therefore default material id = "
50 "0 is used.");
51 }
52 auto keys = media_ | ranges::views::keys;
53
54 if (media_.size() == 1)
55 {
56 ERR("Single medium for material id {} is defined.",
57 fmt::join(keys, ", "));
58 }
59 else
60 {
61 ERR("Media for material ids {} are defined.", fmt::join(keys, ", "));
62 }
63 OGS_FATAL("No medium for material id {} found for element {}.", material_id,
64 element_id);
65}
66
68 std::size_t const element_id) const
69{
70 auto const material_id =
71 material_ids_ == nullptr ? 0 : (*material_ids_)[element_id];
72 if (media_.find(material_id) == media_.end())
73 {
75 "There is no medium definition for element {:d} with material "
76 "ID {:d}. Please define a medium for each material.",
77 element_id, material_id);
78 }
79}
80
81} // namespace MaterialPropertyLib
#define OGS_FATAL(...)
Definition Error.h:26
void ERR(fmt::format_string< Args... > fmt, Args &&... args)
Definition Logging.h:45
Definition of the Mesh class.
MeshLib::PropertyVector< int > const *const material_ids_
std::map< int, std::shared_ptr< Medium > > const & media_