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 <vector>
8
11
12namespace ProcessLib
13{
14class Process;
15
17{
18 OutputFormat(std::string const& directory, std::string prefix,
19 std::string suffix, bool const compression);
20 virtual ~OutputFormat() = default;
21
22 OutputFormat(OutputFormat const& other) = delete;
23 OutputFormat(OutputFormat&& other) = default;
25 OutputFormat& operator=(OutputFormat&& other) = default;
26
27 std::string directory;
28 std::string prefix;
29 std::string suffix;
32
33 virtual void outputMeshes(
34 const int timestep, const double t, const int iteration,
35 bool const converged,
36 std::vector<std::reference_wrapper<const MeshLib::Mesh>> const& meshes,
37 std::set<std::string> const& output_variables) const = 0;
38 virtual std::string constructFilename(std::string const& mesh_name,
39 int const timestep, double const t,
40 int const iteration,
41 bool const converged) const = 0;
42};
43
44inline std::ostream& operator<<(std::ostream& os, OutputFormat const& of)
45{
46 os << "OutputFormat::directory:" << of.directory << std::endl;
47 os << "OutputFormat::prefix:" << of.prefix << std::endl;
48 os << "OutputFormat::suffix:" << of.suffix << std::endl;
49 os << "OutputFormat::compression:" << of.compression << std::endl;
50 return os;
51}
52
53struct OutputVTKFormat final : public OutputFormat
54{
55 OutputVTKFormat(std::string const& directory, std::string prefix,
56 std::string suffix, bool const compression,
57 int const data_mode)
58 : OutputFormat(directory, std::move(prefix), std::move(suffix),
61 {
62 }
63
64 void outputMeshes(
65 const int timestep, const double t, const int iteration,
66 bool const converged,
67 std::vector<std::reference_wrapper<const MeshLib::Mesh>> const& meshes,
68 std::set<std::string> const& output_variables) const override;
69
75
77 mutable std::map<std::string, MeshLib::IO::PVDFile> mesh_name_to_pvd_file;
78
80 std::string const& mesh_name) const;
81
82 std::string constructFilename(std::string const& mesh_name,
83 int const timestep, double const t,
84 int const iteration,
85 bool const converged) const override;
86
87 std::string constructPVDName(std::string const& mesh_name) const;
88};
89
91{
92 OutputXDMFHDF5Format(std::string const& directory, std::string prefix,
93 std::string suffix, bool const compression,
94 unsigned int const n_files,
95 unsigned int const chunk_size_bytes)
96 : OutputFormat(directory, std::move(prefix), std::move(suffix),
100 {
101 }
102
104 const int timestep, const double t, const int iteration,
105 bool const converged,
106 std::vector<std::reference_wrapper<const MeshLib::Mesh>> const& meshes,
107 std::set<std::string> const& output_variables) const override
108 {
109 outputMeshXdmf(output_variables, meshes, timestep, t, iteration,
110 converged);
111 }
112
113 std::string constructFilename(std::string const& mesh_name,
114 int const timestep, double const t,
115 int const iteration,
116 bool const converged) const override;
117
118 mutable std::unique_ptr<MeshLib::IO::XdmfHdfWriter> mesh_xdmf_hdf_writer;
120 unsigned int n_files;
122 unsigned int const chunk_size_bytes;
123
124 void outputMeshXdmf(
125 std::set<std::string> const& output_variables,
126 std::vector<std::reference_wrapper<const MeshLib::Mesh>> const& meshes,
127 int const timestep, double const t, int const iteration,
128 bool const converged) const;
129};
130
131void outputMeshVtk(std::string const& file_name, MeshLib::Mesh const& mesh,
132 bool const compress_output, int const data_mode);
133} // namespace ProcessLib
std::ostream & operator<<(std::ostream &os, Output const &output)
void outputMeshVtk(std::string const &file_name, MeshLib::Mesh const &mesh, 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
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)
unsigned int const chunk_size_bytes
Specifies the chunks size in bytes per hdf5 output file.
unsigned int n_files
Specifies the number of hdf5 output files.
std::unique_ptr< MeshLib::IO::XdmfHdfWriter > mesh_xdmf_hdf_writer