OGS
OutputFormat.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) OpenGeoSys Community (opengeosys.org)
2// SPDX-License-Identifier: BSD-3-Clause
3
4#pragma once
5
6#include <iosfwd>
7#include <set>
8#include <vector>
9
12
13namespace ProcessLib
14{
15class Process;
16
18{
19 OutputFormat(std::string const& directory, std::string prefix,
20 std::string suffix, bool const compression);
21 virtual ~OutputFormat() = default;
22
23 OutputFormat(OutputFormat const& other) = delete;
24 OutputFormat(OutputFormat&& other) = default;
26 OutputFormat& operator=(OutputFormat&& other) = default;
27
28 std::string directory;
29 std::string prefix;
30 std::string suffix;
33
34 virtual void outputMeshes(
35 const int timestep, const double t, const int iteration,
36 bool const converged,
37 std::vector<std::reference_wrapper<const MeshLib::Mesh>> const& meshes,
38 std::set<std::string> const& output_variables) const = 0;
39 virtual std::string constructFilename(std::string const& mesh_name,
40 int const timestep, double const t,
41 int const iteration,
42 bool const converged) const = 0;
43};
44
45inline std::ostream& operator<<(std::ostream& os, OutputFormat const& of)
46{
47 os << "OutputFormat::directory:" << of.directory << std::endl;
48 os << "OutputFormat::prefix:" << of.prefix << std::endl;
49 os << "OutputFormat::suffix:" << of.suffix << std::endl;
50 os << "OutputFormat::compression:" << of.compression << std::endl;
51 return os;
52}
53
54struct OutputVTKFormat final : public OutputFormat
55{
56 OutputVTKFormat(std::string const& directory, std::string prefix,
57 std::string suffix, bool const compression,
58 int const data_mode)
59 : OutputFormat(directory, std::move(prefix), std::move(suffix),
62 {
63 }
64
65 void outputMeshes(
66 const int timestep, const double t, const int iteration,
67 bool const converged,
68 std::vector<std::reference_wrapper<const MeshLib::Mesh>> const& meshes,
69 std::set<std::string> const& output_variables) const override;
70
76
78 mutable std::map<std::string, MeshLib::IO::PVDFile> mesh_name_to_pvd_file;
79
81 std::string const& mesh_name) const;
82
83 std::string constructFilename(std::string const& mesh_name,
84 int const timestep, double const t,
85 int const iteration,
86 bool const converged) const override;
87
88 std::string constructPVDName(std::string const& mesh_name) const;
89};
90
92{
93 OutputXDMFHDF5Format(std::string const& directory, std::string prefix,
94 std::string suffix, bool const compression,
95 unsigned int const n_files,
96 unsigned int const chunk_size_bytes,
98 std::set<std::string> static_variables)
99 : OutputFormat(directory, std::move(prefix), std::move(suffix),
105 {
106 }
107
109 const int timestep, const double t, const int iteration,
110 bool const converged,
111 std::vector<std::reference_wrapper<const MeshLib::Mesh>> const& meshes,
112 std::set<std::string> const& output_variables) const override
113 {
114 outputMeshXdmf(output_variables, meshes, timestep, t, iteration,
115 converged);
116 }
117
118 std::string constructFilename(std::string const& mesh_name,
119 int const timestep, double const t,
120 int const iteration,
121 bool const converged) const override;
122
123 mutable std::unique_ptr<MeshLib::IO::XdmfHdfWriter> mesh_xdmf_hdf_writer;
126 std::set<std::string> const static_variables;
128 unsigned int n_files;
130 unsigned int const chunk_size_bytes;
133
134 void outputMeshXdmf(
135 std::set<std::string> const& output_variables,
136 std::vector<std::reference_wrapper<const MeshLib::Mesh>> const& meshes,
137 int const timestep, double const t, int const iteration,
138 bool const converged) const;
139};
140
141void outputMeshVtk(std::string const& file_name, MeshLib::Mesh const& mesh,
142 std::set<std::string> const& output_variables,
143 bool const compress_output, int const data_mode);
144} // namespace ProcessLib
std::ostream & operator<<(std::ostream &os, Output const &output)
void outputMeshVtk(std::string const &file_name, MeshLib::Mesh const &mesh, std::set< std::string > const &output_variables, bool const compress_output, int const data_mode)
virtual std::string constructFilename(std::string const &mesh_name, int const timestep, double const t, int const iteration, bool const converged) const =0
OutputFormat & operator=(OutputFormat &other)=delete
OutputFormat(OutputFormat &&other)=default
OutputFormat(std::string const &directory, std::string prefix, std::string suffix, bool const compression)
virtual void outputMeshes(const int timestep, const double t, const int iteration, bool const converged, std::vector< std::reference_wrapper< const MeshLib::Mesh > > const &meshes, std::set< std::string > const &output_variables) const =0
bool compression
Enables or disables zlib-compression of the output files.
OutputFormat(OutputFormat const &other)=delete
OutputFormat & operator=(OutputFormat &&other)=default
virtual ~OutputFormat()=default
OutputVTKFormat(std::string const &directory, std::string prefix, std::string suffix, bool const compression, int const data_mode)
std::map< std::string, MeshLib::IO::PVDFile > mesh_name_to_pvd_file
Holds the PVD files associated with the meshes.
std::string constructPVDName(std::string const &mesh_name) const
std::string constructFilename(std::string const &mesh_name, int const timestep, double const t, int const iteration, bool const converged) const override
MeshLib::IO::PVDFile & findOrCreatePVDFile(std::string const &mesh_name) const
void outputMeshes(const int timestep, const double t, const int iteration, bool const converged, std::vector< std::reference_wrapper< const MeshLib::Mesh > > const &meshes, std::set< std::string > const &output_variables) const override
std::string constructFilename(std::string const &mesh_name, int const timestep, double const t, int const iteration, bool const converged) const override
std::set< std::string > const static_variables
void outputMeshXdmf(std::set< std::string > const &output_variables, std::vector< std::reference_wrapper< const MeshLib::Mesh > > const &meshes, int const timestep, double const t, int const iteration, bool const converged) const
void outputMeshes(const int timestep, const double t, const int iteration, bool const converged, std::vector< std::reference_wrapper< const MeshLib::Mesh > > const &meshes, std::set< std::string > const &output_variables) const override
OutputXDMFHDF5Format(std::string const &directory, std::string prefix, std::string suffix, bool const compression, unsigned int const n_files, unsigned int const chunk_size_bytes, bool const store_static_data_separately, std::set< std::string > static_variables)
unsigned int const chunk_size_bytes
Specifies the chunks size in bytes per hdf5 output file.
bool const store_static_data_separately
split static and dynamic data output to separate files
unsigned int n_files
Specifies the number of hdf5 output files.
std::unique_ptr< MeshLib::IO::XdmfHdfWriter > mesh_xdmf_hdf_writer