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_format,
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
84 bool isOutputStep(int const timestep, double const t) const;
85
86 std::vector<double> const& getFixedOutputTimes() const
87 {
89 }
90
91 std::vector<std::string> getFileNamesForOutput() const;
92
93 friend std::ostream& operator<<(std::ostream& os, Output const& output);
94
95private:
99 bool isOutputProcess(int const process_id, Process const& process) const;
100
101 void outputMeshes(
102 int const timestep, const double t, int const iteration,
103 std::vector<std::reference_wrapper<const MeshLib::Mesh>> const& meshes)
104 const;
105
107 std::string const& submesh_output_name, Process const& process,
108 const int process_id, double const t,
109 std::vector<GlobalVector*> const& xs) const;
110
111 std::unique_ptr<OutputFormat> _output_format;
112
114
116 std::vector<std::reference_wrapper<Process const>> _output_processes;
117 std::vector<std::string> _mesh_names_for_output;
118 // The reference wrapper enables the compiler to generate a move constructor
119 // and move assignment operator
120 // - another possibility would be to transform the
121 // std::vector<std::unique_ptr<MeshLib::Mesh>> to
122 // std::vector<MeshLib::Mesh*>
123 // - this issue could also be solved by (globally) storing the meshes into a
124 // std::vector<std::shared_ptr<MeshLib::Mesh>>
125 std::reference_wrapper<std::vector<std::unique_ptr<MeshLib::Mesh>> const>
127
128 std::set<std::pair<std::string, MeshLib::MeshItemType>>
130};
131
133 std::vector<Output> const& outputs);
134
135} // namespace ProcessLib
std::set< std::pair< std::string, MeshLib::MeshItemType > > _do_not_project_from_bulk_mesh_to_submeshes
Definition Output.h:129
std::reference_wrapper< std::vector< std::unique_ptr< MeshLib::Mesh > > const > _meshes
Definition Output.h:126
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:354
std::vector< std::string > _mesh_names_for_output
Definition Output.h:117
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:214
Output & operator=(Output &&src)=default
friend std::ostream & operator<<(std::ostream &os, Output const &output)
Definition Output.cpp:446
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:335
void doNotProjectFromBulkMeshToSubmeshes(std::string const &property_name, MeshLib::MeshItemType const mesh_item_type)
Definition Output.cpp:168
OutputDataSpecification _output_data_specification
Definition Output.h:115
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:371
std::vector< std::reference_wrapper< Process const > > _output_processes
Definition Output.h:116
Output & operator=(Output const &src)=delete
Output(std::unique_ptr< OutputFormat > &&output_format, bool const output_nonlinear_iteration_results, OutputDataSpecification &&output_data_specification, std::vector< std::string > &&mesh_names_for_output, std::vector< std::unique_ptr< MeshLib::Mesh > > const &meshes)
Definition Output.cpp:146
bool isOutputProcess(int const process_id, Process const &process) const
Definition Output.cpp:134
bool isOutputStep(int const timestep, double const t) const
Tells if output will be written at the specified timestep/time.
Definition Output.cpp:417
std::unique_ptr< OutputFormat > _output_format
Definition Output.h:111
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:176
void addProcess(ProcessLib::Process const &process)
TODO doc. Opens a PVD file for each process.
Definition Output.cpp:159
bool _output_nonlinear_iteration_results
Definition Output.h:113
std::vector< std::string > getFileNamesForOutput() const
Definition Output.cpp:422
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:288
std::vector< double > const & getFixedOutputTimes() const
Definition Output.h:86
MeshItemType
Definition Location.h:21
std::vector< double > calculateUniqueFixedTimesForAllOutputs(std::vector< Output > const &outputs)
Definition Output.cpp:432
Holds information about which variables to write to output files.
std::vector< double > fixed_output_times
Given times that steps have to reach.