1 #ifndef _ARTIFICIALDISSIPATION_ 2 #define _ARTIFICIALDISSIPATION_ 4 #include "physics/physics.h" 5 #include "physics/convection_diffusion.h" 6 #include "physics/navier_stokes.h" 7 #include "parameters/all_parameters.h" 8 #include "parameters/parameters_manufactured_solution.h" 15 template <
int dim,
int nstate>
24 const std::array<double,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,double>,nstate> &solution_gradient,
double artificial_viscosity)=0;
28 const std::array<FadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,FadType>,nstate> &solution_gradient,
FadType artificial_viscosity)=0;
32 const std::array<RadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,RadType>,nstate> &solution_gradient,
RadType artificial_viscosity)=0;
36 const std::array<FadFadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,FadFadType>,nstate> &solution_gradient,
FadFadType artificial_viscosity)=0;
40 const std::array<RadFadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,RadFadType>,nstate> &solution_gradient,
RadFadType artificial_viscosity)=0;
45 for(
int i=0; i<3; i++)
47 diffusion_tensor[i][i] = 1.0;
59 template <
int dim,
int nstate>
78 template <
typename real2>
80 std::array<dealii::Tensor<1,dim,real2>,nstate> calc_artificial_dissipation_flux_laplacian(
81 const std::array<real2,nstate> &conservative_soln,
82 const std::array<dealii::Tensor<1,dim,real2>,nstate> &solution_gradient,
83 const real2 artificial_viscosity,
89 convection_diffusion_double(parameters_input,false,true,this->
diffusion_tensor,Parameters::ManufacturedSolutionParam::get_default_advection_vector(),1.0),
90 convection_diffusion_FadType(parameters_input,false,true,this->
diffusion_tensor,Parameters::ManufacturedSolutionParam::get_default_advection_vector(),1.0),
91 convection_diffusion_RadType(parameters_input,false,true,this->
diffusion_tensor,Parameters::ManufacturedSolutionParam::get_default_advection_vector(),1.0),
92 convection_diffusion_FadFadType(parameters_input,false,true,this->
diffusion_tensor,Parameters::ManufacturedSolutionParam::get_default_advection_vector(),1.0),
93 convection_diffusion_RadFadType(parameters_input,false,true,this->
diffusion_tensor,Parameters::ManufacturedSolutionParam::get_default_advection_vector(),1.0)
98 const std::array<double,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,double>,nstate> &solution_gradient,
double artificial_viscosity)
override;
102 const std::array<FadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,FadType>,nstate> &solution_gradient,
FadType artificial_viscosity)
override;
106 const std::array<RadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,RadType>,nstate> &solution_gradient,
RadType artificial_viscosity)
override;
110 const std::array<FadFadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,FadFadType>,nstate> &solution_gradient,
FadFadType artificial_viscosity)
override;
114 const std::array<RadFadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,RadFadType>,nstate> &solution_gradient,
RadFadType artificial_viscosity)
override;
120 template <
int dim,
int nstate>
139 template <
typename real2>
141 std::array<dealii::Tensor<1,dim,real2>,nstate> calc_artificial_dissipation_flux_physical(
142 const std::array<real2,nstate> &conservative_soln,
143 const std::array<dealii::Tensor<1,dim,real2>,nstate> &solution_gradient,
144 const real2 artificial_viscosity,
150 navier_stokes_double(
152 parameters_input->euler_param.ref_length,
153 parameters_input->euler_param.gamma_gas,
154 parameters_input->euler_param.mach_inf,
155 parameters_input->euler_param.angle_of_attack,
156 parameters_input->euler_param.side_slip_angle,
159 parameters_input->navier_stokes_param.use_constant_viscosity,
160 parameters_input->navier_stokes_param.nondimensionalized_constant_viscosity,
161 parameters_input->navier_stokes_param.temperature_inf),
162 navier_stokes_FadType(
164 parameters_input->euler_param.ref_length,
165 parameters_input->euler_param.gamma_gas,
166 parameters_input->euler_param.mach_inf,
167 parameters_input->euler_param.angle_of_attack,
168 parameters_input->euler_param.side_slip_angle,
171 parameters_input->navier_stokes_param.use_constant_viscosity,
172 parameters_input->navier_stokes_param.nondimensionalized_constant_viscosity,
173 parameters_input->navier_stokes_param.temperature_inf),
174 navier_stokes_RadType(
176 parameters_input->euler_param.ref_length,
177 parameters_input->euler_param.gamma_gas,
178 parameters_input->euler_param.mach_inf,
179 parameters_input->euler_param.angle_of_attack,
180 parameters_input->euler_param.side_slip_angle,
183 parameters_input->navier_stokes_param.use_constant_viscosity,
184 parameters_input->navier_stokes_param.nondimensionalized_constant_viscosity,
185 parameters_input->navier_stokes_param.temperature_inf),
186 navier_stokes_FadFadType(
188 parameters_input->euler_param.ref_length,
189 parameters_input->euler_param.gamma_gas,
190 parameters_input->euler_param.mach_inf,
191 parameters_input->euler_param.angle_of_attack,
192 parameters_input->euler_param.side_slip_angle,
195 parameters_input->navier_stokes_param.use_constant_viscosity,
196 parameters_input->navier_stokes_param.nondimensionalized_constant_viscosity,
197 parameters_input->navier_stokes_param.temperature_inf),
198 navier_stokes_RadFadType(
200 parameters_input->euler_param.ref_length,
201 parameters_input->euler_param.gamma_gas,
202 parameters_input->euler_param.mach_inf,
203 parameters_input->euler_param.angle_of_attack,
204 parameters_input->euler_param.side_slip_angle,
207 parameters_input->navier_stokes_param.use_constant_viscosity,
208 parameters_input->navier_stokes_param.nondimensionalized_constant_viscosity,
209 parameters_input->navier_stokes_param.temperature_inf)
214 const std::array<double,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,double>,nstate> &solution_gradient,
double artificial_viscosity)
override;
218 const std::array<FadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,FadType>,nstate> &solution_gradient,
FadType artificial_viscosity)
override;
222 const std::array<RadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,RadType>,nstate> &solution_gradient,
RadType artificial_viscosity)
override;
226 const std::array<FadFadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,FadFadType>,nstate> &solution_gradient,
FadFadType artificial_viscosity)
override;
230 const std::array<RadFadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,RadFadType>,nstate> &solution_gradient,
RadFadType artificial_viscosity)
override;
238 template <
int dim,
int nstate>
257 template <
typename real2>
259 std::array<dealii::Tensor<1,dim,real2>,nstate> calc_artificial_dissipation_flux_enthalpy_conserving_laplacian(
260 const std::array<real2,nstate> &conservative_soln,
261 const std::array<dealii::Tensor<1,dim,real2>,nstate> &solution_gradient,
262 real2 artificial_viscosity,
268 navier_stokes_double(
270 parameters_input->euler_param.ref_length,
271 parameters_input->euler_param.gamma_gas,
272 parameters_input->euler_param.mach_inf,
273 parameters_input->euler_param.angle_of_attack,
274 parameters_input->euler_param.side_slip_angle,
277 parameters_input->navier_stokes_param.use_constant_viscosity,
278 parameters_input->navier_stokes_param.nondimensionalized_constant_viscosity,
279 parameters_input->navier_stokes_param.temperature_inf),
280 navier_stokes_FadType(
282 parameters_input->euler_param.ref_length,
283 parameters_input->euler_param.gamma_gas,
284 parameters_input->euler_param.mach_inf,
285 parameters_input->euler_param.angle_of_attack,
286 parameters_input->euler_param.side_slip_angle,
289 parameters_input->navier_stokes_param.use_constant_viscosity,
290 parameters_input->navier_stokes_param.nondimensionalized_constant_viscosity,
291 parameters_input->navier_stokes_param.temperature_inf),
292 navier_stokes_RadType(
294 parameters_input->euler_param.ref_length,
295 parameters_input->euler_param.gamma_gas,
296 parameters_input->euler_param.mach_inf,
297 parameters_input->euler_param.angle_of_attack,
298 parameters_input->euler_param.side_slip_angle,
301 parameters_input->navier_stokes_param.use_constant_viscosity,
302 parameters_input->navier_stokes_param.nondimensionalized_constant_viscosity,
303 parameters_input->navier_stokes_param.temperature_inf),
304 navier_stokes_FadFadType(
306 parameters_input->euler_param.ref_length,
307 parameters_input->euler_param.gamma_gas,
308 parameters_input->euler_param.mach_inf,
309 parameters_input->euler_param.angle_of_attack,
310 parameters_input->euler_param.side_slip_angle,
313 parameters_input->navier_stokes_param.use_constant_viscosity,
314 parameters_input->navier_stokes_param.nondimensionalized_constant_viscosity,
315 parameters_input->navier_stokes_param.temperature_inf),
316 navier_stokes_RadFadType(
318 parameters_input->euler_param.ref_length,
319 parameters_input->euler_param.gamma_gas,
320 parameters_input->euler_param.mach_inf,
321 parameters_input->euler_param.angle_of_attack,
322 parameters_input->euler_param.side_slip_angle,
325 parameters_input->navier_stokes_param.use_constant_viscosity,
326 parameters_input->navier_stokes_param.nondimensionalized_constant_viscosity,
327 parameters_input->navier_stokes_param.temperature_inf)
332 const std::array<double,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,double>,nstate> &solution_gradient,
double artificial_viscosity)
override;
336 const std::array<FadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,FadType>,nstate> &solution_gradient,
FadType artificial_viscosity)
override;
340 const std::array<RadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,RadType>,nstate> &solution_gradient,
RadType artificial_viscosity)
override;
344 const std::array<FadFadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,FadFadType>,nstate> &solution_gradient,
FadFadType artificial_viscosity)
override;
348 const std::array<RadFadType,nstate> &conservative_soln,
const std::array<dealii::Tensor<1,dim,RadFadType>,nstate> &solution_gradient,
RadFadType artificial_viscosity)
override;
Physics::NavierStokes< dim, nstate, FadType > navier_stokes_FadType
NavierStokes object of type FadType.
Sacado::Fad::DFad< FadType > FadFadType
Sacado AD type that allows 2nd derivatives.
PhysicalArtificialDissipation(const Parameters::AllParameters *const parameters_input)
Constructor of PhysicalArtificialDissipation.
ArtificialDissipationBase()
Constructor of ArtificialDissipationBase.
Sacado::Fad::DFad< double > FadType
Sacado AD type for first derivatives.
codi_JacobianComputationType RadType
CoDiPaco reverse-AD type for first derivatives.
Physics::NavierStokes< dim, nstate, double > navier_stokes_double
NavierStokes object of type double.
Files for the baseline physics.
Physics::NavierStokes< dim, nstate, RadFadType > navier_stokes_RadFadType
NavierStokes object of type RadFadType.
Physics::NavierStokes< dim, nstate, FadFadType > navier_stokes_FadFadType
NavierStokes object of type FadFadType.
virtual ~ArtificialDissipationBase()=default
Virtual destructor of ArtificialDissipationBase.
Physics::NavierStokes< dim, nstate, FadFadType > navier_stokes_FadFadType
NavierStokes object of type FadFadType.
Main parameter class that contains the various other sub-parameter classes.
Physics::ConvectionDiffusion< dim, nstate, RadType > convection_diffusion_RadType
ConvectionDiffusion object of type RadType.
LaplacianArtificialDissipation(const Parameters::AllParameters *const parameters_input)
Constructor of LaplacianArtificialDissipation.
Physics::ConvectionDiffusion< dim, nstate, FadFadType > convection_diffusion_FadFadType
ConvectionDiffusion object of type FadFadType.
Physics::ConvectionDiffusion< dim, nstate, RadFadType > convection_diffusion_RadFadType
ConvectionDiffusion object of type RadFadType.
Physics::ConvectionDiffusion< dim, nstate, FadType > convection_diffusion_FadType
ConvectionDiffusion object of type FadType.
Physics::NavierStokes< dim, nstate, RadType > navier_stokes_RadType
NavierStokes object of type RadType.
Adds enthalpy laplacian artificial dissipation (from G.E. Barter and D.L. Darmofal, 2009).
virtual 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)=0
Virtual fuction overloaded with type double.
Adds Laplacian artificial dissipation (from Persson and Peraire, 2008).
Class to add artificial dissipation with an option to add one of the 3 dissipation types: 1...
EnthalpyConservingArtificialDissipation(const Parameters::AllParameters *const parameters_input)
Constructor of EnthalpyConservingArtificialDissipation.
Physics::NavierStokes< dim, nstate, double > navier_stokes_double
NavierStokes object of type double.
codi_HessianComputationType RadFadType
Nested reverse-forward mode type for Jacobian and Hessian computation using TapeHelper.
Physics::NavierStokes< dim, nstate, FadType > navier_stokes_FadType
NavierStokes object of type FadType.
Adds Physical artificial dissipation (from Persson and Peraire, 2008).
Physics::NavierStokes< dim, nstate, RadFadType > navier_stokes_RadFadType
NavierStokes object of type RadFadType.
Physics::NavierStokes< dim, nstate, RadType > navier_stokes_RadType
NavierStokes object of type RadType.
Physics::ConvectionDiffusion< dim, nstate, double > convection_diffusion_double
ConvectionDiffusion object of type double.
dealii::Tensor< 2, 3, double > diffusion_tensor
Identity diffusion tensor for Laplace artificial dissipation.