[P]arallel [Hi]gh-order [Li]brary for [P]DEs  Latest
Parallel High-Order Library for PDEs through hp-adaptive Discontinuous Galerkin methods
negative_spalart_allmaras_rans_model.h
1 #ifndef __NEGATIVE_SPALART_ALLMARAS_RANS_MODEL__
2 #define __NEGATIVE_SPALART_ALLMARAS_RANS_MODEL__
3 
4 #include "euler.h"
5 #include "navier_stokes.h"
6 #include "model.h"
7 #include "reynolds_averaged_navier_stokes.h"
8 
9 namespace PHiLiP {
10 namespace Physics {
11 
13 template <int dim, int nstate, typename real>
15 {
16 public:
23  const Parameters::AllParameters *const parameters_input,
24  const double ref_length,
25  const double gamma_gas,
26  const double mach_inf,
27  const double angle_of_attack,
28  const double side_slip_angle,
29  const double prandtl_number,
30  const double reynolds_number_inf,
31  const bool use_constant_viscosity,
32  const double constant_viscosity,
33  const double turbulent_prandtl_number,
34  const double temperature_inf = 273.15,
35  const double isothermal_wall_temperature = 1.0,
36  const thermal_boundary_condition_enum thermal_boundary_condition_type = thermal_boundary_condition_enum::adiabatic,
38  const two_point_num_flux_enum two_point_num_flux_type = two_point_num_flux_enum::KG);
39 
41  static const int nstate_navier_stokes = dim+2;
42 
44  static const int nstate_turbulence_model = nstate-(dim+2);
45 
47  dealii::Tensor<2,dim,real> compute_Reynolds_stress_tensor (
48  const std::array<real,nstate_navier_stokes> &primitive_soln_rans,
49  const std::array<dealii::Tensor<1,dim,real>,nstate_navier_stokes> &primitive_soln_gradient_rans,
50  const std::array<real,nstate_turbulence_model> &primitive_soln_turbulence_model) const;
51 
53  dealii::Tensor<1,dim,real> compute_Reynolds_heat_flux (
54  const std::array<real,nstate_navier_stokes> &primitive_soln_rans,
55  const std::array<dealii::Tensor<1,dim,real>,nstate_navier_stokes> &primitive_soln_gradient_rans,
56  const std::array<real,nstate_turbulence_model> &primitive_soln_turbulence_model) const;
57 
59  dealii::Tensor<2,dim,FadType> compute_Reynolds_stress_tensor_fad (
60  const std::array<FadType,nstate_navier_stokes> &primitive_soln_rans,
61  const std::array<dealii::Tensor<1,dim,FadType>,nstate_navier_stokes> &primitive_soln_gradient_rans,
62  const std::array<FadType,nstate_turbulence_model> &primitive_soln_turbulence_model) const;
63 
65  dealii::Tensor<1,dim,FadType> compute_Reynolds_heat_flux_fad (
66  const std::array<FadType,nstate_navier_stokes> &primitive_soln_rans,
67  const std::array<dealii::Tensor<1,dim,FadType>,nstate_navier_stokes> &primitive_soln_gradient_rans,
68  const std::array<FadType,nstate_turbulence_model> &primitive_soln_turbulence_model) const;
69 
72  const std::array<real,nstate_navier_stokes> &primitive_soln_rans,
73  const std::array<real,nstate_turbulence_model> &primitive_soln_turbulence_model) const;
74 
77  const std::array<FadType,nstate_navier_stokes> &primitive_soln_rans,
78  const std::array<FadType,nstate_turbulence_model> &primitive_soln_turbulence_model) const;
79 
81  std::array<real,nstate-(dim+2)> compute_effective_viscosity_turbulence_model (
82  const std::array<real,nstate_navier_stokes> &primitive_soln_rans,
83  const std::array<real,nstate_turbulence_model> &primitive_soln_turbulence_model) const;
84 
87  const std::array<FadType,nstate_navier_stokes> &primitive_soln_rans,
88  const std::array<FadType,nstate_turbulence_model> &primitive_soln_turbulence_model) const;
89 
91  std::array<real,nstate> compute_production_dissipation_cross_term (
92  const dealii::Point<dim,real> &pos,
93  const std::array<real,nstate> &conservative_solution,
94  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient) const;
95 
97  dealii::Vector<double> post_compute_derived_quantities_vector (
98  const dealii::Vector<double> &uh,
99  const std::vector<dealii::Tensor<1,dim> > &/*duh*/,
100  const std::vector<dealii::Tensor<2,dim> > &/*dduh*/,
101  const dealii::Tensor<1,dim> &/*normals*/,
102  const dealii::Point<dim> &/*evaluation_points*/) const override;
103 
105  std::vector<dealii::DataComponentInterpretation::DataComponentInterpretation> post_get_data_component_interpretation () const override;
106 
108  std::vector<std::string> post_get_names () const override;
109 
110 protected:
112  template<typename real2> dealii::Tensor<2,dim,real2> compute_Reynolds_stress_tensor_templated (
113  const std::array<real2,nstate_navier_stokes> &primitive_soln_rans,
114  const std::array<dealii::Tensor<1,dim,real2>,nstate_navier_stokes> &primitive_soln_gradient_rans,
115  const std::array<real2,nstate_turbulence_model> &primitive_soln_turbulence_model) const;
116 
118  template<typename real2> dealii::Tensor<1,dim,real2> compute_Reynolds_heat_flux_templated (
119  const std::array<real2,nstate_navier_stokes> &primitive_soln_rans,
120  const std::array<dealii::Tensor<1,dim,real2>,nstate_navier_stokes> &primitive_soln_gradient_rans,
121  const std::array<real2,nstate_turbulence_model> &primitive_soln_turbulence_model) const;
122 
124  template<typename real2> real2 scale_coefficient(
125  const real2 coefficient) const;
126 
128 
131  void boundary_wall (
132  std::array<real,nstate> &soln_bc,
133  std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_bc) const override;
134 
136  void boundary_outflow (
137  const std::array<real,nstate> &soln_int,
138  const std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_int,
139  std::array<real,nstate> &soln_bc,
140  std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_bc) const override;
141 
143 
146  void boundary_inflow (
147  const std::array<real,nstate> &soln_int,
148  const std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_int,
149  std::array<real,nstate> &soln_bc,
150  std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_bc) const override;
151 
153 
156  void boundary_farfield (
157  std::array<real,nstate> &soln_bc) const override;
158 
159 private:
161 
164  template<typename real2> real2 compute_eddy_viscosity_templated(
165  const std::array<real2,nstate_navier_stokes> &primitive_soln_rans,
166  const std::array<real2,nstate_turbulence_model> &primitive_soln_turbulence_model) const;
167 
169 
172  template<typename real2> std::array<real2,nstate-(dim+2)> compute_effective_viscosity_turbulence_model_templated (
173  const std::array<real2,nstate_navier_stokes> &primitive_soln_rans,
174  const std::array<real2,nstate_turbulence_model> &primitive_soln_turbulence_model) const;
175 
177 
180  template<typename real2> real2 compute_coefficient_Chi (
181  const real2 nu_tilde,
182  const real2 laminar_kinematic_viscosity) const;
183 
185 
188  template<typename real2> real2 compute_coefficient_f_v1 (
189  const real2 coefficient_Chi) const;
190 
192 
196  const real coefficient_Chi) const;
197 
199 
202  template<typename real2> real2 compute_coefficient_f_n (
203  const real2 nu_tilde,
204  const real2 laminar_kinematic_viscosity) const;
205 
207 
211  const real coefficient_Chi) const;
212 
214 
218  const real coefficient_g) const;
219 
221 
224  real compute_coefficient_r (
225  const real nu_tilde,
226  const real d_wall,
227  const real s_tilde) const;
228 
230 
233  real compute_coefficient_g (
234  const real coefficient_r) const;
235 
237  real compute_s (
238  const std::array<real,nstate_navier_stokes> &conservative_soln_rans,
239  const std::array<dealii::Tensor<1,dim,real>,nstate_navier_stokes> &conservative_soln_gradient_rans) const;
240 
242 
245  real compute_s_bar (
246  const real coefficient_Chi,
247  const real nu_tilde,
248  const real d_wall) const;
249 
251 
254  real compute_s_tilde (
255  const real coefficient_Chi,
256  const real nu_tilde,
257  const real d_wall,
258  const real s) const;
259 
261 
265  std::array<real,nstate> compute_production_source (
266  const real coefficient_f_t2,
267  const real density,
268  const real nu_tilde,
269  const real s,
270  const real s_tilde) const;
271 
273 
277  std::array<real,nstate> compute_dissipation_source (
278  const real coefficient_f_t2,
279  const real density,
280  const real nu_tilde,
281  const real d_wall,
282  const real s_tilde) const;
283 
285 
288  std::array<real,nstate> compute_cross_source (
289  const real density,
290  const real nu_tilde,
291  const real laminar_kinematic_viscosity,
292  const std::array<dealii::Tensor<1,dim,real>,nstate_navier_stokes> &primitive_soln_gradient_rans,
293  const std::array<dealii::Tensor<1,dim,real>,nstate_turbulence_model> &primitive_solution_gradient_turbulence_model) const;
294 
296 
298  const real c_b1 = 0.1355;
299  const real sigma = 2.0/3.0;
300  const real c_b2 = 0.622;
301  const real kappa = 0.41;
302  const real c_w1 = c_b1/(kappa*kappa)+(1+c_b2)/sigma;
303  const real c_w2 = 0.3;
304  const real c_w3 = 2.0;
305  const real c_v1 = 7.1;
306  const real c_v2 = 0.7;
307  const real c_v3 = 0.9;
308  const real c_t3 = 1.2;
309  const real c_t4 = 0.5;
310  const real c_n1 = 16.0;
311  const real r_lim = 10.0;
312 
313  const FadType sigma_fad = 2.0/3.0;
314  const FadType c_v1_fad = 7.1;
315  const FadType c_n1_fad = 16.0;
316 };
317 
318 
319 } // Physics namespace
320 } // PHiLiP namespace
321 
322 #endif
static const int nstate_navier_stokes
Number of PDEs for RANS equations.
std::array< real, nstate-(dim+2)> 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
Nondimensionalized effective (total) viscosities for the negative SA model.
real compute_s_bar(const real coefficient_Chi, const real nu_tilde, const real d_wall) const
Correction of vorticity magnitude for the negative SA model.
std::shared_ptr< ManufacturedSolutionFunction< dim, real > > manufactured_solution_function
Manufactured solution function.
Definition: model.h:29
real2 scale_coefficient(const real2 coefficient) const
Templated nondimensionalized variables scaled by reynolds_number_inf for the negative SA model...
real2 compute_coefficient_f_v1(const real2 coefficient_Chi) const
Templated coefficient f_v1 for the negative SA model.
Negative Spalart-Allmaras model. Derived from Reynolds Averaged Navier Stokes.
void boundary_inflow(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
Inflow boundary condition.
Sacado::Fad::DFad< double > FadType
Sacado AD type for first derivatives.
Definition: ADTypes.hpp:11
real compute_coefficient_r(const real nu_tilde, const real d_wall, const real s_tilde) const
Coefficient r for the negative SA model.
real compute_coefficient_g(const real coefficient_r) const
Coefficient g for the negative SA model.
Manufactured solution used for grid studies to check convergence orders.
FadType compute_eddy_viscosity_fad(const std::array< FadType, nstate_navier_stokes > &primitive_soln_rans, const std::array< FadType, nstate_turbulence_model > &primitive_soln_turbulence_model) const
Nondimensionalized eddy viscosity for the negative SA model (Automatic Differentiation Type: FadType)...
static const int nstate_turbulence_model
Number of PDEs for RANS turbulence model.
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
Nondimensionalized Reynolds heat flux, (q^reynolds)*, for the negative SA model.
Files for the baseline physics.
Definition: ADTypes.hpp:10
dealii::Tensor< 2, dim, real2 > compute_Reynolds_stress_tensor_templated(const std::array< real2, nstate_navier_stokes > &primitive_soln_rans, const std::array< dealii::Tensor< 1, dim, real2 >, nstate_navier_stokes > &primitive_soln_gradient_rans, const std::array< real2, nstate_turbulence_model > &primitive_soln_turbulence_model) const
Templated nondimensionalized Reynolds stress tensor, (tau^reynolds)* for the negative SA model...
std::vector< dealii::DataComponentInterpretation::DataComponentInterpretation > post_get_data_component_interpretation() const override
For post processing purposes, sets the interpretation of each computed quantity as either scalar or v...
real2 compute_coefficient_Chi(const real2 nu_tilde, const real2 laminar_kinematic_viscosity) const
Templated coefficient Chi for the negative SA model.
std::array< real2, nstate-(dim+2)> compute_effective_viscosity_turbulence_model_templated(const std::array< real2, nstate_navier_stokes > &primitive_soln_rans, const std::array< real2, nstate_turbulence_model > &primitive_soln_turbulence_model) const
Templated nondimensionalized effective (total) viscosities for the negative SA model.
Main parameter class that contains the various other sub-parameter classes.
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
Nondimensionalized Reynolds stress tensor, (tau^reynolds)*, for the negative SA model.
real compute_s(const std::array< real, nstate_navier_stokes > &conservative_soln_rans, const std::array< dealii::Tensor< 1, dim, real >, nstate_navier_stokes > &conservative_soln_gradient_rans) const
Vorticity magnitude for the negative SA model, sqrt(vorticity_x^2+vorticity_y^2+vorticity_z^2) ...
const real c_b1
Constant coefficients for the negative SA model.
real compute_coefficient_f_v2(const real coefficient_Chi) const
Coefficient f_v2 for the negative SA model.
real compute_eddy_viscosity(const std::array< real, nstate_navier_stokes > &primitive_soln_rans, const std::array< real, nstate_turbulence_model > &primitive_soln_turbulence_model) const
Nondimensionalized eddy viscosity for the negative SA model.
std::array< real, nstate > compute_production_source(const real coefficient_f_t2, const real density, const real nu_tilde, const real s, const real s_tilde) const
Production source term for the negative SA model.
TwoPointNumericalFlux
Two point numerical flux type for split form.
std::vector< std::string > post_get_names() const override
For post processing purposes, sets the base names (with no prefix or suffix) of the computed quantiti...
void boundary_wall(std::array< real, nstate > &soln_bc, std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_bc) const override
Wall boundary condition.
std::array< FadType, nstate-(dim+2)> 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
Nondimensionalized effective (total) viscosities for the negative SA model (Automatic Differentiation...
Reynolds-Averaged Navier-Stokes (RANS) equations. Derived from Navier-Stokes for modifying the stress...
real compute_coefficient_f_t2(const real coefficient_Chi) const
Coefficient f_t2 for the negative SA model.
ReynoldsAveragedNavierStokes_SAneg(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)
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
Physical source term (production, dissipation source terms and source term with cross derivatives) fo...
real2 compute_coefficient_f_n(const real2 nu_tilde, const real2 laminar_kinematic_viscosity) const
Templated coefficient f_n for the negative SA model.
dealii::Tensor< 1, dim, real2 > compute_Reynolds_heat_flux_templated(const std::array< real2, nstate_navier_stokes > &primitive_soln_rans, const std::array< dealii::Tensor< 1, dim, real2 >, nstate_navier_stokes > &primitive_soln_gradient_rans, const std::array< real2, nstate_turbulence_model > &primitive_soln_turbulence_model) const
Templated nondimensionalized Reynolds heat flux, (q^reynolds)* for the negative SA model...
std::array< real, nstate > compute_dissipation_source(const real coefficient_f_t2, const real density, const real nu_tilde, const real d_wall, const real s_tilde) const
Dissipation source term for the negative SA model.
real compute_s_tilde(const real coefficient_Chi, const real nu_tilde, const real d_wall, const real s) const
Modified vorticity magnitude for the negative SA model.
real compute_coefficient_f_w(const real coefficient_g) const
Coefficient f_t2 for the negative SA model.
const double turbulent_prandtl_number
Turbulent Prandtl number.
real2 compute_eddy_viscosity_templated(const std::array< real2, nstate_navier_stokes > &primitive_soln_rans, const std::array< real2, nstate_turbulence_model > &primitive_soln_turbulence_model) const
Templated nondimensionalized eddy viscosity for the negative SA model.
void boundary_farfield(std::array< real, nstate > &soln_bc) const override
Farfield boundary conditions based on freestream values.
std::array< real, nstate > compute_cross_source(const real density, const real nu_tilde, const real laminar_kinematic_viscosity, const std::array< dealii::Tensor< 1, dim, real >, nstate_navier_stokes > &primitive_soln_gradient_rans, const std::array< dealii::Tensor< 1, dim, real >, nstate_turbulence_model > &primitive_solution_gradient_turbulence_model) const
Source term with cross derivatives for the negative SA model.
void boundary_outflow(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
Outflow boundary condition.
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
Nondimensionalized Reynolds heat flux, (q^reynolds)* (Automatic Differentiation Type: FadType)...
ThermalBoundaryCondition
Types of thermal boundary conditions available.
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
Nondimensionalized Reynolds stress tensor, (tau^reynolds)* (Automatic Differentiation Type: FadType)...
dealii::Vector< double > post_compute_derived_quantities_vector(const dealii::Vector< double > &uh, const std::vector< dealii::Tensor< 1, dim > > &, const std::vector< dealii::Tensor< 2, dim > > &, const dealii::Tensor< 1, dim > &, const dealii::Point< dim > &) const override
For post processing purposes, returns conservative and primitive solution variables for the negative ...