[P]arallel [Hi]gh-order [Li]brary for [P]DEs  Latest
Parallel High-Order Library for PDEs through hp-adaptive Discontinuous Galerkin methods
navier_stokes.h
1 #ifndef __NAVIER_STOKES__
2 #define __NAVIER_STOKES__
3 
4 #include "euler.h"
5 #include "parameters/parameters_navier_stokes.h"
6 
7 namespace PHiLiP {
8 namespace Physics {
9 
11 template <int dim, int nstate, typename real>
12 class NavierStokes : public Euler <dim, nstate, real>
13 {
14 protected:
15  // For overloading the virtual functions defined in PhysicsBase
24 public:
28  NavierStokes(
29  const Parameters::AllParameters *const parameters_input,
30  const double ref_length,
31  const double gamma_gas,
32  const double mach_inf,
33  const double angle_of_attack,
34  const double side_slip_angle,
35  const double prandtl_number,
36  const double reynolds_number_inf,
37  const bool use_constant_viscosity,
38  const double constant_viscosity,
39  const double temperature_inf = 273.15,
40  const double isothermal_wall_temperature = 1.0,
41  const thermal_boundary_condition_enum thermal_boundary_condition_type = thermal_boundary_condition_enum::adiabatic,
43  const two_point_num_flux_enum two_point_num_flux_type = two_point_num_flux_enum::KG);
44 
50  const double constant_viscosity;
52  const double prandtl_number;
54  const double reynolds_number_inf;
59 
60 protected:
62 
66  const double sutherlands_temperature;
67  const double freestream_temperature;
68  const double temperature_ratio;
69 
70 
71 public:
72 
74  template<typename real2>
75  std::array<dealii::Tensor<1,dim,real2>,nstate>
77  const std::array<real2,nstate> &conservative_soln,
78  const std::array<dealii::Tensor<1,dim,real2>,nstate> &conservative_soln_gradient) const;
79 
81  template<typename real2>
82  dealii::Tensor<1,dim,real2> compute_temperature_gradient (
83  const std::array<real2,nstate> &primitive_soln,
84  const std::array<dealii::Tensor<1,dim,real2>,nstate> &primitive_soln_gradient) const;
85 
91  template<typename real2>
92  real2 compute_viscosity_coefficient (const std::array<real2,nstate> &primitive_soln) const;
93 
101  template<typename real2>
102  real2 compute_viscosity_coefficient_sutherlands_law (const std::array<real2,nstate> &primitive_soln) const;
103 
107  template<typename real2>
108  real2 scale_viscosity_coefficient (const real2 viscosity_coefficient) const;
109 
113  template<typename real2>
114  real2 compute_scaled_viscosity_coefficient (const std::array<real2,nstate> &primitive_soln) const;
115 
119  template<typename real2>
121  const real2 scaled_viscosity_coefficient,
122  const double prandtl_number_input) const;
123 
127  template<typename real2>
128  real2 compute_scaled_heat_conductivity (const std::array<real2,nstate> &primitive_soln) const;
129 
133  template<typename real2>
134  dealii::Tensor<1,dim,real2> compute_heat_flux (
135  const std::array<real2,nstate> &primitive_soln,
136  const std::array<dealii::Tensor<1,dim,real2>,nstate> &primitive_soln_gradient) const;
137 
141  template<typename real2>
143  const real2 scaled_heat_conductivity,
144  const dealii::Tensor<1,dim,real2> &temperature_gradient) const;
145 
147  template<typename real2>
148  dealii::Tensor<1,3,real2> compute_vorticity (
149  const std::array<real2,nstate> &conservative_soln,
150  const std::array<dealii::Tensor<1,dim,real2>,nstate> &conservative_soln_gradient) const;
151 
154  const std::array<real,nstate> &conservative_soln,
155  const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient) const;
156 
159  const std::array<real,nstate> &conservative_soln,
160  const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient) const;
161 
163  real compute_enstrophy (
164  const std::array<real,nstate> &conservative_soln,
165  const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient) const;
166 
175  const real integrated_enstrophy) const;
176 
183  const std::array<real,nstate> &conservative_soln,
184  const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient) const;
185 
189  dealii::Tensor<2,dim,real> compute_deviatoric_strain_rate_tensor (
190  const std::array<real,nstate> &conservative_soln,
191  const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient) const;
192 
195  const std::array<real,nstate> &conservative_soln,
196  const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient) const;
197 
206  const real integrated_deviatoric_strain_rate_tensor_magnitude_sqr) const;
207 
209  template<typename real2>
210  dealii::Tensor<2,dim,real2>
212  const std::array<dealii::Tensor<1,dim,real2>,nstate> &primitive_soln_gradient) const;
213 
217  template<typename real2>
218  dealii::Tensor<2,dim,real2>
220  const dealii::Tensor<2,dim,real2> &vel_gradient) const;
221 
224  const std::array<real,nstate> &conservative_soln,
225  const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient) const;
226 
234  const real integrated_strain_rate_tensor_magnitude_sqr) const;
235 
236 
240  template<typename real2>
241  dealii::Tensor<2,dim,real2>
243  const real2 scaled_viscosity_coefficient,
244  const dealii::Tensor<2,dim,real2> &strain_rate_tensor) const;
245 
249  template<typename real2>
250  dealii::Tensor<2,dim,real2>
252  const std::array<real2,nstate> &primitive_soln,
253  const std::array<dealii::Tensor<1,dim,real2>,nstate> &primitive_soln_gradient) const;
254 
258  std::array<dealii::Tensor<1,dim,real>,nstate>
260  const std::array<real,nstate> &conservative_soln,
261  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient) const override;
262 
266  dealii::Tensor<1,dim,real> compute_scaled_viscosity_gradient (
267  const std::array<real,nstate> &primitive_soln,
268  const dealii::Tensor<1,dim,real> &temperature_gradient) const;
269 
274  dealii::Tensor<2,nstate,real> dissipative_flux_directional_jacobian (
275  const std::array<real,nstate> &conservative_soln,
276  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
277  const dealii::Tensor<1,dim,real> &normal) const;
278 
284  const std::array<real,nstate> &conservative_soln,
285  const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
286  const dealii::Tensor<1,dim,real> &normal,
287  const int d_gradient) const;
288 
290  std::array<real,nstate> dissipative_source_term (
291  const dealii::Point<dim,real> &pos) const;
292 
294  std::array<real,nstate> source_term (
295  const dealii::Point<dim,real> &pos,
296  const std::array<real,nstate> &conservative_soln,
297  const real current_time) const override;
298 
301  dealii::Tensor<2,nstate,real> convective_flux_directional_jacobian_via_dfad (
302  std::array<real,nstate> &conservative_soln,
303  const dealii::Tensor<1,dim,real> &normal) const;
304 
308  std::array<real,nstate> &conservative_soln) const;
309 
314  template<typename real2>
315  std::array<dealii::Tensor<1,dim,real2>,nstate>
317  const dealii::Tensor<1,dim,real2> &vel,
318  const dealii::Tensor<2,dim,real2> &viscous_stress_tensor,
319  const dealii::Tensor<1,dim,real2> &heat_flux) const;
320 
321 protected:
322 
326  template <typename real2>
327  std::array<dealii::Tensor<1,dim,real2>,nstate>
329  const std::array<real2,nstate> &conservative_soln,
330  const std::array<dealii::Tensor<1,dim,real2>,nstate> &solution_gradient) const;
331 
336  void boundary_wall (
337  const dealii::Tensor<1,dim,real> &normal_int,
338  const std::array<real,nstate> &soln_int,
339  const std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_int,
340  std::array<real,nstate> &soln_bc,
341  std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_bc) const override;
342 
345  const dealii::Point<dim, real> &pos,
346  const dealii::Tensor<1,dim,real> &normal_int,
347  const std::array<real,nstate> &soln_int,
348  const std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_int,
349  std::array<real,nstate> &soln_bc,
350  std::array<dealii::Tensor<1,dim,real>,nstate> &soln_grad_bc) const override;
351 
352 private:
354  real get_tensor_magnitude_sqr (const dealii::Tensor<2,dim,real> &tensor) const;
355 
356 };
357 
358 } // Physics namespace
359 } // PHiLiP namespace
360 
361 #endif
dealii::Tensor< 1, dim, real2 > compute_heat_flux_given_scaled_heat_conductivity_and_temperature_gradient(const real2 scaled_heat_conductivity, const dealii::Tensor< 1, dim, real2 > &temperature_gradient) const
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 > convert_conservative_gradient_to_primitive_gradient(const std::array< real2, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &conservative_soln_gradient) const
const double sutherlands_temperature
Sutherland&#39;s temperature. Units: [K].
Definition: navier_stokes.h:66
const double mach_inf
Farfield Mach number.
Definition: euler.h:113
real compute_deviatoric_strain_rate_tensor_based_dissipation_rate_from_integrated_deviatoric_strain_rate_tensor_magnitude_sqr(const real integrated_deviatoric_strain_rate_tensor_magnitude_sqr) const
std::array< real, nstate > dissipative_source_term(const dealii::Point< dim, real > &pos) const
Dissipative flux contribution to the source term.
NavierStokes(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 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.
const double angle_of_attack
Angle of attack.
Definition: euler.h:118
real compute_enstrophy(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &conservative_soln_gradient) const
Evaluate enstrophy from conservative variables and gradient of conservative variables.
Base class from which Advection, Diffusion, ConvectionDiffusion, and Euler is derived.
Definition: physics.h:34
Manufactured solution used for grid studies to check convergence orders.
dealii::Tensor< 1, dim, real > compute_scaled_viscosity_gradient(const std::array< real, nstate > &primitive_soln, const dealii::Tensor< 1, dim, real > &temperature_gradient) const
Files for the baseline physics.
Definition: ADTypes.hpp:10
const double side_slip_angle
Sideslip angle.
Definition: euler.h:122
const double reynolds_number_inf
Farfield (free stream) Reynolds number.
Definition: navier_stokes.h:54
real2 scale_viscosity_coefficient(const real2 viscosity_coefficient) const
double temperature_inf
Non-dimensionalized temperature* at infinity. Should equal 1/density*(inf)
Definition: euler.h:129
dealii::Tensor< 2, dim, real2 > compute_viscous_stress_tensor(const std::array< real2, nstate > &primitive_soln, const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &primitive_soln_gradient) const
Main parameter class that contains the various other sub-parameter classes.
dealii::Tensor< 2, dim, real2 > compute_strain_rate_tensor(const dealii::Tensor< 2, dim, real2 > &vel_gradient) const
dealii::Tensor< 1, 3, real2 > compute_vorticity(const std::array< real2, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &conservative_soln_gradient) const
Evaluate vorticity from conservative variables and gradient of conservative variables.
dealii::Tensor< 2, dim, real2 > compute_viscous_stress_tensor_via_scaled_viscosity_and_strain_rate_tensor(const real2 scaled_viscosity_coefficient, const dealii::Tensor< 2, dim, real2 > &strain_rate_tensor) const
dealii::Tensor< 2, nstate, real > convective_flux_directional_jacobian_via_dfad(std::array< real, nstate > &conservative_soln, const dealii::Tensor< 1, dim, real > &normal) const
dealii::Tensor< 1, dim, real2 > compute_temperature_gradient(const std::array< real2, nstate > &primitive_soln, const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &primitive_soln_gradient) const
real2 compute_viscosity_coefficient_sutherlands_law(const std::array< real2, nstate > &primitive_soln) const
const double isothermal_wall_temperature
Nondimensionalized isothermal wall temperature.
Definition: navier_stokes.h:56
TwoPointNumericalFlux
Two point numerical flux type for split form.
real compute_strain_rate_tensor_based_dissipation_rate_from_integrated_strain_rate_tensor_magnitude_sqr(const real integrated_strain_rate_tensor_magnitude_sqr) const
const double viscosity_coefficient_inf
Nondimensionalized viscosity coefficient at infinity.
Definition: navier_stokes.h:46
const double constant_viscosity
Nondimensionalized constant viscosity.
Definition: navier_stokes.h:50
dealii::Tensor< 1, dim, real2 > compute_heat_flux(const std::array< real2, nstate > &primitive_soln, const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &primitive_soln_gradient) const
real2 compute_scaled_heat_conductivity(const std::array< real2, nstate > &primitive_soln) const
real compute_strain_rate_tensor_magnitude_sqr(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &conservative_soln_gradient) const
Evaluate the square of the strain-rate tensor magnitude (i.e. double dot product) from conservative v...
Euler equations. Derived from PhysicsBase.
Definition: euler.h:78
real compute_vorticity_magnitude_sqr(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &conservative_soln_gradient) const
Evaluate vorticity magnitude squared from conservative variables and gradient of conservative variabl...
real compute_vorticity_based_dissipation_rate_from_integrated_enstrophy(const real integrated_enstrophy) const
real compute_pressure_dilatation(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &conservative_soln_gradient) const
real2 compute_viscosity_coefficient(const std::array< real2, nstate > &primitive_soln) const
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
const double prandtl_number
Prandtl number.
Definition: navier_stokes.h:52
std::array< real, nstate > source_term(const dealii::Point< dim, real > &pos, const std::array< real, nstate > &conservative_soln, const real current_time) const override
Source term is zero or depends on manufactured solution.
void boundary_wall(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
const double temperature_ratio
Ratio of Sutherland&#39;s temperature to freestream temperature.
Definition: navier_stokes.h:68
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::Tensor< 2, dim, real2 > extract_velocities_gradient_from_primitive_solution_gradient(const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &primitive_soln_gradient) const
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 override
real compute_scaled_viscosity_coefficient_derivative_wrt_temperature_via_dfad(std::array< real, nstate > &conservative_soln) const
ThermalBoundaryCondition
Types of thermal boundary conditions available.
dealii::Tensor< 2, dim, real > compute_deviatoric_strain_rate_tensor(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &conservative_soln_gradient) const
const two_point_num_flux_enum two_point_num_flux_type
Two point numerical flux type (for split form)
Definition: euler.h:128
std::array< dealii::Tensor< 1, dim, real2 >, nstate > dissipative_flux_given_velocities_viscous_stress_tensor_and_heat_flux(const dealii::Tensor< 1, dim, real2 > &vel, const dealii::Tensor< 2, dim, real2 > &viscous_stress_tensor, const dealii::Tensor< 1, dim, real2 > &heat_flux) const
real2 compute_scaled_heat_conductivity_given_scaled_viscosity_coefficient_and_prandtl_number(const real2 scaled_viscosity_coefficient, const double prandtl_number_input) const
const double ref_length
Reference length.
Definition: euler.h:104
std::shared_ptr< ManufacturedSolutionFunction< dim, real > > manufactured_solution_function
Manufactured solution function.
Definition: physics.h:71
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
real get_tensor_magnitude_sqr(const dealii::Tensor< 2, dim, real > &tensor) const
Returns the square of the magnitude of the tensor (i.e. the double dot product of a tensor with itsel...
Navier-Stokes equations. Derived from Euler for the convective terms, which is derived from PhysicsBa...
Definition: navier_stokes.h:12
const double freestream_temperature
Freestream temperature. Units: [K].
Definition: navier_stokes.h:67
real compute_vorticity_magnitude(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &conservative_soln_gradient) const
Evaluate vorticity magnitude from conservative variables and gradient of conservative variables...
real compute_deviatoric_strain_rate_tensor_magnitude_sqr(const std::array< real, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &conservative_soln_gradient) const
Evaluate the square of the deviatoric strain-rate tensor magnitude (i.e. double dot product) from con...
const thermal_boundary_condition_enum thermal_boundary_condition_type
Thermal boundary condition type (adiabatic or isothermal)
Definition: navier_stokes.h:58
const bool use_constant_viscosity
Flag to use constant viscosity instead of Sutherland&#39;s law of viscosity.
Definition: navier_stokes.h:48
real2 compute_scaled_viscosity_coefficient(const std::array< real2, nstate > &primitive_soln) const