12#include <dolfinx/mesh/MeshTags.h> 
   32template <std::
floating_po
int T>
 
   34template <std::
floating_po
int T>
 
   47template <std::
floating_po
int U>
 
   48void add_mesh(MPI_Comm comm, pugi::xml_node& xml_node, hid_t h5_id,
 
   61template <std::
floating_po
int U>
 
   63                       const std::string& path_prefix,
 
   66                       std::span<const std::int32_t> entities);
 
   69template <std::
floating_po
int U>
 
   71                       const std::string& path_prefix,
 
   80std::pair<std::variant<std::vector<float>, std::vector<double>>,
 
   81          std::array<std::size_t, 2>>
 
   90std::pair<std::vector<std::int64_t>, std::array<std::size_t, 2>>
 
   94template <
typename T, std::
floating_po
int U>
 
   97                  hid_t h5_id, 
const std::string& name)
 
   99  spdlog::info(
"XDMF: add meshtags ({})", name.c_str());
 
  101  const int dim = meshtags.
dim();
 
  102  std::shared_ptr<const common::IndexMap> entity_map
 
  103      = meshtags.
topology()->index_map(dim);
 
  106    throw std::runtime_error(
"Missing entities. Did you forget to call " 
  107                             "dolfinx::mesh::Topology::create_entities?");
 
  109  const std::int32_t num_local_entities = entity_map->size_local();
 
  112  auto it = std::ranges::lower_bound(meshtags.
indices(), num_local_entities);
 
  113  const int num_active_entities = std::distance(meshtags.
indices().begin(), it);
 
  115  const std::string path_prefix = 
"/MeshTags/" + name;
 
  118      std::span<const std::int32_t>(meshtags.
indices().data(),
 
  119                                    num_active_entities));
 
  122  pugi::xml_node attribute_node = xml_node.append_child(
"Attribute");
 
  123  assert(attribute_node);
 
  124  attribute_node.append_attribute(
"Name") = name.c_str();
 
  125  attribute_node.append_attribute(
"AttributeType") = 
"Scalar";
 
  126  attribute_node.append_attribute(
"Center") = 
"Cell";
 
  128  std::int64_t global_num_values = 0;
 
  129  const std::int64_t local_num_values = num_active_entities;
 
  130  MPI_Allreduce(&local_num_values, &global_num_values, 1, MPI_INT64_T, MPI_SUM,
 
  132  const std::int64_t num_local = num_active_entities;
 
  133  std::int64_t offset = 0;
 
  134  MPI_Exscan(&num_local, &offset, 1, MPI_INT64_T, MPI_SUM, comm);
 
  136  xdmf_utils::add_data_item(
 
  137      attribute_node, h5_id, path_prefix + std::string(
"/Values"),
 
  138      std::span<const T>(meshtags.
values().data(), num_active_entities), offset,
 
  139      {global_num_values, 1}, 
"", use_mpi_io);
 
 
 
Geometry stores the geometry imposed on a mesh.
Definition Geometry.h:34
 
A Mesh consists of a set of connected and numbered mesh topological entities, and geometry data.
Definition Mesh.h:23
 
Topology stores the topology of a mesh, consisting of mesh entities and connectivity (incidence relat...
Definition Topology.h:41
 
int size(MPI_Comm comm)
Definition MPI.cpp:72
 
Geometry data structures and algorithms.
Definition BoundingBoxTree.h:22
 
Low-level methods for reading XDMF files.
Definition xdmf_mesh.h:41
 
std::pair< std::vector< std::int64_t >, std::array< std::size_t, 2 > > read_topology_data(MPI_Comm comm, hid_t h5_id, const pugi::xml_node &node)
Read topology (cell connectivity) data.
Definition xdmf_mesh.cpp:294
 
std::pair< std::variant< std::vector< float >, std::vector< double > >, std::array< std::size_t, 2 > > read_geometry_data(MPI_Comm comm, hid_t h5_id, const pugi::xml_node &node)
Read geometry (coordinate) data.
Definition xdmf_mesh.cpp:254
 
void add_meshtags(MPI_Comm comm, const mesh::MeshTags< T > &meshtags, const mesh::Geometry< U > &geometry, pugi::xml_node &xml_node, hid_t h5_id, const std::string &name)
Add mesh tags to XDMF file.
Definition xdmf_mesh.h:95
 
void add_mesh(MPI_Comm comm, pugi::xml_node &xml_node, hid_t h5_id, const mesh::Mesh< U > &mesh, const std::string &path_prefix)
Definition xdmf_mesh.cpp:214
 
void add_topology_data(MPI_Comm comm, pugi::xml_node &xml_node, hid_t h5_id, const std::string &path_prefix, const mesh::Topology &topology, const mesh::Geometry< U > &geometry, int cell_dim, std::span< const std::int32_t > entities)
Definition xdmf_mesh.cpp:23
 
void add_geometry_data(MPI_Comm comm, pugi::xml_node &xml_node, hid_t h5_id, const std::string &path_prefix, const mesh::Geometry< U > &geometry)
Add Geometry xml node.
Definition xdmf_mesh.cpp:160
 
Mesh data structures and algorithms on meshes.
Definition DofMap.h:32
 
Top-level namespace.
Definition defines.h:12