13 #include <nlohmann/json.hpp>
25 auto const& ip_values = writer.
values();
30 auto& field_data = *MeshLib::getOrCreateMeshProperty<double>(
35 for (
const auto& element_ip_values : ip_values)
37 std::copy(element_ip_values.begin(), element_ip_values.end(),
38 std::back_inserter(field_data));
49 std::vector<ProcessLib::IntegrationPointMetaData>
const& meta_data)
52 json_meta_data[
"integration_point_arrays"] = json::array();
54 for (
auto const& md : meta_data)
56 json_meta_data[
"integration_point_arrays"].push_back(
58 {
"number_of_components", md.n_components},
59 {
"integration_order", md.integration_order}});
63 std::string
const json_string = json_meta_data.dump();
64 auto& dictionary = *MeshLib::getOrCreateMeshProperty<char>(
65 mesh,
"IntegrationPointMetaData",
68 std::copy(json_string.begin(), json_string.end(),
69 std::back_inserter(dictionary));
75 json
const& meta_data, std::string
const&
name)
77 auto const& ip_meta_data = meta_data[
"integration_point_arrays"];
79 find_if(cbegin(ip_meta_data), cend(ip_meta_data),
80 [&
name](
auto const& md) {
return md[
"name"] ==
name; });
81 it != cend(ip_meta_data))
83 return {
name, (*it)[
"number_of_components"],
84 (*it)[
"integration_order"]};
86 OGS_FATAL(
"No integration point meta data with name '{:s}' found.",
name);
93 std::vector<std::unique_ptr<IntegrationPointWriter>>
const&
94 integration_point_writer)
96 std::vector<IntegrationPointMetaData> meta_data;
97 meta_data.reserve(size(integration_point_writer));
98 transform(cbegin(integration_point_writer), cend(integration_point_writer),
99 back_inserter(meta_data),
100 [&](
auto const& ip_writer)
102 if (!meta_data.empty())
109 std::string
const&
name)
112 "IntegrationPointMetaData"))
115 "Integration point data '{:s}' is present in the vtk field data "
116 "but the required 'IntegrationPointMetaData' array is not "
120 auto const& mesh_property_ip_meta_data =
122 "IntegrationPointMetaData");
124 if (mesh_property_ip_meta_data.getMeshItemType() !=
127 OGS_FATAL(
"IntegrationPointMetaData array must be field data.");
133 json::parse(mesh_property_ip_meta_data.begin(),
134 mesh_property_ip_meta_data.end()),
static ProcessLib::IntegrationPointMetaData extractIntegrationPointMetaData(json const &meta_data, std::string const &name)
static ProcessLib::IntegrationPointMetaData addIntegrationPointData(MeshLib::Mesh &mesh, ProcessLib::IntegrationPointWriter const &writer)
static void addIntegrationPointMetaData(MeshLib::Mesh &mesh, std::vector< ProcessLib::IntegrationPointMetaData > const &meta_data)
Definition of the Mesh class.
Properties & getProperties()
std::size_t getNumberOfElements() const
Get the number of elements.
bool existsPropertyVector(std::string const &name) const
void copy(PETScVector const &x, PETScVector &y)
IntegrationPointMetaData getIntegrationPointMetaData(MeshLib::Mesh const &mesh, std::string const &name)
void addIntegrationPointWriter(MeshLib::Mesh &mesh, std::vector< std::unique_ptr< IntegrationPointWriter >> const &integration_point_writer)
int numberOfComponents() const
int integrationOrder() const
std::vector< std::vector< double > > values() const