OGS
Output.h
Go to the documentation of this file.
1
11#pragma once
12
13#include <iosfwd>
14#include <map>
15#include <utility>
16#include <vector>
17
20#include "OutputFormat.h"
21
22namespace ProcessLib
23{
24class Process;
25
31class Output
32{
33public:
34 Output(std::unique_ptr<OutputFormat>&& output_file,
35 bool const output_nonlinear_iteration_results,
36 OutputDataSpecification&& output_data_specification,
37 std::vector<std::string>&& mesh_names_for_output,
38 std::vector<std::unique_ptr<MeshLib::Mesh>> const& meshes);
39
40 Output(Output const& other) = delete;
41 Output(Output&& other) = default;
42 Output& operator=(Output const& src) = delete;
43 Output& operator=(Output&& src) = default;
44 ~Output() = default;
45
47 void addProcess(ProcessLib::Process const& process);
48
52 std::string const& property_name,
53 MeshLib::MeshItemType const mesh_item_type);
54
57 void doOutput(Process const& process, const int process_id,
58 int const timestep, const double t, int const iteration,
59 std::vector<GlobalVector*> const& xs) const;
60
64 void doOutputLastTimestep(Process const& process, const int process_id,
65 int const timestep, const double t,
66 int const iteration,
67 std::vector<GlobalVector*> const& xs) const;
68
72 void doOutputAlways(Process const& process, const int process_id,
73 int const timestep, const double t, int const iteration,
74 std::vector<GlobalVector*> const& xs) const;
75
78 void doOutputNonlinearIteration(Process const& process,
79 const int process_id, int const timestep,
80 const double t, const int iteration,
81 std::vector<GlobalVector*> const& xs) const;
82
83 std::vector<double> const& getFixedOutputTimes() const
84 {
86 }
87
88 std::vector<std::string> getFileNamesForOutput() const;
89
90 friend std::ostream& operator<<(std::ostream& os, Output const& output);
91
92private:
96 bool isOutputProcess(int const process_id, Process const& process) const;
97
98 void outputMeshes(
99 int const timestep, const double t, int const iteration,
100 std::vector<std::reference_wrapper<const MeshLib::Mesh>> const& meshes)
101 const;
102
104 std::string const& submesh_output_name, Process const& process,
105 const int process_id, double const t,
106 std::vector<GlobalVector*> const& xs) const;
107
108 std::unique_ptr<OutputFormat> _output_format;
109
111
113 std::vector<std::reference_wrapper<Process const>> _output_processes;
114 std::vector<std::string> _mesh_names_for_output;
115 // The reference wrapper enables the compiler to generate a move constructor
116 // and move assignment operator
117 // - another possibility would be to transform the
118 // std::vector<std::unique_ptr<MeshLib::Mesh>> to
119 // std::vector<MeshLib::Mesh*>
120 // - this issue could also be solved by (globally) storing the meshes into a
121 // std::vector<std::shared_ptr<MeshLib::Mesh>>
122 std::reference_wrapper<std::vector<std::unique_ptr<MeshLib::Mesh>> const>
124
125 std::set<std::pair<std::string, MeshLib::MeshItemType>>
127};
128
129} // namespace ProcessLib
std::set< std::pair< std::string, MeshLib::MeshItemType > > _do_not_project_from_bulk_mesh_to_submeshes
Definition: Output.h:126
std::reference_wrapper< std::vector< std::unique_ptr< MeshLib::Mesh > > const > _meshes
Definition: Output.h:123
void doOutputLastTimestep(Process const &process, const int process_id, int const timestep, const double t, int const iteration, std::vector< GlobalVector * > const &xs) const
Definition: Output.cpp:348
std::vector< std::string > _mesh_names_for_output
Definition: Output.h:114
MeshLib::Mesh const & prepareSubmesh(std::string const &submesh_output_name, Process const &process, const int process_id, double const t, std::vector< GlobalVector * > const &xs) const
Definition: Output.cpp:204
Output & operator=(Output &&src)=default
friend std::ostream & operator<<(std::ostream &os, Output const &output)
Definition: Output.cpp:422
Output(Output &&other)=default
Output(Output const &other)=delete
void doOutput(Process const &process, const int process_id, int const timestep, const double t, int const iteration, std::vector< GlobalVector * > const &xs) const
Definition: Output.cpp:329
void doNotProjectFromBulkMeshToSubmeshes(std::string const &property_name, MeshLib::MeshItemType const mesh_item_type)
Definition: Output.cpp:165
OutputDataSpecification _output_data_specification
Definition: Output.h:112
void doOutputNonlinearIteration(Process const &process, const int process_id, int const timestep, const double t, const int iteration, std::vector< GlobalVector * > const &xs) const
Definition: Output.cpp:365
std::vector< std::reference_wrapper< Process const > > _output_processes
Definition: Output.h:113
Output & operator=(Output const &src)=delete
bool isOutputProcess(int const process_id, Process const &process) const
Definition: Output.cpp:131
std::unique_ptr< OutputFormat > _output_format
Definition: Output.h:108
void outputMeshes(int const timestep, const double t, int const iteration, std::vector< std::reference_wrapper< const MeshLib::Mesh > > const &meshes) const
Definition: Output.cpp:173
void addProcess(ProcessLib::Process const &process)
TODO doc. Opens a PVD file for each process.
Definition: Output.cpp:156
bool _output_nonlinear_iteration_results
Definition: Output.h:110
std::vector< std::string > getFileNamesForOutput() const
Definition: Output.cpp:411
void doOutputAlways(Process const &process, const int process_id, int const timestep, const double t, int const iteration, std::vector< GlobalVector * > const &xs) const
Definition: Output.cpp:282
std::vector< double > const & getFixedOutputTimes() const
Definition: Output.h:83
MeshItemType
Definition: Location.h:21
Holds information about which variables to write to output files.
std::vector< double > fixed_output_times
Given times that steps have to reach.