1 #ifndef __NAVIER_STOKES__ 2 #define __NAVIER_STOKES__ 5 #include "parameters/parameters_navier_stokes.h" 11 template <
int dim,
int nstate,
typename real>
31 const double gamma_gas,
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;
81 template<
typename real2>
83 const std::array<real2,nstate> &primitive_soln,
84 const std::array<dealii::Tensor<1,dim,real2>,nstate> &primitive_soln_gradient)
const;
91 template<
typename real2>
101 template<
typename real2>
107 template<
typename real2>
113 template<
typename real2>
119 template<
typename real2>
121 const real2 scaled_viscosity_coefficient,
122 const double prandtl_number_input)
const;
127 template<
typename real2>
133 template<
typename real2>
135 const std::array<real2,nstate> &primitive_soln,
136 const std::array<dealii::Tensor<1,dim,real2>,nstate> &primitive_soln_gradient)
const;
141 template<
typename real2>
143 const real2 scaled_heat_conductivity,
144 const dealii::Tensor<1,dim,real2> &temperature_gradient)
const;
147 template<
typename real2>
149 const std::array<real2,nstate> &conservative_soln,
150 const std::array<dealii::Tensor<1,dim,real2>,nstate> &conservative_soln_gradient)
const;
154 const std::array<real,nstate> &conservative_soln,
155 const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient)
const;
159 const std::array<real,nstate> &conservative_soln,
160 const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient)
const;
164 const std::array<real,nstate> &conservative_soln,
165 const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient)
const;
175 const real integrated_enstrophy)
const;
183 const std::array<real,nstate> &conservative_soln,
184 const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient)
const;
190 const std::array<real,nstate> &conservative_soln,
191 const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient)
const;
195 const std::array<real,nstate> &conservative_soln,
196 const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient)
const;
206 const real integrated_deviatoric_strain_rate_tensor_magnitude_sqr)
const;
209 template<
typename real2>
210 dealii::Tensor<2,dim,real2>
212 const std::array<dealii::Tensor<1,dim,real2>,nstate> &primitive_soln_gradient)
const;
217 template<
typename real2>
218 dealii::Tensor<2,dim,real2>
220 const dealii::Tensor<2,dim,real2> &vel_gradient)
const;
224 const std::array<real,nstate> &conservative_soln,
225 const std::array<dealii::Tensor<1,dim,real>,nstate> &conservative_soln_gradient)
const;
234 const real integrated_strain_rate_tensor_magnitude_sqr)
const;
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;
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;
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;
267 const std::array<real,nstate> &primitive_soln,
268 const dealii::Tensor<1,dim,real> &temperature_gradient)
const;
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;
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;
291 const dealii::Point<dim,real> &pos)
const;
295 const dealii::Point<dim,real> &pos,
296 const std::array<real,nstate> &conservative_soln,
297 const real current_time)
const override;
302 std::array<real,nstate> &conservative_soln,
303 const dealii::Tensor<1,dim,real> &normal)
const;
308 std::array<real,nstate> &conservative_soln)
const;
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;
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;
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;
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;
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's temperature. Units: [K].
const double mach_inf
Farfield Mach number.
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.
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.
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.
const double side_slip_angle
Sideslip angle.
const double reynolds_number_inf
Farfield (free stream) Reynolds number.
real2 scale_viscosity_coefficient(const real2 viscosity_coefficient) const
double temperature_inf
Non-dimensionalized temperature* at infinity. Should equal 1/density*(inf)
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.
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.
const double constant_viscosity
Nondimensionalized constant viscosity.
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.
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.
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's temperature to freestream temperature.
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)
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.
std::shared_ptr< ManufacturedSolutionFunction< dim, real > > manufactured_solution_function
Manufactured solution function.
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...
const double freestream_temperature
Freestream temperature. Units: [K].
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)
const bool use_constant_viscosity
Flag to use constant viscosity instead of Sutherland's law of viscosity.
real2 compute_scaled_viscosity_coefficient(const std::array< real2, nstate > &primitive_soln) const