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: .