[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 nstate, typename real>
13 class ReynoldsAveragedNavierStokesBase : public ModelBase <dim, 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,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 
62  std::array<real,nstate> convective_eigenvalues (
63  const std::array<real,nstate> &/*conservative_soln*/,
64  const dealii::Tensor<1,dim,real> &/*normal*/) const;
65 
67 
69  real max_convective_eigenvalue (const std::array<real,nstate> &soln) const;
70 
72 
75  const std::array<real,nstate> &soln,
76  const dealii::Tensor<1,dim,real> &normal) const;
77 
79  std::array<real,nstate> source_term (
80  const dealii::Point<dim,real> &pos,
81  const std::array<real,nstate> &conservative_solution,
82  const real current_time,
83  const dealii::types::global_dof_index cell_index) const;
84 
86  std::array<real,nstate> convective_dissipative_source_term (
87  const dealii::Point<dim,real> &pos,
88  const std::array<real,nstate> &conservative_solution,
89  const dealii::types::global_dof_index cell_index) const;
90 
92  std::array<real,nstate> physical_source_term (
93  const dealii::Point<dim,real> &pos,
94  const std::array<real,nstate> &conservative_solution,
95  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
96  const dealii::types::global_dof_index cell_index) const override;
97 
99  virtual dealii::Tensor<2,dim,real> compute_Reynolds_stress_tensor (
100  const std::array<real,nstate_navier_stokes> &primitive_soln_rans,
101  const std::array<dealii::Tensor<1,dim,real>,nstate_navier_stokes> &primitive_soln_gradient_rans,
102  const std::array<real,nstate_turbulence_model> &primitive_soln_turbulence_model) const = 0;
103 
105  virtual dealii::Tensor<1,dim,real> compute_Reynolds_heat_flux (
106  const std::array<real,nstate_navier_stokes> &primitive_soln_rans,
107  const std::array<dealii::Tensor<1,dim,real>,nstate_navier_stokes> &primitive_soln_gradient_rans,
108  const std::array<real,nstate_turbulence_model> &primitive_soln_turbulence_model) const = 0;
109 
111  virtual dealii::Tensor<2,dim,FadType> compute_Reynolds_stress_tensor_fad (
112  const std::array<FadType,nstate_navier_stokes> &primitive_soln_rans,
113  const std::array<dealii::Tensor<1,dim,FadType>,nstate_navier_stokes> &primitive_soln_gradient_rans,
114  const std::array<FadType,nstate_turbulence_model> &primitive_soln_turbulence_model) const = 0;
115 
117  virtual dealii::Tensor<1,dim,FadType> compute_Reynolds_heat_flux_fad (
118  const std::array<FadType,nstate_navier_stokes> &primitive_soln_rans,
119  const std::array<dealii::Tensor<1,dim,FadType>,nstate_navier_stokes> &primitive_soln_gradient_rans,
120  const std::array<FadType,nstate_turbulence_model> &primitive_soln_turbulence_model) const = 0;
121 
123  virtual std::array<real,nstate_turbulence_model> compute_effective_viscosity_turbulence_model (
124  const std::array<real,nstate_navier_stokes> &primitive_soln_rans,
125  const std::array<real,nstate_turbulence_model> &primitive_soln_turbulence_model) const = 0;
126 
128  virtual std::array<FadType,nstate_turbulence_model> compute_effective_viscosity_turbulence_model_fad (
129  const std::array<FadType,nstate_navier_stokes> &primitive_soln_rans,
130  const std::array<FadType,nstate_turbulence_model> &primitive_soln_turbulence_model) const = 0;
131 
133  virtual std::array<real,nstate> compute_production_dissipation_cross_term (
134  const dealii::Point<dim,real> &pos,
135  const std::array<real,nstate> &conservative_solution,
136  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient) const = 0;
137 
138 protected:
140  template<typename real2>
141  real2 get_vector_magnitude_sqr (const dealii::Tensor<1,3,real2> &vector) const;
142 
144  template<typename real2>
145  real2 get_tensor_magnitude_sqr (const dealii::Tensor<2,dim,real2> &tensor) const;
146 
148  template<typename real2>
149  std::array<dealii::Tensor<1,dim,real2>,nstate> dissipative_flux_templated (
150  const std::array<real2,nstate> &conservative_soln,
151  const std::array<dealii::Tensor<1,dim,real2>,nstate> &solution_gradient,
152  const dealii::types::global_dof_index cell_index) const;
153 
155  template<typename real2>
156  std::array<dealii::Tensor<1,dim,real2>,nstate> convective_flux_templated (
157  const std::array<real2,nstate> &conservative_soln) const;
158 
160  template <typename real2>
161  std::array<real2,dim+2> extract_rans_conservative_solution (
162  const std::array<real2,nstate> &conservative_soln) const;
163 
165  template <typename real2>
166  std::array<dealii::Tensor<1,dim,real2>,dim+2> extract_rans_solution_gradient (
167  const std::array<dealii::Tensor<1,dim,real2>,nstate> &solution_gradient) const;
168 
170  template <typename real2>
171  std::array<dealii::Tensor<1,dim,real2>,nstate-(dim+2)> dissipative_flux_turbulence_model (
172  const std::array<real2,nstate_navier_stokes> &primitive_soln_rans,
173  const std::array<real2,nstate_turbulence_model> &primitive_soln_turbulence_model,
174  const std::array<dealii::Tensor<1,dim,real2>,nstate_turbulence_model> &primitive_solution_gradient_turbulence_model) const;
175 
178  template <typename real2>
179  std::array<real2,nstate-(dim+2)> convert_conservative_to_primitive_turbulence_model (
180  const std::array<real2,nstate> &conservative_soln) const;
181 
184  template <typename real2>
185  std::array<dealii::Tensor<1,dim,real2>,nstate-(dim+2)> convert_conservative_gradient_to_primitive_gradient_turbulence_model (
186  const std::array<real2,nstate> &conservative_soln,
187  const std::array<dealii::Tensor<1,dim,real2>,nstate> &solution_gradient) const;
188 
190 
192  std::array<real,nstate-(dim+2)> compute_mean_turbulence_property (
193  const std::array<real,nstate> &conservative_soln1,
194  const std::array<real,nstate> &conservative_soln2) const;
195 
200  dealii::Tensor<2,nstate,real> convective_flux_directional_jacobian (
201  const std::array<real,nstate> &conservative_soln,
202  const dealii::Tensor<1,dim,real> &normal) const;
203 
208  dealii::Tensor<2,nstate,real> dissipative_flux_directional_jacobian (
209  const std::array<real,nstate> &conservative_soln,
210  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
211  const dealii::Tensor<1,dim,real> &normal,
212  const dealii::types::global_dof_index cell_index) const;
213 
219  const std::array<real,nstate> &conservative_soln,
220  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
221  const dealii::Tensor<1,dim,real> &normal,
222  const int d_gradient,
223  const dealii::types::global_dof_index cell_index) const;
224 
226  std::array<real,nstate> get_manufactured_solution_value (
227  const dealii::Point<dim,real> &pos) const;
228 
230  std::array<dealii::Tensor<1,dim,real>,nstate> get_manufactured_solution_gradient (
231  const dealii::Point<dim,real> &pos) const;
232 
238  const dealii::Point<dim,real> &pos) const;
239 
245  const dealii::Point<dim,real> &pos,
246  const dealii::types::global_dof_index cell_index) const;
247 
252  const dealii::Point<dim,real> &pos,
253  const dealii::types::global_dof_index cell_index) const;
254 
257  const dealii::Point<dim, real> &pos,
258  const dealii::Tensor<1,dim,real> &normal_int,
259  const std::array<real,nstate> &soln_int,
260  const std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_int,
261  std::array<real,nstate> &soln_bc,
262  std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_bc) const override;
263 };
264 
265 } // Physics namespace
266 } // PHiLiP namespace
267 
268 #endif
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...
std::shared_ptr< ManufacturedSolutionFunction< dim, real > > manufactured_solution_function
Manufactured solution function.
Definition: model.h:29
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.
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< 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< real2, nstate-(dim+2)> convert_conservative_to_primitive_turbulence_model(const std::array< real2, nstate > &conservative_soln) const
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
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.
Manufactured solution used for grid studies to check convergence orders.
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, 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< 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< 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< real, nstate > get_manufactured_solution_value(const dealii::Point< dim, real > &pos) const
Get manufactured solution value.
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
Files for the baseline physics.
Definition: ADTypes.hpp:10
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.
real max_convective_eigenvalue(const std::array< real, nstate > &soln) const
Maximum convective eigenvalue of the additional models&#39; PDEs.
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 ...
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) ...
Physics model additional terms and equations to the baseline physics.
Definition: model.h:18
Main parameter class that contains the various other sub-parameter classes.
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
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< 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.
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) ...
TwoPointNumericalFlux
Two point numerical flux type for split form.
std::array< dealii::Tensor< 1, dim, real2 >, nstate > convective_flux_templated(const std::array< real2, nstate > &conservative_soln) const
Templated additional convective flux.
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.
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)*.
std::unique_ptr< NavierStokes< dim, nstate_navier_stokes, real > > navier_stokes_physics
Pointer to Navier-Stokes physics object.
static const int nstate_navier_stokes
Number of PDEs for RANS equations.
Reynolds-Averaged Navier-Stokes (RANS) equations. Derived from Navier-Stokes for modifying the stress...
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.
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...
dealii::Tensor< 2, nstate, real > convective_flux_directional_jacobian(const std::array< real, nstate > &conservative_soln, const dealii::Tensor< 1, dim, real > &normal) const
const double turbulent_prandtl_number
Turbulent Prandtl number.
real2 get_vector_magnitude_sqr(const dealii::Tensor< 1, 3, real2 > &vector) const
Returns the square of the magnitude of the vector.
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)*.
std::array< real, nstate > convective_source_term_computed_from_manufactured_solution(const dealii::Point< dim, real > &pos) const
static const int nstate_turbulence_model
Number of PDEs for RANS turbulence model.
ThermalBoundaryCondition
Types of thermal boundary conditions available.
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
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...
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::array< dealii::Tensor< 1, dim, real >, nstate > get_manufactured_solution_gradient(const dealii::Point< dim, real > &pos) const
Get manufactured solution value.
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< 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.