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 // custom destructor computing convergence tables if desired
76 virtual ~PostProcessor();
77
78 void
79 setup(Operator const & pde_operator) override;
80
81 void
82 do_postprocessing(VectorType const & velocity,
83 VectorType const & pressure,
84 double const time = 0.0,
85 types::time_step const time_step_number = numbers::steady_timestep) override;
86
87protected:
88 MPI_Comm const mpi_comm;
89
90private:
91 void
92 initialize_derived_fields();
93
94 void
95 invalidate_derived_fields();
96
98
99 dealii::ObserverPointer<NavierStokesOperator const> navier_stokes_operator;
100
101 // Fields for derived quantities
106 SolutionField<dim, Number> velocity_magnitude;
107 SolutionField<dim, Number> vorticity_magnitude;
108 SolutionField<dim, Number> streamfunction;
109 SolutionField<dim, Number> q_criterion;
111
112 TimeControl time_control_mean_velocity;
113 SolutionField<dim, Number> mean_velocity; // velocity field averaged over time
114
115 // write output for visualization of results (e.g., using paraview)
116 OutputGenerator<dim, Number> output_generator;
117
118 // writes output at certain points in space
119 PointwiseOutputGenerator<dim, Number> pointwise_output_generator;
120
121 // calculate errors for verification purposes for problems with known analytical solution
122 ErrorCalculator<dim, Number> error_calculator_u;
123 ErrorCalculator<dim, Number> error_calculator_p;
124
125 // calculate lift and drag forces for flow around bodies
126 LiftAndDragCalculator<dim, Number> lift_and_drag_calculator;
127
128 // calculate pressure difference between two points, e.g., the leading and trailing edge of a body
129 PressureDifferenceCalculator<dim, Number> pressure_difference_calculator;
130
131 // calculate divergence and continuity errors as a measure of mass conservation (particularly
132 // relevant for turbulent flows)
133 DivergenceAndMassErrorCalculator<dim, Number> div_and_mass_error_calculator;
134
135 // calculate kinetic energy as well as dissipation rates (particularly relevant for turbulent
136 // flows)
137 KineticEnergyCalculatorDetailed<dim, Number> kinetic_energy_calculator;
138
139 // evaluate kinetic energy in spectral space (i.e., as a function of the wavenumber)
140 KineticEnergySpectrumCalculator<dim, Number> kinetic_energy_spectrum_calculator;
141
142 // evaluate quantities along lines through the domain
143 LinePlotCalculator<dim, Number> line_plot_calculator;
144};
145
146} // namespace IncNS
147} // namespace ExaDG
148
149#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 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