ExaDG
Loading...
Searching...
No Matches
postprocessor.h
1/* ______________________________________________________________________
2 *
3 * ExaDG - High-Order Discontinuous Galerkin for the Exa-Scale
4 *
5 * Copyright (C) 2021 by the ExaDG authors
6 *
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <https://www.gnu.org/licenses/>.
19 * ______________________________________________________________________
20 */
21
22#ifndef INCLUDE_EXADG_INCOMPRESSIBLE_NAVIER_STOKES_POSTPROCESSOR_POSTPROCESSOR_H_
23#define INCLUDE_EXADG_INCOMPRESSIBLE_NAVIER_STOKES_POSTPROCESSOR_POSTPROCESSOR_H_
24
25#include <exadg/incompressible_navier_stokes/postprocessor/divergence_and_mass_error.h>
26#include <exadg/incompressible_navier_stokes/postprocessor/kinetic_energy_dissipation_detailed.h>
27#include <exadg/incompressible_navier_stokes/postprocessor/line_plot_calculation.h>
28#include <exadg/incompressible_navier_stokes/postprocessor/output_generator.h>
29#include <exadg/incompressible_navier_stokes/postprocessor/pointwise_output_generator.h>
30#include <exadg/incompressible_navier_stokes/postprocessor/postprocessor_base.h>
31#include <exadg/incompressible_navier_stokes/spatial_discretization/spatial_operator_base.h>
32#include <exadg/postprocessor/error_calculation.h>
33#include <exadg/postprocessor/kinetic_energy_spectrum.h>
34#include <exadg/postprocessor/lift_and_drag_calculation.h>
35#include <exadg/postprocessor/pressure_difference_calculation.h>
36
37namespace ExaDG
38{
39namespace IncNS
40{
41template<int dim>
43{
45 {
46 }
47
48 OutputData output_data;
49 PointwiseOutputData<dim> pointwise_output_data;
50 ErrorCalculationData<dim> error_data_u;
51 ErrorCalculationData<dim> error_data_p;
52 LiftAndDragData lift_and_drag_data;
53 PressureDifferenceData<dim> pressure_difference_data;
54 MassConservationData mass_data;
55 KineticEnergyData kinetic_energy_data;
56 KineticEnergySpectrumData kinetic_energy_spectrum_data;
57 LinePlotData<dim> line_plot_data;
58};
59
60template<int dim, typename Number>
61class PostProcessor : public PostProcessorBase<dim, Number>
62{
63public:
65
67
68 typedef typename Base::VectorType VectorType;
69
70 typedef typename Base::Operator Operator;
71
72 PostProcessor(PostProcessorData<dim> const & postprocessor_data, MPI_Comm const & mpi_comm);
73
74 virtual ~PostProcessor();
75
76 void
77 setup(Operator const & pde_operator) override;
78
79 void
80 do_postprocessing(VectorType const & velocity,
81 VectorType const & pressure,
82 double const time = 0.0,
83 types::time_step const time_step_number = numbers::steady_timestep) override;
84
85protected:
86 MPI_Comm const mpi_comm;
87
88private:
89 void
90 initialize_derived_fields();
91
92 void
93 invalidate_derived_fields();
94
96
97 dealii::SmartPointer<NavierStokesOperator const> navier_stokes_operator;
98
99 // DoF vectors for derived quantities
103 SolutionField<dim, Number> velocity_magnitude;
104 SolutionField<dim, Number> vorticity_magnitude;
105 SolutionField<dim, Number> streamfunction;
106 SolutionField<dim, Number> q_criterion;
108
109 TimeControl time_control_mean_velocity;
110 SolutionField<dim, Number> mean_velocity; // velocity field averaged over time
111
112 // write output for visualization of results (e.g., using paraview)
113 OutputGenerator<dim, Number> output_generator;
114
115 // writes output at certain points in space
116 PointwiseOutputGenerator<dim, Number> pointwise_output_generator;
117
118 // calculate errors for verification purposes for problems with known analytical solution
119 ErrorCalculator<dim, Number> error_calculator_u;
120 ErrorCalculator<dim, Number> error_calculator_p;
121
122 // calculate lift and drag forces for flow around bodies
123 LiftAndDragCalculator<dim, Number> lift_and_drag_calculator;
124
125 // calculate pressure difference between two points, e.g., the leading and trailing edge of a body
126 PressureDifferenceCalculator<dim, Number> pressure_difference_calculator;
127
128 // calculate divergence and continuity errors as a measure of mass conservation (particularly
129 // relevant for turbulent flows)
130 DivergenceAndMassErrorCalculator<dim, Number> div_and_mass_error_calculator;
131
132 // calculate kinetic energy as well as dissipation rates (particularly relevant for turbulent
133 // flows)
134 KineticEnergyCalculatorDetailed<dim, Number> kinetic_energy_calculator;
135
136 // evaluate kinetic energy in spectral space (i.e., as a function of the wavenumber)
137 KineticEnergySpectrumCalculator<dim, Number> kinetic_energy_spectrum_calculator;
138
139 // evaluate quantities along lines through the domain
140 LinePlotCalculator<dim, Number> line_plot_calculator;
141};
142
143
144
145} // namespace IncNS
146} // namespace ExaDG
147
148#endif /* INCLUDE_EXADG_INCOMPRESSIBLE_NAVIER_STOKES_POSTPROCESSOR_POSTPROCESSOR_H_ */
Definition error_calculation.h:95
Definition divergence_and_mass_error.h:64
Definition kinetic_energy_dissipation_detailed.h:35
Definition line_plot_calculation.h:47
Definition output_generator.h:111
Definition pointwise_output_generator.h:47
Definition postprocessor_base.h:39
Definition postprocessor.h:62
Definition spatial_operator_base.h:68
Definition kinetic_energy_spectrum.h:113
Definition lift_and_drag_calculation.h:79
Definition pressure_difference_calculation.h:69
Definition solution_field.h:39
Definition time_control.h:64
Definition driver.cpp:33
Definition error_calculation.h:39
Definition line_plot_data.h:210
Definition divergence_and_mass_error.h:38
Definition output_generator.h:34
Definition pointwise_output_generator.h:35
Definition postprocessor.h:43
Definition kinetic_energy_calculation.h:37
Definition kinetic_energy_spectrum.h:40
Definition lift_and_drag_calculation.h:35
Definition pressure_difference_calculation.h:40