1 #ifndef __REYNOLDS_AVERAGED_NAVIER_STOKES__ 2 #define __REYNOLDS_AVERAGED_NAVIER_STOKES__ 5 #include "navier_stokes.h" 12 template <
int dim,
int nspecies,
int nstate,
typename real>
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,
31 const double temperature_inf = 273.15,
32 const double isothermal_wall_temperature = 1.0,
51 const std::array<real,nstate> &conservative_soln)
const;
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;
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;
74 const std::array<real,nstate> &,
75 const dealii::Tensor<1,dim,real> &)
const;
86 const std::array<real,nstate> &soln,
87 const dealii::Tensor<1,dim,real> &normal)
const;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
151 template<
typename real2>
155 template<
typename real2>
159 template<
typename real2>
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;
166 template<
typename real2>
168 const std::array<real2,nstate> &conservative_soln)
const;
171 template <
typename real2>
173 const std::array<real2,nstate> &conservative_soln)
const;
176 template <
typename real2>
178 const std::array<dealii::Tensor<1,dim,real2>,nstate> &solution_gradient)
const;
181 template <
typename real2>
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;
189 template <
typename real2>
191 const std::array<real2,nstate> &conservative_soln)
const;
195 template <
typename real2>
197 const std::array<real2,nstate> &conservative_soln,
198 const std::array<dealii::Tensor<1,dim,real2>,nstate> &solution_gradient)
const;
204 const std::array<real,nstate> &conservative_soln1,
205 const std::array<real,nstate> &conservative_soln2)
const;
212 const std::array<real,nstate> &conservative_soln,
213 const dealii::Tensor<1,dim,real> &normal)
const;
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;
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;
238 const dealii::Point<dim,real> &pos)
const;
242 const dealii::Point<dim,real> &pos)
const;
249 const dealii::Point<dim,real> &pos)
const;
256 const dealii::Point<dim,real> &pos,
257 const dealii::types::global_dof_index cell_index)
const;
263 const dealii::Point<dim,real> &pos,
264 const dealii::types::global_dof_index cell_index)
const;
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;
std::array< real, nstate > convective_eigenvalues(const std::array< real, nstate > &, const dealii::Tensor< 1, dim, real > &) const
Convective eigenvalues of the additional models' 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.
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.
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' 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' 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.
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.