Advanced Multi-Physics (AMP)
On-Line Documentation
Xdmf.h
Go to the documentation of this file.
1#ifndef included_AMP_XDMF
2#define included_AMP_XDMF
3
4#include "AMP/IO/HDF.h"
5#include "AMP/utils/AMP_MPI.h"
6#include "AMP/utils/Array.h"
7
8#include <map>
9#include <stdio.h>
10#include <stdlib.h>
11#include <vector>
12
13
14namespace AMP {
15
16
17// Helper class to write/read XDMF files
18class Xdmf
19{
20public:
47 enum class DataType { Null = 0, Char, Int32, Int64, Uint32, Uint64, Float, Double };
49 enum class Center { Null = 0, Node, Edge, Face, Cell, Grid, Other };
50
51 struct VarData {
52 std::string name; // Variable name
53 ArraySize size; // Size of variable
54 RankType rankType; // Rank order of data
55 Center center; // Variable centering
56 std::string data; // Variable data
57 };
58
59 struct MeshData {
60 std::string name; // Name of mesh domain
61 TopologyType type; // Type of mesh
62 ArraySize size; // Size of mesh (meaning depends on mesh type)
63 double range[6]; // Range of the mesh (only used for UniformMesh2D/UniformMesh3D)
64 std::string x; // x coordinates (or xy/xyz coordinates)
65 std::string y; // y coordinates
66 std::string z; // z coordinates
67 std::string dofMap; // mesh connectivity
68 std::vector<VarData> vars; // Variables
71 void addVariable( const std::string &varName,
72 const ArraySize &varSize,
73 RankType rank,
74 Center center,
75 const std::string &varData );
76 };
77
78
79public:
81 static MeshData createPointMesh( const std::string &name,
82 uint8_t NDIM,
83 size_t N,
84 const std::string &x,
85 const std::string &y = "",
86 const std::string &z = "" );
87
95 static MeshData createUniformMesh( const std::string &name,
96 const std::vector<double> &range,
97 const ArraySize &size );
98
108 static MeshData createCurvilinearMesh( const std::string &name,
109 const ArraySize &size,
110 const std::string &x,
111 const std::string &y = "",
112 const std::string &z = "" );
113
129 static MeshData createUnstructuredMesh( const std::string &name,
130 uint8_t NDIM,
131 TopologyType type,
132 size_t NumElements,
133 const std::string &dofMap,
134 size_t NumNodes,
135 const std::string &x,
136 const std::string &y = "",
137 const std::string &z = "" );
138
139public:
141 void addMesh( const std::string &meshName, const MeshData &domain );
142
144 void addMultiMesh( const std::string &meshName, const std::vector<std::string> &submeshes );
145
147 void addMultiMesh( const std::string &meshName, const std::vector<MeshData> &submeshes );
148
150 void gather( const AMP::AMP_MPI &comm );
151
153 void write( const std::string &filename ) const;
154
156 void clear();
157
159 bool empty() const { return d_meshData.empty(); }
160
161private:
162 std::map<std::string, std::vector<MeshData>> d_meshData;
163};
164
165
166} // namespace AMP
167
168#endif
Provides C++ wrapper around MPI routines.
Definition AMP_MPI.h:63
Simple class to store the array dimensions.
Definition ArraySize.h:138
std::map< std::string, std::vector< MeshData > > d_meshData
Definition Xdmf.h:162
void clear()
Clear the internal data.
void addMultiMesh(const std::string &meshName, const std::vector< MeshData > &submeshes)
Add a multi-mesh.
static MeshData createUniformMesh(const std::string &name, const std::vector< double > &range, const ArraySize &size)
Add a uniform mesh.
DataType
Definition Xdmf.h:47
static MeshData createPointMesh(const std::string &name, uint8_t NDIM, size_t N, const std::string &x, const std::string &y="", const std::string &z="")
Add a Point mesh.
static MeshData createCurvilinearMesh(const std::string &name, const ArraySize &size, const std::string &x, const std::string &y="", const std::string &z="")
Add a Curvilinear mesh.
static MeshData createUnstructuredMesh(const std::string &name, uint8_t NDIM, TopologyType type, size_t NumElements, const std::string &dofMap, size_t NumNodes, const std::string &x, const std::string &y="", const std::string &z="")
Add an unstructured mesh.
void addMultiMesh(const std::string &meshName, const std::vector< std::string > &submeshes)
Add a multi-mesh.
RankType
Definition Xdmf.h:48
void write(const std::string &filename) const
Write the xml file.
void addMesh(const std::string &meshName, const MeshData &domain)
Add a mesh domain.
TopologyType
Definition Xdmf.h:21
bool empty() const
Check if the class is empty.
Definition Xdmf.h:159
void gather(const AMP::AMP_MPI &comm)
Gather all data to rank 0.
ArraySize size
Definition Xdmf.h:62
double range[6]
Definition Xdmf.h:63
std::string x
Definition Xdmf.h:64
std::string z
Definition Xdmf.h:66
std::vector< VarData > vars
Definition Xdmf.h:68
std::string y
Definition Xdmf.h:65
TopologyType type
Definition Xdmf.h:61
std::string dofMap
Definition Xdmf.h:67
void addVariable(const std::string &varName, const ArraySize &varSize, RankType rank, Center center, const std::string &varData)
Add a variable.
std::string name
Definition Xdmf.h:60
RankType rankType
Definition Xdmf.h:54
Center center
Definition Xdmf.h:55
std::string data
Definition Xdmf.h:56
ArraySize size
Definition Xdmf.h:53
std::string name
Definition Xdmf.h:52



Advanced Multi-Physics (AMP)
Oak Ridge National Laboratory
Idaho National Laboratory
Los Alamos National Laboratory
This page automatically produced from the
source code by doxygen
Last updated: Tue Mar 10 2026 13:06:40.
Comments on this page