Mallard 0.8.0
Unstructured, GPU accelerated, high-order finite volume CFD solver
Mallard website
Loading...
Searching...
No Matches
data_writer.h
Go to the documentation of this file.
1
12#ifndef DATA_WRITER_H
13#define DATA_WRITER_H
14
15#include <limits>
16#include <memory>
17#include <string>
18#include <unordered_map>
19#include <utility>
20#include <vector>
21
22#include <toml.hpp>
23
24#include "data.h"
25#include "global_order.h"
26#include "mesh.h"
27
28enum class DataFormat {
29 VTU,
30 RESTART,
31 HDF5,
32};
33
34static const std::unordered_map<std::string, DataFormat> FORMAT_TYPES = {
35 {"vtu", DataFormat::VTU},
36 {"restart", DataFormat::RESTART},
37 {"hdf5", DataFormat::HDF5},
38};
39
40static const std::unordered_map<DataFormat, std::string> FORMAT_NAMES = {
41 {DataFormat::VTU, "vtu"},
42 {DataFormat::RESTART, "restart"},
43 {DataFormat::HDF5, "hdf5"},
44};
45
47using RestartAttributes = std::vector<std::pair<std::string, double>>;
48
51
59 static constexpr uint32_t WIDTH = 2;
60 std::vector<uint64_t> keys; // [face]
61 std::vector<rtype> values; // [face][WIDTH]
62};
63
69 double t = 0.0;
70 uint64_t n_cells = 0; // in the file
71 std::vector<std::string> names; // [variable]
72 std::vector<std::vector<rtype>> fields; // [variable][cell read]
74 RestartFaces faces; // every face of the file, in increasing key
75
77 const std::vector<rtype> * find(const std::string & name) const;
78
80 const double * attribute(const std::string & name) const;
81
83 const rtype * face(uint64_t key) const;
84};
85
96RestartData read_restart(const std::string & filename, const std::vector<uint64_t> * cells = nullptr);
97
104 public:
110 void init(const toml::value & input,
111 std::vector<Data> & data,
112 std::shared_ptr<Mesh> mesh,
113 const std::vector<std::string> & restart_variables = {});
114
118 bool due(uint64_t step, rtype t) const;
119
124 void write(uint64_t step, rtype t, bool force = false, const RestartAttributes & attributes = {},
125 const RestartFaces & faces = {});
126
131 rtype next_time() const;
132
137 void resume(uint64_t step, rtype t);
138
142 std::pair<std::string, std::string> summary() const;
143
144 DataFormat get_format() const { return format; }
145 const std::string & get_prefix() const { return prefix; }
146 uint64_t files_written() const { return n_files; }
147
148 protected:
149 void write_vtu(const std::string & filename, rtype t) const;
150 void write_vtu_faces(const std::string & filename, rtype t) const;
151 void write_restart(const std::string & filename, uint64_t step, rtype t,
152 const RestartAttributes & attributes, const RestartFaces & faces) const;
153 void write_pvd() const;
154
160 void write_hdf5_mesh();
161 void write_hdf5(const std::string & stem, uint64_t step, rtype t) const;
162 void write_xdmf(const std::string & stem) const;
163 std::string xdmf_grid(const std::string & stem, double t, const std::string & indent) const;
164 void resume_xdmf(rtype t);
165
170 struct Field {
171 std::string name;
172 std::vector<const Data *> components;
173 uint32_t n_vtk_components() const { return components.size() == 1 ? 1 : 3; }
175 return i_comp < components.size() ? (*components[i_comp])[i_cell] : rtype(0);
176 }
177 };
178
179 std::string prefix;
183 rtype t_last = -std::numeric_limits<rtype>::infinity();
184 uint64_t step_last = std::numeric_limits<uint64_t>::max();
186 std::vector<Field> fields;
187 std::shared_ptr<Mesh> mesh;
188 std::vector<std::pair<rtype, std::string>> history;
189 bool surface = false;
190 std::string geometry = "all";
192 void write_pvtu(const std::string & filename, const std::string & stem) const;
193 void write_restart_distributed(const std::string & filename, uint64_t step, rtype t,
194 const RestartAttributes & attributes, const RestartFaces & faces) const;
195 std::vector<uint32_t> geometry_faces; // Empty: write all cells
196 // HDF5 output: owned cells in global order, and the sizes of the mesh written
198 bool hdf5_mesh_written = false;
200};
201
202#endif // DATA_WRITER_H
Writes snapshots either every interval steps or every time_interval units of simulation time....
Definition data_writer.h:103
DataFormat get_format() const
Definition data_writer.h:144
void write_pvtu(const std::string &filename, const std::string &stem) const
Definition data_writer.cpp:611
std::string geometry
Definition data_writer.h:190
bool due(uint64_t step, rtype t) const
Whether a snapshot is due at this step/time.
Definition data_writer.cpp:190
void write_hdf5_mesh()
HDF5 output: the mesh once (<prefix>_mesh.h5), then per snapshot a file of cell fields,...
Definition data_writer_hdf5.cpp:252
void resume_xdmf(rtype t)
Definition data_writer_hdf5.cpp:83
GlobalOrder cell_order
Definition data_writer.h:197
std::shared_ptr< Mesh > mesh
Definition data_writer.h:187
void write_vtu(const std::string &filename, rtype t) const
Definition data_writer.cpp:713
void write_xdmf(const std::string &stem) const
Definition data_writer_hdf5.cpp:72
std::string xdmf_grid(const std::string &stem, double t, const std::string &indent) const
Definition data_writer_hdf5.cpp:43
bool surface
Definition data_writer.h:189
std::vector< Field > fields
Definition data_writer.h:186
rtype t_last
Definition data_writer.h:183
uint64_t n_files
Definition data_writer.h:191
const std::string & get_prefix() const
Definition data_writer.h:145
uint64_t hdf5_topology_size
Definition data_writer.h:199
void resume(uint64_t step, rtype t)
Continue numbering and the .pvd (.xmf) series of a previous run that stopped at (step,...
Definition data_writer.cpp:252
std::pair< std::string, std::string > summary() const
Format and the output key-value line for the run log.
Definition data_writer.cpp:176
uint64_t n_written
Definition data_writer.h:182
void write_restart_distributed(const std::string &filename, uint64_t step, rtype t, const RestartAttributes &attributes, const RestartFaces &faces) const
Definition data_writer.cpp:433
uint64_t step_last
Definition data_writer.h:184
std::string prefix
Definition data_writer.h:179
bool hdf5_mesh_written
Definition data_writer.h:198
uint64_t hdf5_n_nodes
Definition data_writer.h:199
void init(const toml::value &input, std::vector< Data > &data, std::shared_ptr< Mesh > mesh, const std::vector< std::string > &restart_variables={})
Set up from a [[write_data]] entry.
Definition data_writer.cpp:51
uint64_t interval
Definition data_writer.h:180
void write(uint64_t step, rtype t, bool force=false, const RestartAttributes &attributes={}, const RestartFaces &faces={})
Write a snapshot if due (or forced); restart files also store the attributes and the faces (of the ow...
Definition data_writer.cpp:205
rtype next_time() const
Next simulation time at which a snapshot is due (infinity for step-based writers).
Definition data_writer.cpp:198
void write_pvd() const
Definition data_writer.cpp:632
void write_hdf5(const std::string &stem, uint64_t step, rtype t) const
Definition data_writer_hdf5.cpp:254
uint64_t files_written() const
Definition data_writer.h:146
rtype time_interval
Definition data_writer.h:181
void write_restart(const std::string &filename, uint64_t step, rtype t, const RestartAttributes &attributes, const RestartFaces &faces) const
Definition data_writer.cpp:406
void write_vtu_faces(const std::string &filename, rtype t) const
Definition data_writer.cpp:645
std::vector< std::pair< rtype, std::string > > history
Definition data_writer.h:188
DataFormat format
Definition data_writer.h:185
std::vector< uint32_t > geometry_faces
Definition data_writer.h:195
Items (cells, nodes) spread over the ranks, each with a global id in [0, n_global),...
Definition global_order.h:30
KOKKOS_INLINE_FUNCTION rtype dot(const rtype *a, const rtype *b)
Compute the dot product of two arrays.
Definition common_math.h:32
float rtype
Definition common_typedef.h:39
Data class declaration.
std::vector< std::pair< std::string, double > > RestartAttributes
Named scalars of a restart file (version 3), e.g. the statistics' weight.
Definition data_writer.h:47
constexpr uint64_t RESTART_FACES_PER_CELL
Upper bound on the faces of a cell, for the keys of RestartFaces.
Definition data_writer.h:50
DataFormat
Definition data_writer.h:28
RestartData read_restart(const std::string &filename, const std::vector< uint64_t > *cells=nullptr)
Read a restart file written by a DataWriter with format = "restart": every cell, or with cells,...
Definition data_writer.cpp:489
Moving per-item values from their owner ranks to contiguous blocks in global-id order,...
Mesh class declaration.
An output array: one scalar, or the N_DIM components of a vector (written as 3 components,...
Definition data_writer.h:170
std::string name
Definition data_writer.h:171
rtype value(uint32_t i_cell, uint32_t i_comp) const
Definition data_writer.h:174
std::vector< const Data * > components
Definition data_writer.h:172
uint32_t n_vtk_components() const
Definition data_writer.h:173
Contents of a restart file.
Definition data_writer.h:67
const rtype * face(uint64_t key) const
The RestartFaces::WIDTH values of the face with this key, or nullptr if the file has none.
Definition data_writer.cpp:400
RestartAttributes attributes
Definition data_writer.h:73
double t
Definition data_writer.h:69
const std::vector< rtype > * find(const std::string &name) const
Values of the named variable, or nullptr if the file has none.
Definition data_writer.cpp:386
uint64_t n_cells
Definition data_writer.h:70
RestartFaces faces
Definition data_writer.h:74
const double * attribute(const std::string &name) const
Value of the named attribute, or nullptr if the file has none.
Definition data_writer.cpp:393
std::vector< std::string > names
Definition data_writer.h:71
uint64_t step
Definition data_writer.h:68
std::vector< std::vector< rtype > > fields
Definition data_writer.h:72
Face records of a restart file (version 4): the [p, u_n] of the characteristic boundary faces (docs/d...
Definition data_writer.h:58
static constexpr uint32_t WIDTH
Definition data_writer.h:59
std::vector< rtype > values
Definition data_writer.h:61
std::vector< uint64_t > keys
Definition data_writer.h:60
Kokkos::View< uint32_t *, Space > cells
Definition teno_setup.cpp:682