ExaDG
Toggle main menu visibility
Loading...
Searching...
No Matches
include
exadg
incompressible_navier_stokes
postprocessor
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
39
namespace
ExaDG
40
{
41
namespace
IncNS
42
{
43
template
<
int
dim>
44
struct
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
63
template
<
int
dim,
typename
Number>
64
class
PostProcessor :
public
PostProcessorBase
<dim, Number>
65
{
66
public
:
67
typedef
PostProcessorBase<dim, Number>
Base;
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
89
protected
:
90
MPI_Comm
const
mpi_comm;
91
92
private
:
93
void
94
initialize_derived_fields();
95
96
void
97
invalidate_derived_fields();
98
99
PostProcessorData<dim>
pp_data;
100
101
dealii::ObserverPointer<NavierStokesOperator const> navier_stokes_operator;
102
103
// Fields for derived quantities
104
SolutionField<dim, Number>
vorticity;
105
SolutionField<dim, Number>
divergence;
106
SolutionField<dim, Number>
shear_rate;
107
SolutionField<dim, Number>
viscosity;
108
SolutionField<dim, Number>
velocity_magnitude;
109
SolutionField<dim, Number>
vorticity_magnitude;
110
SolutionField<dim, Number>
streamfunction;
111
SolutionField<dim, Number>
q_criterion;
112
SolutionField<dim, Number>
cfl_vector;
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_ */
ExaDG::ErrorCalculator
Definition
error_calculation.h:103
ExaDG::IncNS::DivergenceAndMassErrorCalculator
Definition
divergence_and_mass_error.h:64
ExaDG::IncNS::KineticEnergyCalculatorDetailed
Definition
kinetic_energy_dissipation_detailed.h:36
ExaDG::IncNS::LinePlotCalculator
Definition
line_plot_calculation.h:47
ExaDG::IncNS::OutputGenerator
Definition
output_generator.h:114
ExaDG::IncNS::PointwiseOutputGenerator
Definition
pointwise_output_generator.h:49
ExaDG::IncNS::PostProcessorBase
Definition
postprocessor_base.h:40
ExaDG::IncNS::SpatialOperatorBase
Definition
spatial_operator_base.h:68
ExaDG::KineticEnergySpectrumCalculator
Definition
kinetic_energy_spectrum.h:113
ExaDG::LiftAndDragCalculator
Definition
lift_and_drag_calculation.h:79
ExaDG::ParticleCalculator
Definition
particle_calculation.h:70
ExaDG::PressureDifferenceCalculator
Definition
pressure_difference_calculation.h:69
ExaDG::SolutionField
Definition
solution_field.h:40
ExaDG::TimeControl
Definition
time_control.h:64
ExaDG
Definition
driver.cpp:33
ExaDG::ErrorCalculationData
Definition
error_calculation.h:39
ExaDG::IncNS::LinePlotData
Definition
line_plot_data.h:211
ExaDG::IncNS::MassConservationData
Definition
divergence_and_mass_error.h:38
ExaDG::IncNS::OutputData
Definition
output_generator.h:35
ExaDG::IncNS::PointwiseOutputData
Definition
pointwise_output_generator.h:37
ExaDG::IncNS::PostProcessorData
Definition
postprocessor.h:45
ExaDG::KineticEnergyData
Definition
kinetic_energy_calculation.h:37
ExaDG::KineticEnergySpectrumData
Definition
kinetic_energy_spectrum.h:40
ExaDG::LiftAndDragData
Definition
lift_and_drag_calculation.h:35
ExaDG::ParticleData
Definition
particle_calculation.h:37
ExaDG::PressureDifferenceData
Definition
pressure_difference_calculation.h:40
Generated by
1.17.0