OGS
CellAverageData.cpp
Go to the documentation of this file.
1
11#include "CellAverageData.h"
12
14
15namespace ProcessLib
16{
18 std::string const& name, unsigned const num_comp)
19{
20 if (auto const it = cell_averages_.find(name); it != cell_averages_.end())
21 {
22 auto& prop_vec = *it->second;
23 auto const num_comp_mesh = prop_vec.getNumberOfGlobalComponents();
24 if (num_comp_mesh == static_cast<int>(num_comp))
25 {
26 return prop_vec;
27 }
28
30 "The requested property '{}' has {} components, but the one "
31 "present in the mesh has {} components.",
32 name, num_comp, num_comp_mesh);
33 }
34
35 auto const name_in_mesh = name + "_avg";
36 auto [it, emplaced] = cell_averages_.emplace(
37 name, MeshLib::getOrCreateMeshProperty<double>(
38 const_cast<MeshLib::Mesh&>(mesh_), name_in_mesh,
40
41 if (!it->second)
42 {
43 OGS_FATAL("The cell property '{}' could not be added to the mesh.",
44 name_in_mesh);
45 }
46
47 if (!emplaced)
48 {
50 "Internal logic error. Something very bad happened. The cell "
51 "property '{}' was not added to the list of cell averages to "
52 "compute. There is some very strange inconsistency in the "
53 "code. Trouble ahead!",
54 name_in_mesh);
55 }
56
57 return *it->second;
58}
59} // namespace ProcessLib
#define OGS_FATAL(...)
Definition Error.h:26
int getNumberOfGlobalComponents() const
MeshLib::Mesh const & mesh_
MeshLib::PropertyVector< double > & getOrCreatePropertyVector(std::string const &name, unsigned const num_comp)
std::map< std::string, MeshLib::PropertyVector< double > * > cell_averages_