OGS
Output.h
Go to the documentation of this file.
1 
11 #pragma once
12 
13 #include <map>
14 #include <utility>
15 
18 #include "ProcessOutput.h"
19 
20 namespace ProcessLib
21 {
22 class Process;
23 
29 class Output
30 {
31 public:
33  {
34  explicit PairRepeatEachSteps(int c, int e) : repeat(c), each_steps(e) {}
35 
36  const int repeat;
37  const int each_steps;
38  };
39 
40 public:
41  Output(std::string directory, OutputType const type, std::string prefix,
42  std::string suffix, bool const compress_output, unsigned int n_files,
43  std::string const& data_mode,
44  bool const output_nonlinear_iteration_results,
45  std::vector<PairRepeatEachSteps> repeats_each_steps,
46  std::vector<double>&& fixed_output_times,
47  OutputDataSpecification&& output_data_specification,
48  std::vector<std::string>&& mesh_names_for_output,
49  std::vector<std::unique_ptr<MeshLib::Mesh>> const& meshes);
50 
52  void addProcess(ProcessLib::Process const& process);
53 
56  void doOutput(Process const& process, const int process_id,
57  int const timestep, const double t, int const iteration,
58  std::vector<GlobalVector*> const& x);
59 
63  void doOutputLastTimestep(Process const& process, const int process_id,
64  int const timestep, const double t,
65  int const iteration,
66  std::vector<GlobalVector*> const& x);
67 
71  void doOutputAlways(Process const& process, const int process_id,
72  int const timestep, const double t, int const iteration,
73  std::vector<GlobalVector*> const& x);
74 
77  void doOutputNonlinearIteration(Process const& process,
78  const int process_id, int const timestep,
79  const double t, const int iteration,
80  std::vector<GlobalVector*> const& x);
81 
82  std::vector<double> getFixedOutputTimes() const
83  {
84  return _fixed_output_times;
85  }
86 
87 private:
88  struct OutputFile;
89 
90  static void outputMesh(OutputFile const& output_file,
91  MeshLib::IO::PVDFile* const pvd_file,
92  MeshLib::Mesh const& mesh,
93  double const t);
94 
95  void outputMeshXdmf(OutputFile const& output_file,
96  std::vector<std::reference_wrapper<const MeshLib::Mesh>>
97  meshes,
98  int const timestep,
99  double const t);
100 
101 private:
102  std::unique_ptr<MeshLib::IO::XdmfHdfWriter> _mesh_xdmf_hdf_writer;
103 
104  std::string const _output_directory;
106  std::string const _output_file_prefix;
107  std::string const _output_file_suffix;
108 
112  unsigned int const _n_files;
113 
119 
121  std::vector<PairRepeatEachSteps> _repeats_each_steps;
122 
124  std::vector<double> const _fixed_output_times;
125 
126  std::multimap<Process const*, MeshLib::IO::PVDFile> _process_to_pvd_file;
127 
135  MeshLib::IO::PVDFile* findPVDFile(Process const& process,
136  const int process_id,
137  std::string const& mesh_name_for_output);
138 
140  bool shallDoOutput(int timestep, double const t);
141 
143  std::vector<std::string> _mesh_names_for_output;
144  std::vector<std::unique_ptr<MeshLib::Mesh>> const& _meshes;
145 };
146 
147 } // namespace ProcessLib
XdmfWriter which create contiguous data for geometry and topology and writes this and all attributes ...
std::vector< PairRepeatEachSteps > _repeats_each_steps
Describes after which timesteps to write output.
Definition: Output.h:121
void doOutputNonlinearIteration(Process const &process, const int process_id, int const timestep, const double t, const int iteration, std::vector< GlobalVector * > const &x)
Definition: Output.cpp:435
bool const _output_file_compression
Enables or disables zlib-compression of the output files.
Definition: Output.h:110
std::vector< std::string > _mesh_names_for_output
Definition: Output.h:143
std::string const _output_file_prefix
Definition: Output.h:106
OutputDataSpecification const _output_data_specification
Definition: Output.h:142
Output(std::string directory, OutputType const type, std::string prefix, std::string suffix, bool const compress_output, unsigned int n_files, std::string const &data_mode, bool const output_nonlinear_iteration_results, std::vector< PairRepeatEachSteps > repeats_each_steps, std::vector< double > &&fixed_output_times, OutputDataSpecification &&output_data_specification, std::vector< std::string > &&mesh_names_for_output, std::vector< std::unique_ptr< MeshLib::Mesh >> const &meshes)
Definition: Output.cpp:96
int const _output_file_data_mode
Definition: Output.h:117
std::multimap< Process const *, MeshLib::IO::PVDFile > _process_to_pvd_file
Definition: Output.h:126
std::vector< double > getFixedOutputTimes() const
Definition: Output.h:82
void doOutput(Process const &process, const int process_id, int const timestep, const double t, int const iteration, std::vector< GlobalVector * > const &x)
Definition: Output.cpp:399
void outputMeshXdmf(OutputFile const &output_file, std::vector< std::reference_wrapper< const MeshLib::Mesh >> meshes, int const timestep, double const t)
Definition: Output.cpp:238
static void outputMesh(OutputFile const &output_file, MeshLib::IO::PVDFile *const pvd_file, MeshLib::Mesh const &mesh, double const t)
Definition: Output.cpp:261
std::string const _output_directory
Definition: Output.h:104
bool shallDoOutput(int timestep, double const t)
Determines if there should be output at the given timestep or t.
Definition: Output.cpp:61
std::vector< double > const _fixed_output_times
Given times that steps have to reach.
Definition: Output.h:124
OutputType const _output_file_type
Definition: Output.h:105
void doOutputAlways(Process const &process, const int process_id, int const timestep, const double t, int const iteration, std::vector< GlobalVector * > const &x)
Definition: Output.cpp:277
unsigned int const _n_files
Specifies the number of hdf5 output files.
Definition: Output.h:112
void doOutputLastTimestep(Process const &process, const int process_id, int const timestep, const double t, int const iteration, std::vector< GlobalVector * > const &x)
Definition: Output.cpp:418
void addProcess(ProcessLib::Process const &process)
TODO doc. Opens a PVD file for each process.
Definition: Output.cpp:128
std::string const _output_file_suffix
Definition: Output.h:107
MeshLib::IO::PVDFile * findPVDFile(Process const &process, const int process_id, std::string const &mesh_name_for_output)
Definition: Output.cpp:146
std::unique_ptr< MeshLib::IO::XdmfHdfWriter > _mesh_xdmf_hdf_writer
Definition: Output.h:102
std::vector< std::unique_ptr< MeshLib::Mesh > > const & _meshes
Definition: Output.h:144
bool const _output_nonlinear_iteration_results
Definition: Output.h:118
Holds information about which variables to write to output files.
Definition: ProcessOutput.h:23
const int each_steps
Do output every each_steps timestep.
Definition: Output.h:37
const int repeat
Apply each_steps repeat times.
Definition: Output.h:36