1 #include <boost/preprocessor/seq/for_each.hpp> 2 #include "artificial_dissipation.h" 11 template <
int dim,
int nspecies,
int nstate>
12 template <
typename real2>
14 const std::array<real2,nstate> &conservative_soln,
15 const std::array<dealii::Tensor<1,dim,real2>,nstate> &solution_gradient,
16 const real2 artificial_viscosity,
20 std::array<dealii::Tensor<1,dim,real2>,nstate> flux_laplacian = convection_diffusion.
dissipative_flux(conservative_soln, solution_gradient);
22 for(
int i=0;i<nstate;i++)
24 for(
int j=0;j<dim;j++)
26 flux_laplacian[i][j]*=artificial_viscosity;
29 return flux_laplacian;
32 template <
int dim,
int nspecies,
int nstate>
34 const std::array<double,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,double>,nstate> &solution_gradient,
double artificial_viscosity)
36 return calc_artificial_dissipation_flux_laplacian<double>(conservative_soln, solution_gradient, artificial_viscosity, convection_diffusion_double);
39 template <
int dim,
int nspecies,
int nstate>
41 const std::array<FadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,FadType>,nstate> &solution_gradient,
FadType artificial_viscosity)
43 return calc_artificial_dissipation_flux_laplacian<FadType>(conservative_soln, solution_gradient, artificial_viscosity, convection_diffusion_FadType);
46 template <
int dim,
int nspecies,
int nstate>
48 const std::array<RadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,RadType>,nstate> &solution_gradient,
RadType artificial_viscosity)
50 return calc_artificial_dissipation_flux_laplacian<RadType>(conservative_soln, solution_gradient, artificial_viscosity, convection_diffusion_RadType);
53 template <
int dim,
int nspecies,
int nstate>
55 const std::array<FadFadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,FadFadType>,nstate> &solution_gradient,
FadFadType artificial_viscosity)
57 return calc_artificial_dissipation_flux_laplacian<FadFadType>(conservative_soln, solution_gradient, artificial_viscosity, convection_diffusion_FadFadType);
60 template <
int dim,
int nspecies,
int nstate>
62 const std::array<RadFadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,RadFadType>,nstate> &solution_gradient,
RadFadType artificial_viscosity)
64 return calc_artificial_dissipation_flux_laplacian<RadFadType>(conservative_soln, solution_gradient, artificial_viscosity, convection_diffusion_RadFadType);
73 template <
int dim,
int nspecies,
int nstate>
74 template <
typename real2>
76 const std::array<real2,nstate> &conservative_soln,
77 const std::array<dealii::Tensor<1,dim,real2>,nstate> &solution_gradient,
78 const real2 artificial_viscosity,
81 std::array<dealii::Tensor<1,dim,real2>,nstate> flux_navier_stokes = navier_stokes.
dissipative_flux(conservative_soln, solution_gradient);
83 for(
int i=0;i<nstate;i++)
85 for(
int j=0;j<dim;j++)
87 flux_navier_stokes[i][j]*=artificial_viscosity;
90 return flux_navier_stokes;
94 template <
int dim,
int nspecies,
int nstate>
96 const std::array<double,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,double>,nstate> &solution_gradient,
double artificial_viscosity)
98 return calc_artificial_dissipation_flux_physical<double>(conservative_soln, solution_gradient, artificial_viscosity, navier_stokes_double);
101 template <
int dim,
int nspecies,
int nstate>
103 const std::array<FadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,FadType>,nstate> &solution_gradient,
FadType artificial_viscosity)
105 return calc_artificial_dissipation_flux_physical<FadType>(conservative_soln, solution_gradient, artificial_viscosity, navier_stokes_FadType);
108 template <
int dim,
int nspecies,
int nstate>
110 const std::array<RadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,RadType>,nstate> &solution_gradient,
RadType artificial_viscosity)
112 return calc_artificial_dissipation_flux_physical<RadType>(conservative_soln, solution_gradient, artificial_viscosity, navier_stokes_RadType);
115 template <
int dim,
int nspecies,
int nstate>
117 const std::array<FadFadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,FadFadType>,nstate> &solution_gradient,
FadFadType artificial_viscosity)
119 return calc_artificial_dissipation_flux_physical<FadFadType>(conservative_soln, solution_gradient, artificial_viscosity, navier_stokes_FadFadType);
122 template <
int dim,
int nspecies,
int nstate>
124 const std::array<RadFadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,RadFadType>,nstate> &solution_gradient,
RadFadType artificial_viscosity)
126 return calc_artificial_dissipation_flux_physical<RadFadType>(conservative_soln, solution_gradient, artificial_viscosity, navier_stokes_RadFadType);
133 template <
int dim,
int nspecies,
int nstate>
134 template <
typename real2>
136 const std::array<real2,nstate> &conservative_soln,
137 const std::array<dealii::Tensor<1,dim,real2>,nstate> &solution_gradient,
138 real2 artificial_viscosity,
141 std::array<dealii::Tensor<1,dim,real2>,nstate> conservative_soln_gradient = solution_gradient;
143 std::array<dealii::Tensor<1,dim,real2>,nstate> enthalpy_diss_flux;
147 for (
int i=0; i<nstate; i++)
149 for (
int d=0; d<dim; d++)
153 enthalpy_diss_flux[i][d] = -artificial_viscosity*(conservative_soln_gradient[i][d] + primitive_soln_gradient[i][d]);
157 enthalpy_diss_flux[i][d] = -artificial_viscosity*(conservative_soln_gradient[i][d]);
161 return enthalpy_diss_flux;
165 template <
int dim,
int nspecies,
int nstate>
167 const std::array<double,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,double>,nstate> &solution_gradient,
double artificial_viscosity)
169 return calc_artificial_dissipation_flux_enthalpy_conserving_laplacian<double>(conservative_soln, solution_gradient, artificial_viscosity, navier_stokes_double);
172 template <
int dim,
int nspecies,
int nstate>
174 const std::array<FadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,FadType>,nstate> &solution_gradient,
FadType artificial_viscosity)
176 return calc_artificial_dissipation_flux_enthalpy_conserving_laplacian<FadType>(conservative_soln, solution_gradient, artificial_viscosity, navier_stokes_FadType);
179 template <
int dim,
int nspecies,
int nstate>
181 const std::array<RadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,RadType>,nstate> &solution_gradient,
RadType artificial_viscosity)
183 return calc_artificial_dissipation_flux_enthalpy_conserving_laplacian<RadType>(conservative_soln, solution_gradient, artificial_viscosity, navier_stokes_RadType);
186 template <
int dim,
int nspecies,
int nstate>
188 const std::array<FadFadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,FadFadType>,nstate> &solution_gradient,
FadFadType artificial_viscosity)
190 return calc_artificial_dissipation_flux_enthalpy_conserving_laplacian<FadFadType>(conservative_soln, solution_gradient, artificial_viscosity, navier_stokes_FadFadType);
193 template <
int dim,
int nspecies,
int nstate>
195 const std::array<RadFadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,RadFadType>,nstate> &solution_gradient,
RadFadType artificial_viscosity)
197 return calc_artificial_dissipation_flux_enthalpy_conserving_laplacian<RadFadType>(conservative_soln, solution_gradient, artificial_viscosity, navier_stokes_RadFadType);
200 #if PHILIP_SPECIES==1 202 #define POSSIBLE_NSTATE (1)(2)(3)(4)(5)(6) 205 #define INSTANTIATE_ADFunctions(r, data, nstate) \ 206 template class ArtificialDissipationBase <PHILIP_DIM, PHILIP_SPECIES, nstate>; \ 207 template class LaplacianArtificialDissipation < PHILIP_DIM, PHILIP_SPECIES, nstate>; 208 BOOST_PP_SEQ_FOR_EACH(INSTANTIATE_ADFunctions, _, POSSIBLE_NSTATE)
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, nspecies, nstate, real2 > &convection_diffusion)
Calculates laplacian flux.
Sacado::Fad::DFad< FadType > FadFadType
Sacado AD type that allows 2nd 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
Enthalpy laplacian flux function overloaded with type double.
real max_convective_eigenvalue(const std::array< real, nstate > &soln) const override
Maximum convective eigenvalue.
Sacado::Fad::DFad< double > FadType
Sacado AD type for first derivatives.
codi_JacobianComputationType RadType
CoDiPaco reverse-AD type for first derivatives.
Convection-diffusion with linear advective and diffusive term. Derived from PhysicsBase.
Files for the baseline physics.
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
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.
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, nspecies, nstate, real2 > &navier_stokes)
Calculates navier stokes artificial dissipation flux.
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, nspecies, nstate, real2 > &navier_stokes)
Calculates enthalpy laplacian artificial dissipation flux.
Adds enthalpy laplacian artificial dissipation (from G.E. Barter and D.L. Darmofal, 2009).
std::array< dealii::Tensor< 1, dim, real2 >, nstate > convert_conservative_gradient_to_primitive_gradient_templated(const std::array< real2, nstate > &conservative_soln, const std::array< dealii::Tensor< 1, dim, real2 >, nstate > &conservative_soln_gradient) const
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.
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.
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).