1 #ifndef __LARGE_EDDY_SIMULATION__ 2 #define __LARGE_EDDY_SIMULATION__ 5 #include "navier_stokes.h" 12 template <
int dim,
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,
30 const double temperature_inf,
33 const double isothermal_wall_temperature = 1.0,
49 const std::array<real,nstate> &conservative_soln)
const;
53 const std::array<real,nstate> &conservative_soln,
54 const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
55 const dealii::types::global_dof_index cell_index)
const;
60 const std::array<real,nstate> &,
61 const dealii::Tensor<1,dim,real> &)
const override;
70 const std::array<real,nstate> &soln,
71 const dealii::Tensor<1,dim,real> &normal)
const;
75 const dealii::Point<dim,real> &pos,
76 const std::array<real,nstate> &solution,
77 const real current_time,
78 const dealii::types::global_dof_index cell_index)
const;
81 double get_filter_width (
const dealii::types::global_dof_index cell_index)
const;
85 const std::array<real,nstate> &primitive_soln,
86 const std::array<dealii::Tensor<1,dim,real>,nstate> &primitive_soln_gradient,
87 const dealii::types::global_dof_index cell_index)
const = 0;
91 const std::array<real,nstate> &primitive_soln,
92 const std::array<dealii::Tensor<1,dim,real>,nstate> &primitive_soln_gradient,
93 const dealii::types::global_dof_index cell_index)
const = 0;
97 const std::array<FadType,nstate> &primitive_soln,
98 const std::array<dealii::Tensor<1,dim,FadType>,nstate> &primitive_soln_gradient,
99 const dealii::types::global_dof_index cell_index)
const = 0;
103 const std::array<FadType,nstate> &primitive_soln,
104 const std::array<dealii::Tensor<1,dim,FadType>,nstate> &primitive_soln_gradient,
105 const dealii::types::global_dof_index cell_index)
const = 0;
109 template<
typename real2>
113 template<
typename real2>
115 const std::array<real2,nstate> &conservative_soln,
116 const std::array<dealii::Tensor<1,dim,real2>,nstate> &solution_gradient,
117 const dealii::types::global_dof_index cell_index)
const;
124 const std::array<real,nstate> &conservative_soln,
125 const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
126 const dealii::Tensor<1,dim,real> &normal,
127 const dealii::types::global_dof_index cell_index)
const;
134 const std::array<real,nstate> &conservative_soln,
135 const std::array<dealii::Tensor<1,dim,real>,nstate> &solution_gradient,
136 const dealii::Tensor<1,dim,real> &normal,
137 const int d_gradient,
138 const dealii::types::global_dof_index cell_index)
const;
142 const dealii::Point<dim,real> &pos)
const;
146 const dealii::Point<dim,real> &pos)
const;
150 const dealii::Point<dim,real> &pos,
151 const dealii::types::global_dof_index cell_index)
const;
155 template <
int dim,
int nstate,
typename real>
166 const double ref_length,
167 const double gamma_gas,
168 const double mach_inf,
169 const double angle_of_attack,
170 const double side_slip_angle,
171 const double prandtl_number,
172 const double reynolds_number_inf,
173 const bool use_constant_viscosity,
174 const double constant_viscosity,
175 const double temperature_inf,
178 const double model_constant,
179 const double isothermal_wall_temperature = 1.0,
188 double get_model_constant_times_filter_width (
const dealii::types::global_dof_index cell_index)
const;
192 const std::array<real,nstate> &primitive_soln,
193 const std::array<dealii::Tensor<1,dim,real>,nstate> &primitive_soln_gradient,
194 const dealii::types::global_dof_index cell_index)
const;
198 const std::array<real,nstate> &primitive_soln,
199 const std::array<dealii::Tensor<1,dim,real>,nstate> &primitive_soln_gradient,
200 const dealii::types::global_dof_index cell_index)
const;
204 const std::array<FadType,nstate> &primitive_soln,
205 const std::array<dealii::Tensor<1,dim,FadType>,nstate> &primitive_soln_gradient,
206 const dealii::types::global_dof_index cell_index)
const;
210 const std::array<FadType,nstate> &primitive_soln,
211 const std::array<dealii::Tensor<1,dim,FadType>,nstate> &primitive_soln_gradient,
212 const dealii::types::global_dof_index cell_index)
const;
215 virtual real compute_eddy_viscosity(
216 const std::array<real,nstate> &primitive_soln,
217 const std::array<dealii::Tensor<1,dim,real>,nstate> &primitive_soln_gradient,
218 const dealii::types::global_dof_index cell_index)
const;
221 virtual FadType compute_eddy_viscosity_fad(
222 const std::array<FadType,nstate> &primitive_soln,
223 const std::array<dealii::Tensor<1,dim,FadType>,nstate> &primitive_soln_gradient,
224 const dealii::types::global_dof_index cell_index)
const;
228 template<
typename real2> dealii::Tensor<2,dim,real2> compute_SGS_stress_tensor_templated (
229 const std::array<real2,nstate> &primitive_soln,
230 const std::array<dealii::Tensor<1,dim,real2>,nstate> &primitive_soln_gradient,
231 const dealii::types::global_dof_index cell_index)
const;
234 template<
typename real2>
235 dealii::Tensor<1,dim,real2> compute_SGS_heat_flux_templated (
236 const std::array<real2,nstate> &primitive_soln,
237 const std::array<dealii::Tensor<1,dim,real2>,nstate> &primitive_soln_gradient,
238 const dealii::types::global_dof_index cell_index)
const;
241 template<
typename real2> real2 scale_eddy_viscosity_templated(
242 const std::array<real2,nstate> &primitive_soln,
243 const real2 eddy_viscosity)
const;
247 template<
typename real2> real2 compute_eddy_viscosity_templated(
248 const std::array<real2,nstate> &primitive_soln,
249 const std::array<dealii::Tensor<1,dim,real2>,nstate> &primitive_soln_gradient,
250 const dealii::types::global_dof_index cell_index)
const;
254 template <
int dim,
int nstate,
typename real>
266 const double ref_length,
267 const double gamma_gas,
268 const double mach_inf,
269 const double angle_of_attack,
270 const double side_slip_angle,
271 const double prandtl_number,
272 const double reynolds_number_inf,
273 const bool use_constant_viscosity,
274 const double constant_viscosity,
275 const double temperature_inf,
278 const double model_constant,
279 const double isothermal_wall_temperature = 1.0,
287 real compute_eddy_viscosity(
288 const std::array<real,nstate> &primitive_soln,
289 const std::array<dealii::Tensor<1,dim,real>,nstate> &primitive_soln_gradient,
290 const dealii::types::global_dof_index cell_index)
const override;
295 FadType compute_eddy_viscosity_fad(
296 const std::array<FadType,nstate> &primitive_soln,
297 const std::array<dealii::Tensor<1,dim,FadType>,nstate> &primitive_soln_gradient,
298 const dealii::types::global_dof_index cell_index)
const override;
304 template<
typename real2> real2 compute_eddy_viscosity_templated(
305 const std::array<real2,nstate> &primitive_soln,
306 const std::array<dealii::Tensor<1,dim,real2>,nstate> &primitive_soln_gradient,
307 const dealii::types::global_dof_index cell_index)
const;
311 template <
int dim,
int nstate,
typename real>
322 const double ref_length,
323 const double gamma_gas,
324 const double mach_inf,
325 const double angle_of_attack,
326 const double side_slip_angle,
327 const double prandtl_number,
328 const double reynolds_number_inf,
329 const bool use_constant_viscosity,
330 const double constant_viscosity,
331 const double temperature_inf,
334 const double model_constant,
335 const double isothermal_wall_temperature = 1.0,
343 real compute_eddy_viscosity(
344 const std::array<real,nstate> &primitive_soln,
345 const std::array<dealii::Tensor<1,dim,real>,nstate> &primitive_soln_gradient,
346 const dealii::types::global_dof_index cell_index)
const override;
351 FadType compute_eddy_viscosity_fad(
352 const std::array<FadType,nstate> &primitive_soln,
353 const std::array<dealii::Tensor<1,dim,FadType>,nstate> &primitive_soln_gradient,
354 const dealii::types::global_dof_index cell_index)
const override;
360 template<
typename real2> real2 compute_eddy_viscosity_templated(
361 const std::array<real2,nstate> &primitive_soln,
362 const std::array<dealii::Tensor<1,dim,real2>,nstate> &primitive_soln_gradient,
363 const dealii::types::global_dof_index cell_index)
const;
virtual dealii::Tensor< 2, dim, real > compute_SGS_stress_tensor(const std::array< real, nstate > &primitive_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &primitive_soln_gradient, const dealii::types::global_dof_index cell_index) const =0
Nondimensionalized sub-grid scale (SGS) stress tensor, (tau^sgs)*.
const double model_constant
SGS model constant.
std::shared_ptr< ManufacturedSolutionFunction< dim, real > > manufactured_solution_function
Manufactured solution function.
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...
const double turbulent_prandtl_number
Turbulent Prandtl number.
virtual dealii::Tensor< 2, dim, FadType > compute_SGS_stress_tensor_fad(const std::array< FadType, nstate > &primitive_soln, const std::array< dealii::Tensor< 1, dim, FadType >, nstate > &primitive_soln_gradient, const dealii::types::global_dof_index cell_index) const =0
Nondimensionalized sub-grid scale (SGS) stress tensor, (tau^sgs)* (Automatic Differentiation Type: Fa...
virtual dealii::Tensor< 1, dim, real > compute_SGS_heat_flux(const std::array< real, nstate > &primitive_soln, const std::array< dealii::Tensor< 1, dim, real >, nstate > &primitive_soln_gradient, const dealii::types::global_dof_index cell_index) const =0
Nondimensionalized sub-grid scale (SGS) heat flux, (q^sgs)*.
Smagorinsky eddy viscosity model. Derived from Large Eddy Simulation.
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
Sacado::Fad::DFad< double > FadType
Sacado AD type for first derivatives.
std::array< real, nstate > get_manufactured_solution_value(const dealii::Point< dim, real > &pos) const
Get manufactured solution value (repeated from Euler)
Manufactured solution used for grid studies to check convergence orders.
WALE (Wall-Adapting Local Eddy-viscosity) eddy viscosity model. Derived from LargeEddySimulation_Smag...
real max_convective_eigenvalue(const std::array< real, nstate > &soln) const
Maximum convective eigenvalue of the additional models' PDEs.
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< real, nstate > convective_eigenvalues(const std::array< real, nstate > &, const dealii::Tensor< 1, dim, real > &) const override
Convective eigenvalues of the additional models' PDEs.
std::array< real, nstate > source_term(const dealii::Point< dim, real > &pos, const std::array< real, nstate > &solution, const real current_time, const dealii::types::global_dof_index cell_index) const
Source term for manufactured solution functions.
Files for the baseline physics.
Physics model additional terms and equations to the baseline physics.
Main parameter class that contains the various other sub-parameter classes.
std::array< real, nstate > dissipative_source_term(const dealii::Point< dim, real > &pos, const dealii::types::global_dof_index cell_index) const
Dissipative flux contribution to the source term (repeated from NavierStokes)
std::unique_ptr< NavierStokes< dim, nstate, real > > navier_stokes_physics
Pointer to Navier-Stokes physics object.
TwoPointNumericalFlux
Two point numerical flux type for split form.
LargeEddySimulationBase(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, const double turbulent_prandtl_number, const double ratio_of_filter_width_to_cell_size, 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.
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...
Large Eddy Simulation equations. Derived from Navier-Stokes for modifying the stress tensor and heat ...
std::array< dealii::Tensor< 1, dim, real >, nstate > convective_flux(const std::array< real, nstate > &conservative_soln) const
Convective flux: .
Vreman eddy viscosity model. Derived from LargeEddySimulation_Smagorinsky for only modifying compute_...
virtual dealii::Tensor< 1, dim, FadType > compute_SGS_heat_flux_fad(const std::array< FadType, nstate > &primitive_soln, const std::array< dealii::Tensor< 1, dim, FadType >, nstate > &primitive_soln_gradient, const dealii::types::global_dof_index cell_index) const =0
Nondimensionalized sub-grid scale (SGS) heat flux, (q^sgs)* (Automatic Differentiation Type: FadType)...
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
Dissipative (i.e. viscous) flux: .
ThermalBoundaryCondition
Types of thermal boundary conditions available.
double get_filter_width(const dealii::types::global_dof_index cell_index) const
Compute the nondimensionalized filter width used by the SGS model given a cell index.
std::array< dealii::Tensor< 1, dim, real >, nstate > get_manufactured_solution_gradient(const dealii::Point< dim, real > &pos) const
Get manufactured solution value (repeated from Euler)
const double ratio_of_filter_width_to_cell_size
Ratio of filter width to cell size.
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 dissipative (i.e. viscous) flux: .