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 EXADG_INCOMPRESSIBLE_NAVIER_STOKES_POSTPROCESSOR_POSTPROCESSOR_H_
23#define EXADG_INCOMPRESSIBLE_NAVIER_STOKES_POSTPROCESSOR_POSTPROCESSOR_H_
24
25// ExaDG
26#include <exadg/incompressible_navier_stokes/postprocessor/divergence_and_mass_error.h>
27#include <exadg/incompressible_navier_stokes/postprocessor/kinetic_energy_dissipation_detailed.h>
28#include <exadg/incompressible_navier_stokes/postprocessor/line_plot_calculation.h>
29#include <exadg/incompressible_navier_stokes/postprocessor/output_generator.h>
30#include <exadg/incompressible_navier_stokes/postprocessor/pointwise_output_generator.h>
31#include <exadg/incompressible_navier_stokes/postprocessor/postprocessor_base.h>
32#include <exadg/incompressible_navier_stokes/spatial_discretization/spatial_operator_base.h>
33#include <exadg/postprocessor/error_calculation.h>
34#include <exadg/postprocessor/kinetic_energy_spectrum.h>
35#include <exadg/postprocessor/lift_and_drag_calculation.h>
36#include <exadg/postprocessor/pressure_difference_calculation.h>
37
38namespace ExaDG
39{
40namespace IncNS
41{
42template<int dim>
43struct PostProcessorData
44{
45 PostProcessorData()
46 {
47 }
48
49 OutputData output_data;
50 PointwiseOutputData<dim> pointwise_output_data;
51 ErrorCalculationData<dim> error_data_u;
52 ErrorCalculationData<dim> error_data_p;
53 LiftAndDragData lift_and_drag_data;
54 PressureDifferenceData<dim> pressure_difference_data;
55 MassConservationData mass_data;
56 KineticEnergyData kinetic_energy_data;
57 KineticEnergySpectrumData kinetic_energy_spectrum_data;
58 LinePlotData<dim> line_plot_data;
59};
60
61template<int dim, typename Number>
62class PostProcessor : public PostProcessorBase<dim, Number>
63{
64public:
66
67 typedef SpatialOperatorBase<dim, Number> NavierStokesOperator;
68
69 typedef typename Base::VectorType VectorType;
70
71 typedef typename Base::Operator Operator;
72
73 PostProcessor(PostProcessorData<dim> const & postprocessor_data, MPI_Comm const & mpi_comm);
74
75 virtual ~PostProcessor();
76
77 void
78 setup(Operator const & pde_operator) override;
79
80 void
81 do_postprocessing(VectorType const & velocity,
82 VectorType const & pressure,
83 double const time = 0.0,
84 types::time_step const time_step_number = numbers::steady_timestep) override;
85
86protected:
87 MPI_Comm const mpi_comm;
88
89private:
90 void
91 initialize_derived_fields();
92
93 void
94 invalidate_derived_fields();
95
97
98 dealii::ObserverPointer<NavierStokesOperator const> navier_stokes_operator;
99
100 // DoF vectors for derived quantities
105 SolutionField<dim, Number> velocity_magnitude;
106 SolutionField<dim, Number> vorticity_magnitude;
107 SolutionField<dim, Number> streamfunction;
108 SolutionField<dim, Number> q_criterion;
110
111 TimeControl time_control_mean_velocity;
112 SolutionField<dim, Number> mean_velocity; // velocity field averaged over time
113
114 // write output for visualization of results (e.g., using paraview)
115 OutputGenerator<dim, Number> output_generator;
116
117 // writes output at certain points in space
118 PointwiseOutputGenerator<dim, Number> pointwise_output_generator;
119
120 // calculate errors for verification purposes for problems with known analytical solution
121 ErrorCalculator<dim, Number> error_calculator_u;
122 ErrorCalculator<dim, Number> error_calculator_p;
123
124 // calculate lift and drag forces for flow around bodies
125 LiftAndDragCalculator<dim, Number> lift_and_drag_calculator;
126
127 // calculate pressure difference between two points, e.g., the leading and trailing edge of a body
128 PressureDifferenceCalculator<dim, Number> pressure_difference_calculator;
129
130 // calculate divergence and continuity errors as a measure of mass conservation (particularly
131 // relevant for turbulent flows)
132 DivergenceAndMassErrorCalculator<dim, Number> div_and_mass_error_calculator;
133
134 // calculate kinetic energy as well as dissipation rates (particularly relevant for turbulent
135 // flows)
136 KineticEnergyCalculatorDetailed<dim, Number> kinetic_energy_calculator;
137
138 // evaluate kinetic energy in spectral space (i.e., as a function of the wavenumber)
139 KineticEnergySpectrumCalculator<dim, Number> kinetic_energy_spectrum_calculator;
140
141 // evaluate quantities along lines through the domain
142 LinePlotCalculator<dim, Number> line_plot_calculator;
143};
144
145} // namespace IncNS
146} // namespace ExaDG
147
148#endif /* EXADG_INCOMPRESSIBLE_NAVIER_STOKES_POSTPROCESSOR_POSTPROCESSOR_H_ */
Definition error_calculation.h:98
Definition divergence_and_mass_error.h:64
Definition kinetic_energy_dissipation_detailed.h:36
Definition line_plot_calculation.h:47
Definition output_generator.h:113
Definition pointwise_output_generator.h:49
Definition postprocessor_base.h:40
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:40
Definition time_control.h:64
Definition driver.cpp:33
Definition error_calculation.h:39
Definition line_plot_data.h:211
Definition divergence_and_mass_error.h:38
Definition output_generator.h:35
Definition pointwise_output_generator.h:37
Definition postprocessor.h:44
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