10 #include "xdmf_mesh.h"
11 #include "xdmf_utils.h"
12 #include <dolfinx/common/MPI.h>
13 #include <dolfinx/mesh/MeshTags.h>
22 namespace xdmf_meshtags
27 void add_meshtags(MPI_Comm comm,
const mesh::MeshTags<T>& meshtags,
28 pugi::xml_node& xml_node,
const hid_t h5_id,
29 const std::string name)
32 assert(meshtags.mesh());
33 std::shared_ptr<const mesh::Mesh> mesh = meshtags.mesh();
34 const int dim = meshtags.dim();
35 const std::vector<std::int32_t>& active_entities = meshtags.indices();
36 const std::string path_prefix =
"/MeshTags/" + name;
38 mesh->topology(), mesh->geometry(), dim,
42 pugi::xml_node attribute_node = xml_node.append_child(
"Attribute");
43 assert(attribute_node);
44 attribute_node.append_attribute(
"Name") = name.c_str();
45 attribute_node.append_attribute(
"AttributeType") =
"Scalar";
46 attribute_node.append_attribute(
"Center") =
"Cell";
48 std::int64_t global_num_values = 0;
49 const std::int64_t local_num_values = active_entities.size();
50 MPI_Allreduce(&local_num_values, &global_num_values, 1, MPI_INT64_T, MPI_SUM,
52 const std::int64_t offset
55 xdmf_utils::add_data_item(attribute_node, h5_id, path_prefix +
"/Values",
56 meshtags.values(), offset, {global_num_values, 1},