OGS
addPropertyToMesh.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
6#include <vector>
7
8#include "BaseLib/Error.h"
9#include "MeshLib/Mesh.h"
10#include "MeshLib/Properties.h"
11
12namespace MeshLib
13{
24template <typename T>
25void addPropertyToMesh(Mesh& mesh, std::string_view name,
26 MeshItemType item_type, std::size_t number_of_components,
27 std::span<T const> values)
28{
29 if (item_type == MeshItemType::Node)
30 {
31 if (mesh.getNumberOfNodes() != values.size() / number_of_components)
32 {
34 "Error number of nodes ({:d}) does not match the number of "
35 "tuples ({:d}).",
36 mesh.getNumberOfNodes(), values.size() / number_of_components);
37 }
38 }
39 if (item_type == MeshItemType::Cell)
40 {
41 if (mesh.getNumberOfElements() != values.size() / number_of_components)
42 {
44 "Error number of elements ({:d}) does not match the number of "
45 "tuples ({:d}).",
47 values.size() / number_of_components);
48 }
49 }
50
51 auto* const property = mesh.getProperties().createNewPropertyVector<T>(
52 name, item_type, values.size() / number_of_components,
53 number_of_components);
54 if (!property)
55 {
56 OGS_FATAL("Error while creating PropertyVector '{:s}'.", name);
57 }
58 assert(property->size() == values.size());
59 property->assign(values);
60}
61} // namespace MeshLib
#define OGS_FATAL(...)
Definition Error.h:19
Properties & getProperties()
Definition Mesh.h:125
std::size_t getNumberOfNodes() const
Get the number of nodes.
Definition Mesh.h:91
std::size_t getNumberOfElements() const
Get the number of elements.
Definition Mesh.h:88
PropertyVector< T > * createNewPropertyVector(std::string_view name, MeshItemType mesh_item_type, std::size_t n_components=1)
void addPropertyToMesh(Mesh &mesh, std::string_view name, MeshItemType item_type, std::size_t number_of_components, std::span< T const > values)