[P]arallel [Hi]gh-order [Li]brary for [P]DEs  Latest
Parallel High-Order Library for PDEs through hp-adaptive Discontinuous Galerkin methods
viscous_numerical_flux.hpp
1 #ifndef __VISCOUS_NUMERICAL_FLUX__
2 #define __VISCOUS_NUMERICAL_FLUX__
3 
4 #include <deal.II/base/tensor.h>
5 #include <deal.II/base/types.h>
6 #include "physics/physics.h"
7 #include "dg/artificial_dissipation.h"
8 
9 namespace PHiLiP {
10 namespace NumericalFlux {
11 
13 template<int dim, int nspecies, int nstate, typename real>
15 {
16 public:
18 NumericalFluxDissipative(std::shared_ptr<Physics::PhysicsBase<dim, nspecies, nstate, real>> physics_input, std::shared_ptr<ArtificialDissipationBase<dim, nspecies, nstate>> artificial_dissipation_input)
19 : pde_physics(physics_input), artificial_dissip(artificial_dissipation_input)
20 {};
21 
23 virtual ~NumericalFluxDissipative() = default;
24 
26 virtual std::array<real, nstate> evaluate_solution_flux (
27  const std::array<real, nstate> &soln_int,
28  const std::array<real, nstate> &soln_ext,
29  const dealii::Tensor<1,dim,real> &normal_int) const = 0;
30 
32 virtual std::array<real, nstate> evaluate_auxiliary_flux (
33  const dealii::types::global_dof_index current_cell_index,
34  const dealii::types::global_dof_index neighbor_cell_index_,
35  const real artificial_diss_coeff_int,
36  const real artificial_diss_coeff_ext_,
37  const std::array<real, nstate> &soln_int,
38  const std::array<real, nstate> &soln_ext,
39  const std::array<dealii::Tensor<1,dim,real>, nstate> &soln_grad_int,
40  const std::array<dealii::Tensor<1,dim,real>, nstate> &soln_grad_ext_,
41  const std::array<real, nstate> &filtered_soln_int,
42  const std::array<real, nstate> &filtered_soln_ext,
43  const std::array<dealii::Tensor<1,dim,real>, nstate> &filtered_soln_grad_int,
44  const std::array<dealii::Tensor<1,dim,real>, nstate> &filtered_soln_grad_ext_,
45  const dealii::Tensor<1,dim,real> &normal_int,
46  const real &penalty,
47  const bool on_boundary,
48  const int boundary_type=0) const = 0;
49 
50 protected:
51 const std::shared_ptr < Physics::PhysicsBase<dim, nspecies, nstate, real> > pde_physics;
52 const std::shared_ptr < ArtificialDissipationBase<dim, nspecies, nstate> > artificial_dissip;
53 };
54 
56 template<int dim, int nspecies, int nstate, typename real>
57 class CentralViscousNumericalFlux: public NumericalFluxDissipative<dim, nspecies, nstate, real>
58 {
61 public:
63 CentralViscousNumericalFlux(std::shared_ptr<Physics::PhysicsBase<dim, nspecies, nstate, real>> physics_input, std::shared_ptr < ArtificialDissipationBase<dim, nspecies, nstate>> artificial_dissipation_input)
64 : NumericalFluxDissipative<dim,nspecies,nstate,real>(physics_input,artificial_dissipation_input)
65 {};
66 
68 
70 std::array<real, nstate> evaluate_solution_flux (
71  const std::array<real, nstate> &soln_int,
72  const std::array<real, nstate> &soln_ext,
73  const dealii::Tensor<1,dim,real> &normal_int) const override;
74 
76 
82 std::array<real, nstate> evaluate_auxiliary_flux (
83  const dealii::types::global_dof_index current_cell_index,
84  const dealii::types::global_dof_index neighbor_cell_index_,
85  const real artificial_diss_coeff_int,
86  const real artificial_diss_coeff_ext_,
87  const std::array<real, nstate> &soln_int,
88  const std::array<real, nstate> &soln_ext,
89  const std::array<dealii::Tensor<1,dim,real>, nstate> &soln_grad_int,
90  const std::array<dealii::Tensor<1,dim,real>, nstate> &soln_grad_ext_,
91  const std::array<real, nstate> &filtered_soln_int,
92  const std::array<real, nstate> &filtered_soln_ext,
93  const std::array<dealii::Tensor<1,dim,real>, nstate> &filtered_soln_grad_int,
94  const std::array<dealii::Tensor<1,dim,real>, nstate> &filtered_soln_grad_ext_,
95  const dealii::Tensor<1,dim,real> &normal_int,
96  const real &penalty,
97  const bool on_boundary,
98  const int boundary_type=0) const override;
99 
100 };
101 
103 template<int dim, int nspecies, int nstate, typename real>
104 class SymmetricInternalPenalty: public NumericalFluxDissipative<dim, nspecies, nstate, real>
105 {
108 public:
110 SymmetricInternalPenalty(std::shared_ptr<Physics::PhysicsBase<dim, nspecies, nstate, real>> physics_input, std::shared_ptr < ArtificialDissipationBase<dim, nspecies, nstate>> artificial_dissipation_input)
111 : NumericalFluxDissipative<dim,nspecies,nstate,real>(physics_input,artificial_dissipation_input)
112 {};
113 
115 
117 std::array<real, nstate> evaluate_solution_flux (
118  const std::array<real, nstate> &soln_int,
119  const std::array<real, nstate> &soln_ext,
120  const dealii::Tensor<1,dim,real> &normal_int) const override;
121 
123 
129 std::array<real, nstate> evaluate_auxiliary_flux (
130  const dealii::types::global_dof_index current_cell_index,
131  const dealii::types::global_dof_index neighbor_cell_index_,
132  const real artificial_diss_coeff_int,
133  const real artificial_diss_coeff_ext_,
134  const std::array<real, nstate> &soln_int,
135  const std::array<real, nstate> &soln_ext,
136  const std::array<dealii::Tensor<1,dim,real>, nstate> &soln_grad_int,
137  const std::array<dealii::Tensor<1,dim,real>, nstate> &soln_grad_ext_,
138  const std::array<real, nstate> &filtered_soln_int,
139  const std::array<real, nstate> &filtered_soln_ext,
140  const std::array<dealii::Tensor<1,dim,real>, nstate> &filtered_soln_grad_int,
141  const std::array<dealii::Tensor<1,dim,real>, nstate> &filtered_soln_grad_ext_,
142  const dealii::Tensor<1,dim,real> &normal_int,
143  const real &penalty,
144  const bool on_boundary,
145  const int boundary_type=0) const override;
146 
147 };
148 
149 template<int dim, int nspecies, int nstate, typename real>
150 class BassiRebay2: public NumericalFluxDissipative<dim, nspecies, nstate, real>
151 {
154 public:
156 BassiRebay2(std::shared_ptr<Physics::PhysicsBase<dim, nspecies, nstate, real>> physics_input, std::shared_ptr<ArtificialDissipationBase<dim, nspecies, nstate>> artificial_dissipation_input)
157 : NumericalFluxDissipative<dim,nspecies,nstate,real>(physics_input,artificial_dissipation_input)
158 {};
159 
161 
163 std::array<real, nstate> evaluate_solution_flux (
164  const std::array<real, nstate> &soln_int,
165  const std::array<real, nstate> &soln_ext,
166  const dealii::Tensor<1,dim,real> &normal_int) const override;
167 
169 
175 std::array<real, nstate> evaluate_auxiliary_flux (
176  const dealii::types::global_dof_index current_cell_index,
177  const dealii::types::global_dof_index neighbor_cell_index_,
178  const real artificial_diss_coeff_int,
179  const real artificial_diss_coeff_ext_,
180  const std::array<real, nstate> &soln_int,
181  const std::array<real, nstate> &soln_ext,
182  const std::array<dealii::Tensor<1,dim,real>, nstate> &soln_grad_int,
183  const std::array<dealii::Tensor<1,dim,real>, nstate> &soln_grad_ext_,
184  const std::array<real, nstate> &filtered_soln_int,
185  const std::array<real, nstate> &filtered_soln_ext,
186  const std::array<dealii::Tensor<1,dim,real>, nstate> &filtered_soln_grad_int,
187  const std::array<dealii::Tensor<1,dim,real>, nstate> &filtered_soln_grad_ext_,
188  const dealii::Tensor<1,dim,real> &normal_int,
189  const real &penalty,
190  const bool on_boundary,
191  const int boundary_type=0) const override;
192 
193 };
194 
195 } // NumericalFlux namespace
196 } // PHiLiP namespace
197 
198 #endif
NumericalFluxDissipative(std::shared_ptr< Physics::PhysicsBase< dim, nspecies, nstate, real >> physics_input, std::shared_ptr< ArtificialDissipationBase< dim, nspecies, nstate >> artificial_dissipation_input)
Constructor.
virtual std::array< real, nstate > evaluate_solution_flux(const std::array< real, nstate > &soln_int, const std::array< real, nstate > &soln_ext, const dealii::Tensor< 1, dim, real > &normal_int) const =0
Solution flux at the interface.
const std::shared_ptr< ArtificialDissipationBase< dim, nspecies, nstate > > artificial_dissip
Link to artificial dissipation.
const std::shared_ptr< Physics::PhysicsBase< dim, nspecies, nstate, real > > pde_physics
Associated physics.
Base class from which Advection, Diffusion, ConvectionDiffusion, and Euler is derived.
Definition: physics.h:34
Base class of numerical flux associated with dissipation.
Files for the baseline physics.
Definition: ADTypes.hpp:10
virtual std::array< real, nstate > evaluate_auxiliary_flux(const dealii::types::global_dof_index current_cell_index, const dealii::types::global_dof_index neighbor_cell_index_, const real artificial_diss_coeff_int, const real artificial_diss_coeff_ext_, const std::array< real, nstate > &soln_int, const std::array< real, nstate > &soln_ext, const std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_int, const std::array< dealii::Tensor< 1, dim, real >, nstate > &soln_grad_ext_, const std::array< real, nstate > &filtered_soln_int, const std::array< real, nstate > &filtered_soln_ext, const std::array< dealii::Tensor< 1, dim, real >, nstate > &filtered_soln_grad_int, const std::array< dealii::Tensor< 1, dim, real >, nstate > &filtered_soln_grad_ext_, const dealii::Tensor< 1, dim, real > &normal_int, const real &penalty, const bool on_boundary, const int boundary_type=0) const =0
Auxiliary flux at the interface.
BassiRebay2(std::shared_ptr< Physics::PhysicsBase< dim, nspecies, nstate, real >> physics_input, std::shared_ptr< ArtificialDissipationBase< dim, nspecies, nstate >> artificial_dissipation_input)
Constructor.
SymmetricInternalPenalty(std::shared_ptr< Physics::PhysicsBase< dim, nspecies, nstate, real >> physics_input, std::shared_ptr< ArtificialDissipationBase< dim, nspecies, nstate >> artificial_dissipation_input)
Constructor.
CentralViscousNumericalFlux(std::shared_ptr< Physics::PhysicsBase< dim, nspecies, nstate, real >> physics_input, std::shared_ptr< ArtificialDissipationBase< dim, nspecies, nstate >> artificial_dissipation_input)
Constructor.
Class to add artificial dissipation with an option to add one of the 3 dissipation types: 1...
virtual ~NumericalFluxDissipative()=default
Abstract class must have a virtual destructor and an implementation.