1 #include "artificial_dissipation.h" 10 template <
int dim,
int nstate>
11 template <
typename real2>
13 const std::array<real2,nstate> &conservative_soln,
14 const std::array<dealii::Tensor<1,dim,real2>,nstate> &solution_gradient,
15 const real2 artificial_viscosity,
19 std::array<dealii::Tensor<1,dim,real2>,nstate> flux_laplacian = convection_diffusion.
dissipative_flux(conservative_soln, solution_gradient);
21 for(
int i=0;i<nstate;i++)
23 for(
int j=0;j<dim;j++)
25 flux_laplacian[i][j]*=artificial_viscosity;
28 return flux_laplacian;
31 template <
int dim,
int nstate>
33 const std::array<double,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,double>,nstate> &solution_gradient,
double artificial_viscosity)
35 return calc_artificial_dissipation_flux_laplacian<double>(conservative_soln, solution_gradient, artificial_viscosity, convection_diffusion_double);
38 template <
int dim,
int nstate>
40 const std::array<FadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,FadType>,nstate> &solution_gradient,
FadType artificial_viscosity)
42 return calc_artificial_dissipation_flux_laplacian<FadType>(conservative_soln, solution_gradient, artificial_viscosity, convection_diffusion_FadType);
45 template <
int dim,
int nstate>
47 const std::array<RadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,RadType>,nstate> &solution_gradient,
RadType artificial_viscosity)
49 return calc_artificial_dissipation_flux_laplacian<RadType>(conservative_soln, solution_gradient, artificial_viscosity, convection_diffusion_RadType);
52 template <
int dim,
int nstate>
54 const std::array<FadFadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,FadFadType>,nstate> &solution_gradient,
FadFadType artificial_viscosity)
56 return calc_artificial_dissipation_flux_laplacian<FadFadType>(conservative_soln, solution_gradient, artificial_viscosity, convection_diffusion_FadFadType);
59 template <
int dim,
int nstate>
61 const std::array<RadFadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,RadFadType>,nstate> &solution_gradient,
RadFadType artificial_viscosity)
63 return calc_artificial_dissipation_flux_laplacian<RadFadType>(conservative_soln, solution_gradient, artificial_viscosity, convection_diffusion_RadFadType);
72 template <
int dim,
int nstate>
73 template <
typename real2>
75 const std::array<real2,nstate> &conservative_soln,
76 const std::array<dealii::Tensor<1,dim,real2>,nstate> &solution_gradient,
77 const real2 artificial_viscosity,
80 std::array<dealii::Tensor<1,dim,real2>,nstate> flux_navier_stokes = navier_stokes.
dissipative_flux(conservative_soln, solution_gradient);
82 for(
int i=0;i<nstate;i++)
84 for(
int j=0;j<dim;j++)
86 flux_navier_stokes[i][j]*=artificial_viscosity;
89 return flux_navier_stokes;
93 template <
int dim,
int nstate>
95 const std::array<double,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,double>,nstate> &solution_gradient,
double artificial_viscosity)
97 return calc_artificial_dissipation_flux_physical<double>(conservative_soln, solution_gradient, artificial_viscosity, navier_stokes_double);
100 template <
int dim,
int nstate>
102 const std::array<FadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,FadType>,nstate> &solution_gradient,
FadType artificial_viscosity)
104 return calc_artificial_dissipation_flux_physical<FadType>(conservative_soln, solution_gradient, artificial_viscosity, navier_stokes_FadType);
107 template <
int dim,
int nstate>
109 const std::array<RadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,RadType>,nstate> &solution_gradient,
RadType artificial_viscosity)
111 return calc_artificial_dissipation_flux_physical<RadType>(conservative_soln, solution_gradient, artificial_viscosity, navier_stokes_RadType);
114 template <
int dim,
int nstate>
116 const std::array<FadFadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,FadFadType>,nstate> &solution_gradient,
FadFadType artificial_viscosity)
118 return calc_artificial_dissipation_flux_physical<FadFadType>(conservative_soln, solution_gradient, artificial_viscosity, navier_stokes_FadFadType);
121 template <
int dim,
int nstate>
123 const std::array<RadFadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,RadFadType>,nstate> &solution_gradient,
RadFadType artificial_viscosity)
125 return calc_artificial_dissipation_flux_physical<RadFadType>(conservative_soln, solution_gradient, artificial_viscosity, navier_stokes_RadFadType);
132 template <
int dim,
int nstate>
133 template <
typename real2>
135 const std::array<real2,nstate> &conservative_soln,
136 const std::array<dealii::Tensor<1,dim,real2>,nstate> &solution_gradient,
137 real2 artificial_viscosity,
140 std::array<dealii::Tensor<1,dim,real2>,nstate> conservative_soln_gradient = solution_gradient;
142 std::array<dealii::Tensor<1,dim,real2>,nstate> enthalpy_diss_flux;
146 for (
int i=0; i<nstate; i++)
148 for (
int d=0; d<dim; d++)
152 enthalpy_diss_flux[i][d] = -artificial_viscosity*(conservative_soln_gradient[i][d] + primitive_soln_gradient[i][d]);
156 enthalpy_diss_flux[i][d] = -artificial_viscosity*(conservative_soln_gradient[i][d]);
160 return enthalpy_diss_flux;
164 template <
int dim,
int nstate>
166 const std::array<double,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,double>,nstate> &solution_gradient,
double artificial_viscosity)
168 return calc_artificial_dissipation_flux_enthalpy_conserving_laplacian<double>(conservative_soln, solution_gradient, artificial_viscosity, navier_stokes_double);
171 template <
int dim,
int nstate>
173 const std::array<FadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,FadType>,nstate> &solution_gradient,
FadType artificial_viscosity)
175 return calc_artificial_dissipation_flux_enthalpy_conserving_laplacian<FadType>(conservative_soln, solution_gradient, artificial_viscosity, navier_stokes_FadType);
178 template <
int dim,
int nstate>
180 const std::array<RadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,RadType>,nstate> &solution_gradient,
RadType artificial_viscosity)
182 return calc_artificial_dissipation_flux_enthalpy_conserving_laplacian<RadType>(conservative_soln, solution_gradient, artificial_viscosity, navier_stokes_RadType);
185 template <
int dim,
int nstate>
187 const std::array<FadFadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,FadFadType>,nstate> &solution_gradient,
FadFadType artificial_viscosity)
189 return calc_artificial_dissipation_flux_enthalpy_conserving_laplacian<FadFadType>(conservative_soln, solution_gradient, artificial_viscosity, navier_stokes_FadFadType);
192 template <
int dim,
int nstate>
194 const std::array<RadFadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,RadFadType>,nstate> &solution_gradient,
RadFadType artificial_viscosity)
196 return calc_artificial_dissipation_flux_enthalpy_conserving_laplacian<RadFadType>(conservative_soln, solution_gradient, artificial_viscosity, navier_stokes_RadFadType);
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
Sacado::Fad::DFad< FadType > FadFadType
Sacado AD type that allows 2nd derivatives.
std::array< dealii::Tensor< 1, dim, real2 >, nstate > calc_artificial_dissipation_flux_enthalpy_conserving_laplacian(const std::array< real2, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &solution_gradient, real2 artificial_viscosity, const Physics::NavierStokes< dim, nstate, real2 > &navier_stokes)
Calculates enthalpy laplacian artificial dissipation flux.
Sacado::Fad::DFad< double > FadType
Sacado AD type for first derivatives.
codi_JacobianComputationType RadType
CoDiPaco reverse-AD type for first derivatives.
std::array< dealii::Tensor< 1, dim, double >, nstate > calc_artificial_dissipation_flux(const std::array< double, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, double >, nstate > &solution_gradient, double artificial_viscosity) override
Physical flux function overloaded with type double.
Convection-diffusion with linear advective and diffusive term. Derived from PhysicsBase.
Files for the baseline physics.
std::array< dealii::Tensor< 1, dim, double >, nstate > calc_artificial_dissipation_flux(const std::array< double, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, double >, nstate > &solution_gradient, double artificial_viscosity) override
Laplacian flux function overloaded with type double.
std::array< dealii::Tensor< 1, dim, real2 >, nstate > calc_artificial_dissipation_flux_physical(const std::array< real2, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &solution_gradient, const real2 artificial_viscosity, const Physics::NavierStokes< dim, nstate, real2 > &navier_stokes)
Calculates navier stokes artificial dissipation flux.
std::array< dealii::Tensor< 1, dim, real2 >, nstate > calc_artificial_dissipation_flux_laplacian(const std::array< real2, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &solution_gradient, const real2 artificial_viscosity, const Physics::ConvectionDiffusion< dim, nstate, real2 > &convection_diffusion)
Calculates laplacian flux.
real max_convective_eigenvalue(const std::array< real, nstate > &soln) const override
Maximum convective eigenvalue.
std::array< dealii::Tensor< 1, dim, real >, nstate > dissipative_flux(const std::array< real, nstate > &solution, const std::array< dealii::Tensor< 1, dim, real >, nstate > &solution_gradient, const dealii::types::global_dof_index cell_index) const
Dissipative flux: u.
Adds enthalpy laplacian artificial dissipation (from G.E. Barter and D.L. Darmofal, 2009).
Adds Laplacian artificial dissipation (from Persson and Peraire, 2008).
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
Class to add artificial dissipation with an option to add one of the 3 dissipation types: 1...
std::array< dealii::Tensor< 1, dim, double >, nstate > calc_artificial_dissipation_flux(const std::array< double, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, double >, nstate > &solution_gradient, double artificial_viscosity) override
Enthalpy laplacian flux function overloaded with type double.
codi_HessianComputationType RadFadType
Nested reverse-forward mode type for Jacobian and Hessian computation using TapeHelper.
Navier-Stokes equations. Derived from Euler for the convective terms, which is derived from PhysicsBa...
Adds Physical artificial dissipation (from Persson and Peraire, 2008).