[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.cpp
1 #include <boost/preprocessor/seq/for_each.hpp>
2 
3 #include "ADTypes.hpp"
4 
5 #include "viscous_numerical_flux.hpp"
6 
7 namespace PHiLiP {
8 namespace NumericalFlux {
9 
10 using AllParam = Parameters::AllParameters;
11 
12 // Protyping low level functions
13 template<int nstate, typename real>
14 std::array<real, nstate> array_average(
15  const std::array<real, nstate> &array1,
16  const std::array<real, nstate> &array2)
17 {
18  std::array<real,nstate> array_average;
19  for (int s=0; s<nstate; s++) {
20  array_average[s] = 0.5*(array1[s] + array2[s]);
21  }
22  return array_average;
23 }
24 
25 template<int nstate, int dim, typename real>
26 std::array<dealii::Tensor<1,dim,real>, nstate> array_average(
27  const std::array<dealii::Tensor<1,dim,real>,nstate> &array1,
28  const std::array<dealii::Tensor<1,dim,real>,nstate> &array2)
29 {
30  std::array<dealii::Tensor<1,dim,real>,nstate> array_average;
31  for (int s=0; s<nstate; s++) {
32  for (int d=0; d<dim; d++) {
33  array_average[s][d] = 0.5*(array1[s][d] + array2[s][d]);
34  }
35  }
36  return array_average;
37 }
38 
39 template<int dim, int nspecies, int nstate, typename real>
40 std::array<dealii::Tensor<1,dim,real>,nstate> array_jump(
41  const std::array<real, nstate> &array1,
42  const std::array<real, nstate> &array2,
43  const dealii::Tensor<1,dim,real> &normal1)
44 {
45  std::array<dealii::Tensor<1,dim,real>,nstate> array_jump;
46  for (int s=0; s<nstate; s++) {
47  for (int d=0; d<dim; d++) {
48  array_jump[s][d] = (array1[s] - array2[s])*normal1[d];
49  }
50  }
51  return array_jump;
52 }
53 
54 template<int dim, int nspecies, int nstate, typename real>
57  const std::array<real, nstate> &soln_int,
58  const std::array<real, nstate> &soln_ext,
59  const dealii::Tensor<1,dim,real> &/*normal_int*/) const
60 {
61  std::array<real,nstate> soln_avg = array_average<nstate,real>(soln_int, soln_ext);
62 
63  return soln_avg;
64 }
65 
66 template<int dim, int nspecies, int nstate, typename real>
69  const dealii::types::global_dof_index current_cell_index,
70  const dealii::types::global_dof_index neighbor_cell_index_,
71  const real artificial_diss_coeff_int,
72  const real artificial_diss_coeff_ext_,
73  const std::array<real, nstate> &soln_int,
74  const std::array<real, nstate> &soln_ext,
75  const std::array<dealii::Tensor<1,dim,real>, nstate> &soln_grad_int,
76  const std::array<dealii::Tensor<1,dim,real>, nstate> &soln_grad_ext_,
77  const std::array<real, nstate> &filtered_soln_int,
78  const std::array<real, nstate> &filtered_soln_ext,
79  const std::array<dealii::Tensor<1,dim,real>, nstate> &filtered_soln_grad_int,
80  const std::array<dealii::Tensor<1,dim,real>, nstate> &filtered_soln_grad_ext_,
81  const dealii::Tensor<1,dim,real> &normal_int,
82  const real &penalty,
83  const bool on_boundary,
84  const int boundary_type) const
85 {
86  using ArrayTensor1 = std::array<dealii::Tensor<1,dim,real>, nstate>;
87 
88  real artificial_diss_coeff_ext;
89  dealii::types::global_dof_index neighbor_cell_index;
90  std::array<dealii::Tensor<1,dim,real>, nstate> soln_grad_ext;
91  std::array<dealii::Tensor<1,dim,real>, nstate> filtered_soln_grad_ext;
92  if (on_boundary) {
93  // Following the the boundary treatment given by
94  // Hartmann, R., Numerical Analysis of Higher Order Discontinuous Galerkin Finite Element Methods, Institute of Aerodynamics and Flow Technology, DLR (German Aerospace Center), 2008.
95  // Details given on page 93
96  artificial_diss_coeff_ext = artificial_diss_coeff_int;
97  neighbor_cell_index = current_cell_index;
98  soln_grad_ext = soln_grad_int;
99  //soln_grad_ext = soln_grad_ext_;
100  filtered_soln_grad_ext = filtered_soln_grad_int;
101  } else {
102  artificial_diss_coeff_ext = artificial_diss_coeff_ext_;
103  neighbor_cell_index = neighbor_cell_index_;
104  soln_grad_ext = soln_grad_ext_;
105  filtered_soln_grad_ext = filtered_soln_grad_ext_;
106  }
107 
108  // {{A*grad_u}}
109  std::array<real,nstate> phys_flux_int_dot_n, phys_flux_ext_dot_n;
110  phys_flux_int_dot_n = pde_physics->dissipative_flux_dot_normal (soln_int, soln_grad_int, filtered_soln_int, filtered_soln_grad_int, on_boundary, current_cell_index, normal_int, boundary_type);
111  phys_flux_ext_dot_n = pde_physics->dissipative_flux_dot_normal (soln_ext, soln_grad_ext, filtered_soln_ext, filtered_soln_grad_ext, on_boundary, neighbor_cell_index, normal_int, boundary_type);
112  const std::array<real,nstate> phys_flux_avg_dot_n = array_average<nstate,real>(phys_flux_int_dot_n,phys_flux_ext_dot_n);
113 
114  std::array<real,nstate> auxiliary_flux_dot_n = phys_flux_avg_dot_n;
115 
116  if (artificial_diss_coeff_int > 1e-13 || artificial_diss_coeff_ext > 1e-13) {
117  ArrayTensor1 artificial_phys_flux_int, artificial_phys_flux_ext;
118 
119  // {{A*grad_u}}
120  artificial_phys_flux_int = artificial_dissip->calc_artificial_dissipation_flux (soln_int, soln_grad_int, artificial_diss_coeff_int);
121  artificial_phys_flux_ext = artificial_dissip->calc_artificial_dissipation_flux (soln_ext, soln_grad_ext, artificial_diss_coeff_ext);
122  ArrayTensor1 artificial_phys_flux_avg = array_average<nstate,dim,real>(artificial_phys_flux_int, artificial_phys_flux_ext);
123 
124  // {{A}}*[[u]]
125  ArrayTensor1 soln_jump = array_jump<dim,nspecies,nstate,real>(soln_int, soln_ext, normal_int);
126  ArrayTensor1 artificial_A_jumpu_int, artificial_A_jumpu_ext;
127  artificial_A_jumpu_int = artificial_dissip->calc_artificial_dissipation_flux (soln_int, soln_jump, artificial_diss_coeff_int);
128  artificial_A_jumpu_ext = artificial_dissip->calc_artificial_dissipation_flux (soln_ext, soln_jump, artificial_diss_coeff_ext);
129  const ArrayTensor1 artificial_A_jumpu_avg = array_average<nstate,dim,real>(artificial_A_jumpu_int, artificial_A_jumpu_ext);
130 
131  for (int s=0; s<nstate; s++) {
132  //auxiliary_flux_dot_n[s] += (artificial_phys_flux_avg[s] - penalty * artificial_A_jumpu_avg[s]) * normal_int;
133  real arti = 0.0;
134  for (int d=0; d<dim; ++d) {
135  arti += (artificial_phys_flux_avg[s][d] - penalty * artificial_A_jumpu_avg[s][d]) * normal_int[d];
136  }
137  auxiliary_flux_dot_n[s] += arti;
138  }
139  }
140 
141  return auxiliary_flux_dot_n;
142 }
143 
144 template<int dim, int nspecies, int nstate, typename real>
147  const std::array<real, nstate> &soln_int,
148  const std::array<real, nstate> &soln_ext,
149  const dealii::Tensor<1,dim,real> &/*normal_int*/) const
150 {
151  std::array<real,nstate> soln_avg = array_average<nstate,real>(soln_int, soln_ext);
152 
153  return soln_avg;
154 }
155 
156 template<int dim, int nspecies, int nstate, typename real>
159  const dealii::types::global_dof_index current_cell_index,
160  const dealii::types::global_dof_index neighbor_cell_index_,
161  const real artificial_diss_coeff_int,
162  const real artificial_diss_coeff_ext_,
163  const std::array<real, nstate> &soln_int,
164  const std::array<real, nstate> &soln_ext,
165  const std::array<dealii::Tensor<1,dim,real>, nstate> &soln_grad_int,
166  const std::array<dealii::Tensor<1,dim,real>, nstate> &soln_grad_ext_,
167  const std::array<real, nstate> &filtered_soln_int,
168  const std::array<real, nstate> &filtered_soln_ext,
169  const std::array<dealii::Tensor<1,dim,real>, nstate> &filtered_soln_grad_int,
170  const std::array<dealii::Tensor<1,dim,real>, nstate> &filtered_soln_grad_ext_,
171  const dealii::Tensor<1,dim,real> &normal_int,
172  const real &penalty,
173  const bool on_boundary,
174  const int boundary_type) const
175 {
176  using ArrayTensor1 = std::array<dealii::Tensor<1,dim,real>, nstate>;
177 
178  real artificial_diss_coeff_ext;
179  dealii::types::global_dof_index neighbor_cell_index;
180  std::array<dealii::Tensor<1,dim,real>, nstate> soln_grad_ext;
181  std::array<dealii::Tensor<1,dim,real>, nstate> filtered_soln_grad_ext;
182  if (on_boundary) {
183  // Following the the boundary treatment given by
184  // Hartmann, R., Numerical Analysis of Higher Order Discontinuous Galerkin Finite Element Methods, Institute of Aerodynamics and Flow Technology, DLR (German Aerospace Center), 2008.
185  // Details given on page 93
186  artificial_diss_coeff_ext = artificial_diss_coeff_int;
187  neighbor_cell_index = current_cell_index;
188  // soln_grad_ext = soln_grad_int;
189  soln_grad_ext = soln_grad_ext_;
190  // filtered_soln_grad_ext = filtered_soln_grad_int;
191  filtered_soln_grad_ext = filtered_soln_grad_ext_;
192  } else {
193  artificial_diss_coeff_ext = artificial_diss_coeff_ext_;
194  neighbor_cell_index = neighbor_cell_index_;
195  soln_grad_ext = soln_grad_ext_;
196  filtered_soln_grad_ext = filtered_soln_grad_ext_;
197  }
198 
199  // {{A*grad_u}}
200  std::array<real,nstate> phys_flux_int_dot_n, phys_flux_ext_dot_n;
201  phys_flux_int_dot_n = pde_physics->dissipative_flux_dot_normal (soln_int, soln_grad_int, filtered_soln_int, filtered_soln_grad_int, on_boundary, current_cell_index, normal_int, boundary_type);
202  phys_flux_ext_dot_n = pde_physics->dissipative_flux_dot_normal (soln_ext, soln_grad_ext, filtered_soln_ext, filtered_soln_grad_ext, on_boundary, neighbor_cell_index, normal_int, boundary_type);
203  const std::array<real,nstate> phys_flux_avg_dot_n = array_average<nstate,real>(phys_flux_int_dot_n,phys_flux_ext_dot_n);
204 
205  // {{A}}*[[u]]
206  ArrayTensor1 soln_jump = array_jump<dim,nspecies,nstate,real>(soln_int, soln_ext, normal_int);
207  ArrayTensor1 filtered_soln_jump = array_jump<dim,nspecies,nstate,real>(filtered_soln_int, filtered_soln_ext, normal_int);
208  std::array<real,nstate> A_jumpu_int_dot_n, A_jumpu_ext_dot_n;
209  A_jumpu_int_dot_n = pde_physics->dissipative_flux_dot_normal (soln_int, soln_jump, filtered_soln_int, filtered_soln_jump, on_boundary, current_cell_index, normal_int, boundary_type);
210  A_jumpu_ext_dot_n = pde_physics->dissipative_flux_dot_normal (soln_ext, soln_jump, filtered_soln_ext, filtered_soln_jump, on_boundary, neighbor_cell_index, normal_int, boundary_type);
211  const std::array<real,nstate> A_jumpu_avg_dot_n = array_average<nstate,real>(A_jumpu_int_dot_n, A_jumpu_ext_dot_n);
212 
213  std::array<real,nstate> auxiliary_flux_dot_n;
214  for (int s=0; s<nstate; s++) {
215  auxiliary_flux_dot_n[s] = phys_flux_avg_dot_n[s] - penalty * A_jumpu_avg_dot_n[s];
216  }
217 
218  if (artificial_diss_coeff_int > 1e-13 || artificial_diss_coeff_ext > 1e-13) {
219  ArrayTensor1 artificial_phys_flux_int, artificial_phys_flux_ext;
220 
221  // {{A*grad_u}}
222  artificial_phys_flux_int = artificial_dissip->calc_artificial_dissipation_flux (soln_int, soln_grad_int, artificial_diss_coeff_int);
223  artificial_phys_flux_ext = artificial_dissip->calc_artificial_dissipation_flux (soln_ext, soln_grad_ext, artificial_diss_coeff_ext);
224  ArrayTensor1 artificial_phys_flux_avg = array_average<nstate,dim,real>(artificial_phys_flux_int, artificial_phys_flux_ext);
225 
226  // {{A}}*[[u]]
227  ArrayTensor1 artificial_A_jumpu_int, artificial_A_jumpu_ext;
228  artificial_A_jumpu_int = artificial_dissip->calc_artificial_dissipation_flux (soln_int, soln_jump, artificial_diss_coeff_int);
229  artificial_A_jumpu_ext = artificial_dissip->calc_artificial_dissipation_flux (soln_ext, soln_jump, artificial_diss_coeff_ext);
230  const ArrayTensor1 artificial_A_jumpu_avg = array_average<nstate,dim,real>(artificial_A_jumpu_int, artificial_A_jumpu_ext);
231 
232  for (int s=0; s<nstate; s++) {
233  //auxiliary_flux_dot_n[s] += (artificial_phys_flux_avg[s] - penalty * artificial_A_jumpu_avg[s]) * normal_int;
234  real arti = 0.0;
235  for (int d=0; d<dim; ++d) {
236  arti += (artificial_phys_flux_avg[s][d] - penalty * artificial_A_jumpu_avg[s][d]) * normal_int[d];
237  }
238  auxiliary_flux_dot_n[s] += arti;
239  }
240  }
241 
242  return auxiliary_flux_dot_n;
243 }
244 
245 template<int dim, int nspecies, int nstate, typename real>
246 std::array<real, nstate> BassiRebay2<dim,nspecies,nstate,real>
248  const std::array<real, nstate> &soln_int,
249  const std::array<real, nstate> &soln_ext,
250  const dealii::Tensor<1,dim,real> &/*normal_int*/) const
251 {
252  std::array<real,nstate> soln_avg = array_average<nstate,real>(soln_int, soln_ext);
253 
254  return soln_avg;
255 }
256 
257 template<int dim, int nspecies, int nstate, typename real>
258 std::array<real, nstate> BassiRebay2<dim,nspecies,nstate,real>
260  const dealii::types::global_dof_index current_cell_index,
261  const dealii::types::global_dof_index neighbor_cell_index_,
262  const real artificial_diss_coeff_int,
263  const real artificial_diss_coeff_ext_,
264  const std::array<real, nstate> &soln_int,
265  const std::array<real, nstate> &soln_ext,
266  const std::array<dealii::Tensor<1,dim,real>, nstate> &soln_grad_int,
267  const std::array<dealii::Tensor<1,dim,real>, nstate> &soln_grad_ext_,
268  const std::array<real, nstate> &filtered_soln_int,
269  const std::array<real, nstate> &filtered_soln_ext,
270  const std::array<dealii::Tensor<1,dim,real>, nstate> &filtered_soln_grad_int,
271  const std::array<dealii::Tensor<1,dim,real>, nstate> &filtered_soln_grad_ext_,
272  const dealii::Tensor<1,dim,real> &normal_int,
273  const real &penalty,
274  const bool on_boundary,
275  const int boundary_type) const
276 {
277  using ArrayTensor1 = std::array<dealii::Tensor<1,dim,real>, nstate>;
278 
279  (void) on_boundary;
280  (void) penalty;
281 
282  real artificial_diss_coeff_ext;
283  dealii::types::global_dof_index neighbor_cell_index;
284  std::array<dealii::Tensor<1,dim,real>, nstate> soln_grad_ext;
285  std::array<dealii::Tensor<1,dim,real>, nstate> filtered_soln_grad_ext;
286  //if (on_boundary) {
287  // // Following the the boundary treatment given by
288  // // Hartmann, R., Numerical Analysis of Higher Order Discontinuous Galerkin Finite Element Methods, Institute of Aerodynamics and Flow Technology, DLR (German Aerospace Center), 2008.
289  // // Details given on page 93
290  // artificial_diss_coeff_ext = artificial_diss_coeff_int;
291  // neighbor_cell_index = current_cell_index;
292  // soln_grad_ext = soln_grad_int;
293  // //soln_grad_ext = soln_grad_ext_;
294  // filtered_soln_grad_ext = filtered_soln_grad_int;
295  //} else {
296  artificial_diss_coeff_ext = artificial_diss_coeff_ext_;
297  neighbor_cell_index = neighbor_cell_index_;
298  soln_grad_ext = soln_grad_ext_;
299  filtered_soln_grad_ext = filtered_soln_grad_ext_;
300  //}
301 
302  // {{A*grad_u}}
303  std::array<real,nstate> phys_flux_int_dot_n, phys_flux_ext_dot_n;
304  phys_flux_int_dot_n = pde_physics->dissipative_flux_dot_normal (soln_int, soln_grad_int, filtered_soln_int, filtered_soln_grad_int, on_boundary, current_cell_index, normal_int, boundary_type);
305  phys_flux_ext_dot_n = pde_physics->dissipative_flux_dot_normal (soln_ext, soln_grad_ext, filtered_soln_ext, filtered_soln_grad_ext, on_boundary, neighbor_cell_index, normal_int, boundary_type);
306  const std::array<real,nstate> phys_flux_avg_dot_n = array_average<nstate,real>(phys_flux_int_dot_n,phys_flux_ext_dot_n);
307 
308  std::array<real,nstate> auxiliary_flux_dot_n = phys_flux_avg_dot_n;
309 
310  if (artificial_diss_coeff_int > 1e-13 || artificial_diss_coeff_ext > 1e-13) {
311  ArrayTensor1 artificial_phys_flux_int, artificial_phys_flux_ext;
312 
313  // {{A*grad_u}}
314  artificial_phys_flux_int = artificial_dissip->calc_artificial_dissipation_flux (soln_int, soln_grad_int, artificial_diss_coeff_int);
315  artificial_phys_flux_ext = artificial_dissip->calc_artificial_dissipation_flux (soln_ext, soln_grad_ext, artificial_diss_coeff_ext);
316  ArrayTensor1 artificial_phys_flux_avg = array_average<nstate,dim,real>(artificial_phys_flux_int, artificial_phys_flux_ext);
317 
318  for (int s=0; s<nstate; s++) {
319  real arti = 0.0;
320  for (int d=0; d<dim; ++d) {
321  arti += artificial_phys_flux_avg[s][d] * normal_int[d];
322  }
323  auxiliary_flux_dot_n[s] += arti;
324  }
325  }
326 
327  return auxiliary_flux_dot_n;
328 }
329 
330 #if PHILIP_SPECIES==1
331  // Define a sequence of indices representing the range [1, 6]
332  #define POSSIBLE_NSTATE (1)(2)(3)(4)(5)(6)
333 
334  // Define a macro to instantiate functions for a specific nstate
335  #define INSTANTIATE_FOR_NSTATE(r, data, nstate) \
336  template class NumericalFluxDissipative<PHILIP_DIM, PHILIP_SPECIES, nstate, double>; \
337  template class NumericalFluxDissipative<PHILIP_DIM, PHILIP_SPECIES, nstate, FadType>; \
338  template class NumericalFluxDissipative<PHILIP_DIM, PHILIP_SPECIES, nstate, RadType>; \
339  template class NumericalFluxDissipative<PHILIP_DIM, PHILIP_SPECIES, nstate, FadFadType>; \
340  template class NumericalFluxDissipative<PHILIP_DIM, PHILIP_SPECIES, nstate, RadFadType>; \
341  \
342  template class SymmetricInternalPenalty<PHILIP_DIM, PHILIP_SPECIES, nstate, double>; \
343  template class SymmetricInternalPenalty<PHILIP_DIM, PHILIP_SPECIES, nstate, FadType>; \
344  template class SymmetricInternalPenalty<PHILIP_DIM, PHILIP_SPECIES, nstate, RadType>; \
345  template class SymmetricInternalPenalty<PHILIP_DIM, PHILIP_SPECIES, nstate, FadFadType>; \
346  template class SymmetricInternalPenalty<PHILIP_DIM, PHILIP_SPECIES, nstate, RadFadType>; \
347  \
348  template class BassiRebay2<PHILIP_DIM, PHILIP_SPECIES, nstate, double>; \
349  template class BassiRebay2<PHILIP_DIM, PHILIP_SPECIES, nstate, FadType>; \
350  template class BassiRebay2<PHILIP_DIM, PHILIP_SPECIES, nstate, RadType>; \
351  template class BassiRebay2<PHILIP_DIM, PHILIP_SPECIES, nstate, FadFadType>; \
352  template class BassiRebay2<PHILIP_DIM, PHILIP_SPECIES, nstate, RadFadType>; \
353  \
354  template class CentralViscousNumericalFlux<PHILIP_DIM, PHILIP_SPECIES, nstate, double>; \
355  template class CentralViscousNumericalFlux<PHILIP_DIM, PHILIP_SPECIES, nstate, FadType>; \
356  template class CentralViscousNumericalFlux<PHILIP_DIM, PHILIP_SPECIES, nstate, RadType>; \
357  template class CentralViscousNumericalFlux<PHILIP_DIM, PHILIP_SPECIES, nstate, FadFadType>; \
358  template class CentralViscousNumericalFlux<PHILIP_DIM, PHILIP_SPECIES, nstate, RadFadType>;
359  BOOST_PP_SEQ_FOR_EACH(INSTANTIATE_FOR_NSTATE, _, POSSIBLE_NSTATE)
360 #else
361  #define POSSIBLE_TYPE (double)(FadType)(RadType)(FadFadType)(RadFadType)
362  #define INSTANTIATE_TYPES(r, data, type) \
363  template class NumericalFluxDissipative<PHILIP_DIM, PHILIP_SPECIES, PHILIP_DIM+PHILIP_SPECIES+1, type>; \
364  template class SymmetricInternalPenalty<PHILIP_DIM, PHILIP_SPECIES, PHILIP_DIM+PHILIP_SPECIES+1, type>; \
365  template class BassiRebay2<PHILIP_DIM, PHILIP_SPECIES, PHILIP_DIM+PHILIP_SPECIES+1, type>; \
366  template class CentralViscousNumericalFlux<PHILIP_DIM, PHILIP_SPECIES, PHILIP_DIM+PHILIP_SPECIES+1, type>;
367  BOOST_PP_SEQ_FOR_EACH(INSTANTIATE_TYPES, _, POSSIBLE_TYPE)
368 #endif
369 } // NumericalFlux namespace
370 } // PHiLiP namespace
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 override
Evaluate auxiliary flux at the interface.
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 override
Evaluate auxiliary flux at the interface.
Files for the baseline physics.
Definition: ADTypes.hpp:10
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 override
Evaluate solution flux at the interface.
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 override
Evaluate solution flux at the interface.
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.
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 override
Evaluate solution flux at the interface.