DOLFIN-X
DOLFIN-X C++ interface
XDMFFile.h
1 // Copyright (C) 2012-2020 Chris N. Richardson, Garth N. Wells and Michal Habera
2 //
3 // This file is part of DOLFINX (https://www.fenicsproject.org)
4 //
5 // SPDX-License-Identifier: LGPL-3.0-or-later
6 
7 #pragma once
8 
9 #include "HDF5Interface.h"
10 #include <dolfinx/common/MPI.h>
11 #include <dolfinx/mesh/cell_types.h>
12 #include <memory>
13 #include <string>
14 
15 namespace pugi
16 {
17 class xml_node;
18 class xml_document;
19 } // namespace pugi
20 
21 namespace dolfinx
22 {
23 namespace fem
24 {
25 class CoordinateElement;
26 }
27 
28 namespace function
29 {
30 class Function;
31 } // namespace function
32 
33 namespace mesh
34 {
35 class Mesh;
36 class Geometry;
37 template <typename T>
38 class MeshTags;
39 } // namespace mesh
40 
41 namespace io
42 {
43 class HDF5File;
44 
47 
55 
56 class XDMFFile
57 {
58 public:
60  enum class Encoding
61  {
62  HDF5,
63  ASCII
64  };
65 
67  static const Encoding default_encoding = Encoding::HDF5;
68 
70  XDMFFile(MPI_Comm comm, const std::string filename,
71  const std::string file_mode,
72  const Encoding encoding = default_encoding);
73 
75  ~XDMFFile();
76 
82  void close();
83 
87  void write_mesh(const mesh::Mesh& mesh,
88  const std::string xpath = "/Xdmf/Domain");
89 
94  void write_geometry(const mesh::Geometry& geometry,
95  const std::string name = "geometry",
96  const std::string xpath = "/Xdmf/Domain");
97 
105  const std::string name,
106  const std::string xpath = "/Xdmf/Domain") const;
107 
113  std::tuple<
114  std::pair<mesh::CellType, int>,
115  Eigen::Array<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>,
116  Eigen::Array<std::int64_t, Eigen::Dynamic, Eigen::Dynamic,
117  Eigen::RowMajor>>
118  read_mesh_data(const std::string name = "mesh",
119  const std::string xpath = "/Xdmf/Domain") const;
120 
126  void write_function(const function::Function& function, const double t,
127  const std::string mesh_xpath
128  = "/Xdmf/Domain/Grid[@GridType='Uniform'][1]");
129 
135  void write_meshtags(const mesh::MeshTags<std::int32_t>& meshtags,
136  const std::string geometry_xpath
137  = "/Xdmf/Domain/Geometry",
138  const std::string xpath = "/Xdmf/Domain");
139 
145  read_meshtags(const std::shared_ptr<const mesh::Mesh>& mesh,
146  const std::string name,
147  const std::string xpath = "/Xdmf/Domain");
148 
151  MPI_Comm comm() const;
152 
153 private:
154  // MPI communicator
155  dolfinx::MPI::Comm _mpi_comm;
156 
157  // Cached filename
158  std::string _filename;
159 
160  // File mode
161  std::string _file_mode;
162 
163  // HDF5 file handle
164  hid_t _h5_id;
165 
166  // The XML document currently representing the XDMF which needs to be
167  // kept open for time series etc.
168  std::unique_ptr<pugi::xml_document> _xml_doc;
169 
170  Encoding _encoding;
171 };
172 
173 } // namespace io
174 } // namespace dolfinx
dolfinx::io::XDMFFile::default_encoding
static const Encoding default_encoding
Default encoding type.
Definition: XDMFFile.h:67
dolfinx::io::XDMFFile::read_mesh
mesh::Mesh read_mesh(const fem::CoordinateElement &element, const std::string name, const std::string xpath="/Xdmf/Domain") const
Read in Mesh.
Definition: XDMFFile.cpp:163
dolfinx::io::XDMFFile::read_meshtags
mesh::MeshTags< std::int32_t > read_meshtags(const std::shared_ptr< const mesh::Mesh > &mesh, const std::string name, const std::string xpath="/Xdmf/Domain")
Read MeshTags.
Definition: XDMFFile.cpp:272
dolfinx::io::XDMFFile::write_mesh
void write_mesh(const mesh::Mesh &mesh, const std::string xpath="/Xdmf/Domain")
Save Mesh.
Definition: XDMFFile.cpp:127
dolfinx::io::XDMFFile::close
void close()
Close the file.
Definition: XDMFFile.cpp:120
dolfinx::io::XDMFFile::~XDMFFile
~XDMFFile()
Destructor.
Definition: XDMFFile.cpp:118
dolfinx::io::XDMFFile::Encoding
Encoding
File encoding type.
Definition: XDMFFile.h:60
dolfinx::mesh::MeshTags
A MeshTags are used to associate mesh entities with values. The entity index (local to process) ident...
Definition: Form.h:35
dolfinx::io::XDMFFile::write_function
void write_function(const function::Function &function, const double t, const std::string mesh_xpath="/Xdmf/Domain/Grid[@GridType='Uniform'][1]")
Write Function.
Definition: XDMFFile.cpp:196
dolfinx::mesh::Mesh
A Mesh consists of a set of connected and numbered mesh topological entities, and geometry data.
Definition: Mesh.h:46
dolfinx::io::XDMFFile::comm
MPI_Comm comm() const
Get the MPI communicator.
Definition: XDMFFile.cpp:315
dolfinx::MPI::Comm
A duplicate MPI communicator and manage lifetime of the communicator.
Definition: MPI.h:34
dolfinx::io::XDMFFile::write_meshtags
void write_meshtags(const mesh::MeshTags< std::int32_t > &meshtags, const std::string geometry_xpath="/Xdmf/Domain/Geometry", const std::string xpath="/Xdmf/Domain")
Write MeshTags.
Definition: XDMFFile.cpp:246
dolfinx::function::Function
This class represents a function in a finite element function space , given by.
Definition: Function.h:41
dolfinx::io::XDMFFile::XDMFFile
XDMFFile(MPI_Comm comm, const std::string filename, const std::string file_mode, const Encoding encoding=default_encoding)
Constructor.
Definition: XDMFFile.cpp:30
dolfinx::mesh::Geometry
Geometry stores the geometry imposed on a mesh.
Definition: Geometry.h:38
dolfinx::io::XDMFFile::read_mesh_data
std::tuple< std::pair< mesh::CellType, int >, Eigen::Array< double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor >, Eigen::Array< std::int64_t, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > > read_mesh_data(const std::string name="mesh", const std::string xpath="/Xdmf/Domain") const
Read in the data for Mesh.
Definition: XDMFFile.cpp:182
dolfinx::io::XDMFFile
Read and write mesh::Mesh, function::Function and other objects in XDMF.
Definition: XDMFFile.h:56
dolfinx::fem::CoordinateElement
This class manages coordinate mappings for isoparametric cells.
Definition: CoordinateElement.h:23
dolfinx::io::XDMFFile::write_geometry
void write_geometry(const mesh::Geometry &geometry, const std::string name="geometry", const std::string xpath="/Xdmf/Domain")
Save Geometry.
Definition: XDMFFile.cpp:141