[P]arallel [Hi]gh-order [Li]brary for [P]DEs  Latest
Parallel High-Order Library for PDEs through hp-adaptive Discontinuous Galerkin methods
reynolds_averaged_navier_stokes.h
1 #ifndef __REYNOLDS_AVERAGED_NAVIER_STOKES__
2 #define __REYNOLDS_AVERAGED_NAVIER_STOKES__
3 
4 #include "model.h"
5 #include "navier_stokes.h"
6 #include "euler.h"
7 
8 namespace PHiLiP {
9 namespace Physics {
10 
12 template <int dim, int nspecies, int nstate, typename real>
13 class ReynoldsAveragedNavierStokesBase : public ModelBase <dim, nspecies, nstate, real>
14 {
15 public:
20  const Parameters::AllParameters *const parameters_input,
21  const double ref_length,
22  const double gamma_gas,
23  const double mach_inf,
24  const double angle_of_attack,
25  const double side_slip_angle,
26  const double prandtl_number,
27  const double reynolds_number_inf,
28  const bool use_constant_viscosity,
29  const double constant_viscosity,
30  const double turbulent_prandtl_number,
31  const double temperature_inf = 273.15,
32  const double isothermal_wall_temperature = 1.0,
33  const thermal_boundary_condition_enum thermal_boundary_condition_type = thermal_boundary_condition_enum::adiabatic,
35  const two_point_num_flux_enum two_point_num_flux_type = two_point_num_flux_enum::KG);
36 
38  static const int nstate_navier_stokes = dim+2;
39 
41  static const int nstate_turbulence_model = nstate-(dim+2);
42 
45 
47  std::unique_ptr< NavierStokes<dim,nspecies,nstate_navier_stokes,real> > navier_stokes_physics;
48 
50  std::array<dealii::Tensor<1,dim,real>,nstate> convective_flux (
51  const std::array<real,nstate> &conservative_soln) const;
52 
54  std::array<dealii::Tensor<1,dim,real>,nstate> dissipative_flux (
55  const std::array<real,nstate> &conservative_soln,
56  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
57  const dealii::types::global_dof_index cell_index) const;
58 
60  std::array<real,nstate> dissipative_flux_dot_normal (
61  const std::array<real,nstate> &solution,
62  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
63  const std::array<real,nstate> &filtered_solution,
64  const std::array<dealii::Tensor<1,dim,real>,nstate> &filtered_solution_gradient,
65  const bool on_boundary,
66  const dealii::types::global_dof_index cell_index,
67  const dealii::Tensor<1,dim,real> &normal,
68  const int boundary_type) const override;
69 
71 
73  std::array<real,nstate> convective_eigenvalues (
74  const std::array<real,nstate> &/*conservative_soln*/,
75  const dealii::Tensor<1,dim,real> &/*normal*/) const;
76 
78 
80  real max_convective_eigenvalue (const std::array<real,nstate> &soln) const;
81 
83 
86  const std::array<real,nstate> &soln,
87  const dealii::Tensor<1,dim,real> &normal) const;
88 
90  std::array<real,nstate> source_term (
91  const dealii::Point<dim,real> &pos,
92  const std::array<real,nstate> &conservative_solution,
93  const real current_time,
94  const dealii::types::global_dof_index cell_index) const;
95 
97  std::array<real,nstate> convective_dissipative_source_term (
98  const dealii::Point<dim,real> &pos,
99  const std::array<real,nstate> &conservative_solution,
100  const dealii::types::global_dof_index cell_index) const;
101 
103  std::array<real,nstate> physical_source_term (
104  const dealii::Point<dim,real> &pos,
105  const std::array<real,nstate> &conservative_solution,
106  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
107  const dealii::types::global_dof_index cell_index) const override;
108 
110  virtual dealii::Tensor<2,dim,real> compute_Reynolds_stress_tensor (
111  const std::array<real,nstate_navier_stokes> &primitive_soln_rans,
112  const std::array<dealii::Tensor<1,dim,real>,nstate_navier_stokes> &primitive_soln_gradient_rans,
113  const std::array<real,nstate_turbulence_model> &primitive_soln_turbulence_model) const = 0;
114 
116  virtual dealii::Tensor<1,dim,real> compute_Reynolds_heat_flux (
117  const std::array<real,nstate_navier_stokes> &primitive_soln_rans,
118  const std::array<dealii::Tensor<1,dim,real>,nstate_navier_stokes> &primitive_soln_gradient_rans,
119  const std::array<real,nstate_turbulence_model> &primitive_soln_turbulence_model) const = 0;
120 
122  virtual dealii::Tensor<2,dim,FadType> compute_Reynolds_stress_tensor_fad (
123  const std::array<FadType,nstate_navier_stokes> &primitive_soln_rans,
124  const std::array<dealii::Tensor<1,dim,FadType>,nstate_navier_stokes> &primitive_soln_gradient_rans,
125  const std::array<FadType,nstate_turbulence_model> &primitive_soln_turbulence_model) const = 0;
126 
128  virtual dealii::Tensor<1,dim,FadType> compute_Reynolds_heat_flux_fad (
129  const std::array<FadType,nstate_navier_stokes> &primitive_soln_rans,
130  const std::array<dealii::Tensor<1,dim,FadType>,nstate_navier_stokes> &primitive_soln_gradient_rans,
131  const std::array<FadType,nstate_turbulence_model> &primitive_soln_turbulence_model) const = 0;
132 
134  virtual std::array<real,nstate_turbulence_model> compute_effective_viscosity_turbulence_model (
135  const std::array<real,nstate_navier_stokes> &primitive_soln_rans,
136  const std::array<real,nstate_turbulence_model> &primitive_soln_turbulence_model) const = 0;
137 
139  virtual std::array<FadType,nstate_turbulence_model> compute_effective_viscosity_turbulence_model_fad (
140  const std::array<FadType,nstate_navier_stokes> &primitive_soln_rans,
141  const std::array<FadType,nstate_turbulence_model> &primitive_soln_turbulence_model) const = 0;
142 
144  virtual std::array<real,nstate> compute_production_dissipation_cross_term (
145  const dealii::Point<dim,real> &pos,
146  const std::array<real,nstate> &conservative_solution,
147  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient) const = 0;
148 
149 protected:
151  template<typename real2>
152  real2 get_vector_magnitude_sqr (const dealii::Tensor<1,3,real2> &vector) const;
153 
155  template<typename real2>
156  real2 get_tensor_magnitude_sqr (const dealii::Tensor<2,dim,real2> &tensor) const;
157 
159  template<typename real2>
160  std::array<dealii::Tensor<1,dim,real2>,nstate> dissipative_flux_templated (
161  const std::array<real2,nstate> &conservative_soln,
162  const std::array<dealii::Tensor<1,dim,real2>,nstate> &solution_gradient,
163  const dealii::types::global_dof_index cell_index) const;
164 
166  template<typename real2>
167  std::array<dealii::Tensor<1,dim,real2>,nstate> convective_flux_templated (
168  const std::array<real2,nstate> &conservative_soln) const;
169 
171  template <typename real2>
172  std::array<real2,dim+2> extract_rans_conservative_solution (
173  const std::array<real2,nstate> &conservative_soln) const;
174 
176  template <typename real2>
177  std::array<dealii::Tensor<1,dim,real2>,dim+2> extract_rans_solution_gradient (
178  const std::array<dealii::Tensor<1,dim,real2>,nstate> &solution_gradient) const;
179 
181  template <typename real2>
182  std::array<dealii::Tensor<1,dim,real2>,nstate-(dim+2)> dissipative_flux_turbulence_model (
183  const std::array<real2,nstate_navier_stokes> &primitive_soln_rans,
184  const std::array<real2,nstate_turbulence_model> &primitive_soln_turbulence_model,
185  const std::array<dealii::Tensor<1,dim,real2>,nstate_turbulence_model> &primitive_solution_gradient_turbulence_model) const;
186 
189  template <typename real2>
190  std::array<real2,nstate-(dim+2)> convert_conservative_to_primitive_turbulence_model (
191  const std::array<real2,nstate> &conservative_soln) const;
192 
195  template <typename real2>
196  std::array<dealii::Tensor<1,dim,real2>,nstate-(dim+2)> convert_conservative_gradient_to_primitive_gradient_turbulence_model (
197  const std::array<real2,nstate> &conservative_soln,
198  const std::array<dealii::Tensor<1,dim,real2>,nstate> &solution_gradient) const;
199 
201 
203  std::array<real,nstate-(dim+2)> compute_mean_turbulence_property (
204  const std::array<real,nstate> &conservative_soln1,
205  const std::array<real,nstate> &conservative_soln2) const;
206 
211  dealii::Tensor<2,nstate,real> convective_flux_directional_jacobian (
212  const std::array<real,nstate> &conservative_soln,
213  const dealii::Tensor<1,dim,real> &normal) const;
214 
219  dealii::Tensor<2,nstate,real> dissipative_flux_directional_jacobian (
220  const std::array<real,nstate> &conservative_soln,
221  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
222  const dealii::Tensor<1,dim,real> &normal,
223  const dealii::types::global_dof_index cell_index) const;
224 
230  const std::array<real,nstate> &conservative_soln,
231  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
232  const dealii::Tensor<1,dim,real> &normal,
233  const int d_gradient,
234  const dealii::types::global_dof_index cell_index) const;
235 
237  std::array<real,nstate> get_manufactured_solution_value (
238  const dealii::Point<dim,real> &pos) const;
239 
241  std::array<dealii::Tensor<1,dim,real>,nstate> get_manufactured_solution_gradient (
242  const dealii::Point<dim,real> &pos) const;
243 
249  const dealii::Point<dim,real> &pos) const;
250 
256  const dealii::Point<dim,real> &pos,
257  const dealii::types::global_dof_index cell_index) const;
258 
263  const dealii::Point<dim,real> &pos,
264  const dealii::types::global_dof_index cell_index) const;
265 
268  const dealii::Point<dim, real> &pos,
269  const dealii::Tensor<1,dim,real> &normal_int,
270  const std::array<real,nstate> &soln_int,
271  const std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_int,
272  std::array<real,nstate> &soln_bc,
273  std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_bc) const override;
274 };
275 
276 } // Physics namespace
277 } // PHiLiP namespace
278 
279 #endif
std::array< real, nstate > convective_eigenvalues(const std::array< real, nstate > &, const dealii::Tensor< 1, dim, real > &) const
Convective eigenvalues of the additional models&#39; PDEs.
virtual dealii::Tensor< 2, dim, real > compute_Reynolds_stress_tensor(const std::array< real, nstate_navier_stokes > &primitive_soln_rans, const std::array< dealii::Tensor< 1, dim, real >, nstate_navier_stokes > &primitive_soln_gradient_rans, const std::array< real, nstate_turbulence_model > &primitive_soln_turbulence_model) const =0
Nondimensionalized Reynolds stress tensor, (tau^reynolds)*.
virtual dealii::Tensor< 2, dim, FadType > compute_Reynolds_stress_tensor_fad(const std::array< FadType, nstate_navier_stokes > &primitive_soln_rans, const std::array< dealii::Tensor< 1, dim, FadType >, nstate_navier_stokes > &primitive_soln_gradient_rans, const std::array< FadType, nstate_turbulence_model > &primitive_soln_turbulence_model) const =0
Nondimensionalized Reynolds stress tensor, (tau^reynolds)* (Automatic Differentiation Type: FadType) ...
std::array< real, nstate > source_term(const dealii::Point< dim, real > &pos, const std::array< real, nstate > &conservative_solution, const real current_time, const dealii::types::global_dof_index cell_index) const
Source term for manufactured solution functions.
std::array< dealii::Tensor< 1, dim, real >, nstate > convective_flux(const std::array< real, nstate > &conservative_soln) const
Additional convective flux of RANS + convective flux of turbulence model.
const double turbulent_prandtl_number
Turbulent Prandtl number.
std::array< real, nstate > physical_source_term(const dealii::Point< dim, real > &pos, const std::array< real, nstate > &conservative_solution, const std::array< dealii::Tensor< 1, dim, real >, nstate > &solution_gradient, const dealii::types::global_dof_index cell_index) const override
Physical source term.
std::array< real, nstate > convective_dissipative_source_term(const dealii::Point< dim, real > &pos, const std::array< real, nstate > &conservative_solution, const dealii::types::global_dof_index cell_index) const
Convective and dissipative source term for manufactured solution functions.
real2 get_tensor_magnitude_sqr(const dealii::Tensor< 2, dim, real2 > &tensor) const
Returns the square of the magnitude of the tensor (i.e. the double dot product of a tensor with itsel...
Manufactured solution used for grid studies to check convergence orders.
virtual std::array< real, nstate > compute_production_dissipation_cross_term(const dealii::Point< dim, real > &pos, const std::array< real, nstate > &conservative_solution, const std::array< dealii::Tensor< 1, dim, real >, nstate > &solution_gradient) const =0
Physical source term (production, dissipation source terms and source term with cross derivatives) in...
dealii::Tensor< 2, nstate, real > convective_flux_directional_jacobian(const std::array< real, nstate > &conservative_soln, const dealii::Tensor< 1, dim, real > &normal) const
ReynoldsAveragedNavierStokesBase(const Parameters::AllParameters *const parameters_input, const double ref_length, const double gamma_gas, const double mach_inf, const double angle_of_attack, const double side_slip_angle, const double prandtl_number, const double reynolds_number_inf, const bool use_constant_viscosity, const double constant_viscosity, const double turbulent_prandtl_number, const double temperature_inf=273.15, const double isothermal_wall_temperature=1.0, const thermal_boundary_condition_enum thermal_boundary_condition_type=thermal_boundary_condition_enum::adiabatic, std::shared_ptr< ManufacturedSolutionFunction< dim, nspecies, real > > manufactured_solution_function=nullptr, const two_point_num_flux_enum two_point_num_flux_type=two_point_num_flux_enum::KG)
Constructor.
std::array< real, nstate > physical_source_term_computed_from_manufactured_solution(const dealii::Point< dim, real > &pos, const dealii::types::global_dof_index cell_index) const
static const int nstate_turbulence_model
Number of PDEs for RANS turbulence model.
Files for the baseline physics.
Definition: ADTypes.hpp:10
std::unique_ptr< NavierStokes< dim, nspecies, nstate_navier_stokes, real > > navier_stokes_physics
Pointer to Navier-Stokes physics object.
dealii::Tensor< 2, nstate, real > dissipative_flux_directional_jacobian_wrt_gradient_component(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &solution_gradient, const dealii::Tensor< 1, dim, real > &normal, const int d_gradient, const dealii::types::global_dof_index cell_index) const
Physics model additional terms and equations to the baseline physics.
Definition: model.h:18
std::array< dealii::Tensor< 1, dim, real2 >, nstate > convective_flux_templated(const std::array< real2, nstate > &conservative_soln) const
Templated additional convective flux.
virtual std::array< real, nstate_turbulence_model > compute_effective_viscosity_turbulence_model(const std::array< real, nstate_navier_stokes > &primitive_soln_rans, const std::array< real, nstate_turbulence_model > &primitive_soln_turbulence_model) const =0
Nondimensionalized effective (total) viscosities for the turbulence model.
Main parameter class that contains the various other sub-parameter classes.
std::array< dealii::Tensor< 1, dim, real >, nstate > get_manufactured_solution_gradient(const dealii::Point< dim, real > &pos) const
Get manufactured solution value.
real2 get_vector_magnitude_sqr(const dealii::Tensor< 1, 3, real2 > &vector) const
Returns the square of the magnitude of the vector.
TwoPointNumericalFlux
Two point numerical flux type for split form.
std::array< real, nstate > dissipative_flux_dot_normal(const std::array< real, nstate > &solution, const std::array< dealii::Tensor< 1, dim, real >, nstate > &solution_gradient, const std::array< real, nstate > &filtered_solution, const std::array< dealii::Tensor< 1, dim, real >, nstate > &filtered_solution_gradient, const bool on_boundary, const dealii::types::global_dof_index cell_index, const dealii::Tensor< 1, dim, real > &normal, const int boundary_type) const override
Additional viscous flux of RANS + viscous flux of turbulence model dot normal.
virtual dealii::Tensor< 1, dim, real > compute_Reynolds_heat_flux(const std::array< real, nstate_navier_stokes > &primitive_soln_rans, const std::array< dealii::Tensor< 1, dim, real >, nstate_navier_stokes > &primitive_soln_gradient_rans, const std::array< real, nstate_turbulence_model > &primitive_soln_turbulence_model) const =0
Nondimensionalized Reynolds heat flux, (q^reynolds)*.
void boundary_manufactured_solution(const dealii::Point< dim, real > &pos, const dealii::Tensor< 1, dim, real > &normal_int, const std::array< real, nstate > &soln_int, const std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_int, std::array< real, nstate > &soln_bc, std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_bc) const override
Evaluate the manufactured solution boundary conditions.
std::array< dealii::Tensor< 1, dim, real2 >, nstate-(dim+2)> convert_conservative_gradient_to_primitive_gradient_turbulence_model(const std::array< real2, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &solution_gradient) const
Reynolds-Averaged Navier-Stokes (RANS) equations. Derived from Navier-Stokes for modifying the stress...
static const int nstate_navier_stokes
Number of PDEs for RANS equations.
std::array< real, nstate > convective_source_term_computed_from_manufactured_solution(const dealii::Point< dim, real > &pos) const
real max_convective_normal_eigenvalue(const std::array< real, nstate > &soln, const dealii::Tensor< 1, dim, real > &normal) const
Maximum convective normal eigenvalue (used in Lax-Friedrichs) of the additional models&#39; PDEs...
std::array< dealii::Tensor< 1, dim, real2 >, nstate-(dim+2)> dissipative_flux_turbulence_model(const std::array< real2, nstate_navier_stokes > &primitive_soln_rans, const std::array< real2, nstate_turbulence_model > &primitive_soln_turbulence_model, const std::array< dealii::Tensor< 1, dim, real2 >, nstate_turbulence_model > &primitive_solution_gradient_turbulence_model) const
Templated Additional viscous flux of RANS + viscous flux of turbulence model.
std::array< real2, nstate-(dim+2)> convert_conservative_to_primitive_turbulence_model(const std::array< real2, nstate > &conservative_soln) const
virtual dealii::Tensor< 1, dim, FadType > compute_Reynolds_heat_flux_fad(const std::array< FadType, nstate_navier_stokes > &primitive_soln_rans, const std::array< dealii::Tensor< 1, dim, FadType >, nstate_navier_stokes > &primitive_soln_gradient_rans, const std::array< FadType, nstate_turbulence_model > &primitive_soln_turbulence_model) const =0
Nondimensionalized Reynolds heat flux, (q^reynolds)* (Automatic Differentiation Type: FadType) ...
std::array< real, nstate > get_manufactured_solution_value(const dealii::Point< dim, real > &pos) const
Get manufactured solution value.
std::array< dealii::Tensor< 1, dim, real2 >, nstate > dissipative_flux_templated(const std::array< real2, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &solution_gradient, const dealii::types::global_dof_index cell_index) const
Templated additional dissipative (i.e. viscous) flux.
real max_convective_eigenvalue(const std::array< real, nstate > &soln) const
Maximum convective eigenvalue of the additional models&#39; PDEs.
std::array< dealii::Tensor< 1, dim, real >, nstate > dissipative_flux(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &solution_gradient, const dealii::types::global_dof_index cell_index) const
Additional viscous flux of RANS + viscous flux of turbulence model.
virtual std::array< FadType, nstate_turbulence_model > compute_effective_viscosity_turbulence_model_fad(const std::array< FadType, nstate_navier_stokes > &primitive_soln_rans, const std::array< FadType, nstate_turbulence_model > &primitive_soln_turbulence_model) const =0
Nondimensionalized effective (total) viscosities for the turbulence model (Automatic Differentiation ...
ThermalBoundaryCondition
Types of thermal boundary conditions available.
dealii::Tensor< 2, nstate, real > dissipative_flux_directional_jacobian(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &solution_gradient, const dealii::Tensor< 1, dim, real > &normal, const dealii::types::global_dof_index cell_index) const
std::array< dealii::Tensor< 1, dim, real2 >, dim+2 > extract_rans_solution_gradient(const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &solution_gradient) const
Returns the conservative solutions gradient of Reynolds-averaged Navier-Stokes equations (without add...
std::array< real, nstate > dissipative_source_term_computed_from_manufactured_solution(const dealii::Point< dim, real > &pos, const dealii::types::global_dof_index cell_index) const
std::array< real2, dim+2 > extract_rans_conservative_solution(const std::array< real2, nstate > &conservative_soln) const
Returns the conservative solutions of Reynolds-averaged Navier-Stokes equations (without additional R...
std::shared_ptr< ManufacturedSolutionFunction< dim, nspecies, real > > manufactured_solution_function
Manufactured solution function.
Definition: model.h:29
std::array< real, nstate-(dim+2)> compute_mean_turbulence_property(const std::array< real, nstate > &conservative_soln1, const std::array< real, nstate > &conservative_soln2) const
Mean turbulence properties given two sets of conservative solutions.