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