OGS
CellAverageData.cpp
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#include "CellAverageData.h"
5
7
8namespace ProcessLib
9{
11 std::string const& name, unsigned const num_comp)
12{
13 if (auto const it = cell_averages_.find(name); it != cell_averages_.end())
14 {
15 auto& prop_vec = *it->second;
16 auto const num_comp_mesh = prop_vec.getNumberOfGlobalComponents();
17 if (num_comp_mesh == static_cast<int>(num_comp))
18 {
19 return prop_vec;
20 }
21
23 "The requested property '{}' has {} components, but the one "
24 "present in the mesh has {} components.",
25 name, num_comp, num_comp_mesh);
26 }
27
28 auto const name_in_mesh = name + "_avg";
29 auto [it, emplaced] = cell_averages_.emplace(
31 const_cast<MeshLib::Mesh&>(mesh_), name_in_mesh,
33
34 if (!it->second)
35 {
36 OGS_FATAL("The cell property '{}' could not be added to the mesh.",
37 name_in_mesh);
38 }
39
40 if (!emplaced)
41 {
43 "Internal logic error. Something very bad happened. The cell "
44 "property '{}' was not added to the list of cell averages to "
45 "compute. There is some very strange inconsistency in the "
46 "code. Trouble ahead!",
47 name_in_mesh);
48 }
49
50 return *it->second;
51}
52} // namespace ProcessLib
#define OGS_FATAL(...)
Definition Error.h:19
PropertyVector< T > * getOrCreateMeshProperty(Mesh &mesh, std::string const &property_name, MeshItemType const item_type, int const number_of_components)
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_