[P]arallel [Hi]gh-order [Li]brary for [P]DEs  Latest
Parallel High-Order Library for PDEs through hp-adaptive Discontinuous Galerkin methods
strong_dg.hpp
1 #ifndef __STRONG_DISCONTINUOUSGALERKIN_H__
2 #define __STRONG_DISCONTINUOUSGALERKIN_H__
3 
4 #include "dg_base_state.hpp"
5 
6 namespace PHiLiP {
7 
9 /* Contains the functions that need to be templated on the number of state variables.
10  */
11 #if PHILIP_DIM==1 // dealii::parallel::distributed::Triangulation<dim> does not work for 1D
12 template <int dim, int nspecies, int nstate, typename real, typename MeshType = dealii::Triangulation<dim>>
13 #else
14 template <int dim, int nspecies, int nstate, typename real, typename MeshType = dealii::parallel::distributed::Triangulation<dim>>
15 #endif
16 class DGStrong: public DGBaseState<dim, nspecies, nstate, real, MeshType>
17 {
18 protected:
21 
22 public:
24  DGStrong(
25  const Parameters::AllParameters *const parameters_input,
26  const unsigned int degree,
27  const unsigned int max_degree_input,
28  const unsigned int grid_degree_input,
29  const std::shared_ptr<Triangulation> triangulation_input);
30 
33  const unsigned int poly_degree_max_large_scales;
34  const bool using_wall_model;
35  const bool wall_model_input_from_second_element;
37 
39 
43  void assemble_auxiliary_residual (const bool compute_dRdW, const bool compute_dRdX, const bool compute_d2R);
44 
46  void allocate_dual_vector (const bool compute_d2R);
47 
48 private:
50  template<typename DoFCellAccessorType1, typename DoFCellAccessorType2>
52  const DoFCellAccessorType1 &current_cell,
53  const DoFCellAccessorType2 &current_metric_cell,
54  std::vector<dealii::LinearAlgebra::distributed::Vector<double>> &rhs);
55 
56 protected:
58  template <typename adtype>
60  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
61  const dealii::types::global_dof_index current_cell_index,
62  const std::vector<adtype> &soln_coeffs,
63  const dealii::Tensor<1,dim,std::vector<adtype>> &aux_soln_coeffs,
64  const std::vector<adtype> &metric_coeffs,
65  const std::vector<real> &local_dual,
66  const std::vector<dealii::types::global_dof_index> &soln_dofs_indices,
67  const std::vector<dealii::types::global_dof_index> &metric_dofs_indices,
68  const unsigned int poly_degree,
69  const unsigned int grid_degree,
73  OPERATOR::local_basis_stiffness<dim,2*dim> &flux_basis_stiffness,
74  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_int,
75  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_ext,
78  std::array<std::vector<adtype>,dim> &mapping_support_points,
79  dealii::hp::FEValues<dim,dim> &/*fe_values_collection_volume*/,
80  dealii::hp::FEValues<dim,dim> &/*fe_values_collection_volume_lagrange*/,
81  const dealii::FESystem<dim,dim> &/*fe_soln*/,
82  std::vector<adtype> &rhs,
83  dealii::Tensor<1,dim,std::vector<adtype>> &local_auxiliary_RHS,
84  const bool compute_auxiliary_right_hand_side,
85  adtype &dual_dot_residual);
86 
89  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
90  const dealii::types::global_dof_index current_cell_index,
91  const std::vector<double> &soln_coeffs,
92  const dealii::Tensor<1,dim,std::vector<double>> &aux_soln_coeffs,
93  const std::vector<double> &metric_coeffs,
94  const std::vector<real> &local_dual,
95  const std::vector<dealii::types::global_dof_index> &soln_dofs_indices,
96  const std::vector<dealii::types::global_dof_index> &metric_dofs_indices,
97  const unsigned int poly_degree,
98  const unsigned int grid_degree,
101  OPERATOR::local_basis_stiffness<dim,2*dim> &flux_basis_stiffness,
102  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_int,
103  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_ext,
106  std::array<std::vector<double>,dim> &mapping_support_points,
107  dealii::hp::FEValues<dim,dim> &fe_values_collection_volume,
108  dealii::hp::FEValues<dim,dim> &fe_values_collection_volume_lagrange,
109  const dealii::FESystem<dim,dim> &fe_soln,
110  std::vector<double> &rhs,
111  dealii::Tensor<1,dim,std::vector<double>> &local_auxiliary_RHS,
112  const bool compute_auxiliary_right_hand_side,
113  double &dual_dot_residual) override
114  {
115  assemble_volume_term_and_build_operators_ad_templated<double>(
116  cell,
117  current_cell_index,
118  soln_coeffs,
119  aux_soln_coeffs,
120  metric_coeffs,
121  local_dual,
122  soln_dofs_indices,
123  metric_dofs_indices,
124  poly_degree,
125  grid_degree,
127  soln_basis,
128  flux_basis,
129  flux_basis_stiffness,
130  soln_basis_projection_oper_int,
131  soln_basis_projection_oper_ext,
132  metric_oper,
133  mapping_basis,
134  mapping_support_points,
135  fe_values_collection_volume,
136  fe_values_collection_volume_lagrange,
137  fe_soln,
138  rhs,
139  local_auxiliary_RHS,
140  compute_auxiliary_right_hand_side,
141  dual_dot_residual);
142  }
143 
146  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
147  const dealii::types::global_dof_index current_cell_index,
148  const std::vector<codi_JacobianComputationType> &soln_coeffs,
149  const dealii::Tensor<1,dim,std::vector<codi_JacobianComputationType>> &aux_soln_coeffs,
150  const std::vector<codi_JacobianComputationType> &metric_coeffs,
151  const std::vector<real> &local_dual,
152  const std::vector<dealii::types::global_dof_index> &soln_dofs_indices,
153  const std::vector<dealii::types::global_dof_index> &metric_dofs_indices,
154  const unsigned int poly_degree,
155  const unsigned int grid_degree,
158  OPERATOR::local_basis_stiffness<dim,2*dim> &flux_basis_stiffness,
159  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_int,
160  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_ext,
163  std::array<std::vector<codi_JacobianComputationType>,dim> &mapping_support_points,
164  dealii::hp::FEValues<dim,dim> &fe_values_collection_volume,
165  dealii::hp::FEValues<dim,dim> &fe_values_collection_volume_lagrange,
166  const dealii::FESystem<dim,dim> &fe_soln,
167  std::vector<codi_JacobianComputationType> &rhs,
168  dealii::Tensor<1,dim,std::vector<codi_JacobianComputationType>> &local_auxiliary_RHS,
169  const bool compute_auxiliary_right_hand_side,
170  codi_JacobianComputationType &dual_dot_residual) override
171  {
172  assemble_volume_term_and_build_operators_ad_templated<codi_JacobianComputationType>(
173  cell,
174  current_cell_index,
175  soln_coeffs,
176  aux_soln_coeffs,
177  metric_coeffs,
178  local_dual,
179  soln_dofs_indices,
180  metric_dofs_indices,
181  poly_degree,
182  grid_degree,
184  soln_basis,
185  flux_basis,
186  flux_basis_stiffness,
187  soln_basis_projection_oper_int,
188  soln_basis_projection_oper_ext,
189  metric_oper,
190  mapping_basis,
191  mapping_support_points,
192  fe_values_collection_volume,
193  fe_values_collection_volume_lagrange,
194  fe_soln,
195  rhs,
196  local_auxiliary_RHS,
197  compute_auxiliary_right_hand_side,
198  dual_dot_residual);
199  }
200 
203  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
204  const dealii::types::global_dof_index current_cell_index,
205  const std::vector<codi_HessianComputationType> &soln_coeffs,
206  const dealii::Tensor<1,dim,std::vector<codi_HessianComputationType>> &aux_soln_coeffs,
207  const std::vector<codi_HessianComputationType> &metric_coeffs,
208  const std::vector<real> &local_dual,
209  const std::vector<dealii::types::global_dof_index> &soln_dofs_indices,
210  const std::vector<dealii::types::global_dof_index> &metric_dofs_indices,
211  const unsigned int poly_degree,
212  const unsigned int grid_degree,
215  OPERATOR::local_basis_stiffness<dim,2*dim> &flux_basis_stiffness,
216  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_int,
217  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_ext,
220  std::array<std::vector<codi_HessianComputationType>,dim> &mapping_support_points,
221  dealii::hp::FEValues<dim,dim> &fe_values_collection_volume,
222  dealii::hp::FEValues<dim,dim> &fe_values_collection_volume_lagrange,
223  const dealii::FESystem<dim,dim> &fe_soln,
224  std::vector<codi_HessianComputationType> &rhs,
225  dealii::Tensor<1,dim,std::vector<codi_HessianComputationType>> &local_auxiliary_RHS,
226  const bool compute_auxiliary_right_hand_side,
227  codi_HessianComputationType &dual_dot_residual) override
228  {
229  assemble_volume_term_and_build_operators_ad_templated<codi_HessianComputationType>(
230  cell,
231  current_cell_index,
232  soln_coeffs,
233  aux_soln_coeffs,
234  metric_coeffs,
235  local_dual,
236  soln_dofs_indices,
237  metric_dofs_indices,
238  poly_degree,
239  grid_degree,
241  soln_basis,
242  flux_basis,
243  flux_basis_stiffness,
244  soln_basis_projection_oper_int,
245  soln_basis_projection_oper_ext,
246  metric_oper,
247  mapping_basis,
248  mapping_support_points,
249  fe_values_collection_volume,
250  fe_values_collection_volume_lagrange,
251  fe_soln,
252  rhs,
253  local_auxiliary_RHS,
254  compute_auxiliary_right_hand_side,
255  dual_dot_residual);
256  }
257 
259  template <typename adtype>
261  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
262  const dealii::types::global_dof_index current_cell_index,
263  const std::vector<adtype> &soln_coeffs,
264  const dealii::Tensor<1,dim,std::vector<adtype>> &aux_soln_coeffs,
265  const std::vector<adtype> &metric_coeffs,
266  const std::vector<real> &local_dual,
267  const unsigned int face_number,
268  const unsigned int boundary_id,
272  const unsigned int poly_degree,
273  const unsigned int grid_degree,
276  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_int,
279  std::array<std::vector<adtype>,dim> &mapping_support_points,
280  dealii::hp::FEFaceValues<dim,dim> &/*fe_values_collection_face_int*/,
281  const dealii::FESystem<dim,dim> &/*fe_soln*/,
282  const real penalty,
283  std::vector<adtype> &rhs,
284  dealii::Tensor<1,dim,std::vector<adtype>> &local_auxiliary_RHS,
285  const bool compute_auxiliary_right_hand_side,
286  adtype &dual_dot_residual);
287 
290  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
291  const dealii::types::global_dof_index current_cell_index,
292  const std::vector<double> &soln_coeffs,
293  const dealii::Tensor<1,dim,std::vector<double>> &aux_soln_coeffs,
294  const std::vector<double> &metric_coeffs,
295  const std::vector<real> &local_dual,
296  const unsigned int face_number,
297  const unsigned int boundary_id,
298  const unsigned int poly_degree,
299  const unsigned int grid_degree,
302  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_int,
305  std::array<std::vector<double>,dim> &mapping_support_points,
306  dealii::hp::FEFaceValues<dim,dim> &fe_values_collection_face_int,
307  const dealii::FESystem<dim,dim> &fe_soln,
308  const real penalty,
309  std::vector<double> &rhs,
310  dealii::Tensor<1,dim,std::vector<double>> &local_auxiliary_RHS,
311  const bool compute_auxiliary_right_hand_side,
312  double &dual_dot_residual) override
313  {
314  assemble_boundary_term_and_build_operators_ad_templated<double>(
315  cell,
316  current_cell_index,
317  soln_coeffs,
318  aux_soln_coeffs,
319  metric_coeffs,
320  local_dual,
321  face_number,
322  boundary_id,
326  poly_degree,
327  grid_degree,
328  soln_basis,
329  flux_basis,
330  soln_basis_projection_oper_int,
331  metric_oper,
332  mapping_basis,
333  mapping_support_points,
334  fe_values_collection_face_int,
335  fe_soln,
336  penalty,
337  rhs,
338  local_auxiliary_RHS,
339  compute_auxiliary_right_hand_side,
340  dual_dot_residual);
341  }
342 
345  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
346  const dealii::types::global_dof_index current_cell_index,
347  const std::vector<codi_JacobianComputationType> &soln_coeffs,
348  const dealii::Tensor<1,dim,std::vector<codi_JacobianComputationType>> &aux_soln_coeffs,
349  const std::vector<codi_JacobianComputationType> &metric_coeffs,
350  const std::vector<real> &local_dual,
351  const unsigned int face_number,
352  const unsigned int boundary_id,
353  const unsigned int poly_degree,
354  const unsigned int grid_degree,
357  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_int,
360  std::array<std::vector<codi_JacobianComputationType>,dim> &mapping_support_points,
361  dealii::hp::FEFaceValues<dim,dim> &fe_values_collection_face_int,
362  const dealii::FESystem<dim,dim> &fe_soln,
363  const real penalty,
364  std::vector<codi_JacobianComputationType> &rhs,
365  dealii::Tensor<1,dim,std::vector<codi_JacobianComputationType>> &local_auxiliary_RHS,
366  const bool compute_auxiliary_right_hand_side,
367  codi_JacobianComputationType &dual_dot_residual) override
368  {
369  assemble_boundary_term_and_build_operators_ad_templated<codi_JacobianComputationType>(
370  cell,
371  current_cell_index,
372  soln_coeffs,
373  aux_soln_coeffs,
374  metric_coeffs,
375  local_dual,
376  face_number,
377  boundary_id,
381  poly_degree,
382  grid_degree,
383  soln_basis,
384  flux_basis,
385  soln_basis_projection_oper_int,
386  metric_oper,
387  mapping_basis,
388  mapping_support_points,
389  fe_values_collection_face_int,
390  fe_soln,
391  penalty,
392  rhs,
393  local_auxiliary_RHS,
394  compute_auxiliary_right_hand_side,
395  dual_dot_residual);
396  }
397 
400  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
401  const dealii::types::global_dof_index current_cell_index,
402  const std::vector<codi_HessianComputationType> &soln_coeffs,
403  const dealii::Tensor<1,dim,std::vector<codi_HessianComputationType>> &aux_soln_coeffs,
404  const std::vector<codi_HessianComputationType> &metric_coeffs,
405  const std::vector<real> &local_dual,
406  const unsigned int face_number,
407  const unsigned int boundary_id,
408  const unsigned int poly_degree,
409  const unsigned int grid_degree,
412  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_int,
415  std::array<std::vector<codi_HessianComputationType>,dim> &mapping_support_points,
416  dealii::hp::FEFaceValues<dim,dim> &fe_values_collection_face_int,
417  const dealii::FESystem<dim,dim> &fe_soln,
418  const real penalty,
419  std::vector<codi_HessianComputationType> &rhs,
420  dealii::Tensor<1,dim,std::vector<codi_HessianComputationType>> &local_auxiliary_RHS,
421  const bool compute_auxiliary_right_hand_side,
422  codi_HessianComputationType &dual_dot_residual) override
423  {
424  assemble_boundary_term_and_build_operators_ad_templated<codi_HessianComputationType>(
425  cell,
426  current_cell_index,
427  soln_coeffs,
428  aux_soln_coeffs,
429  metric_coeffs,
430  local_dual,
431  face_number,
432  boundary_id,
436  poly_degree,
437  grid_degree,
438  soln_basis,
439  flux_basis,
440  soln_basis_projection_oper_int,
441  metric_oper,
442  mapping_basis,
443  mapping_support_points,
444  fe_values_collection_face_int,
445  fe_soln,
446  penalty,
447  rhs,
448  local_auxiliary_RHS,
449  compute_auxiliary_right_hand_side,
450  dual_dot_residual);
451  }
452 
454  template <typename adtype>
456  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
457  typename dealii::DoFHandler<dim>::active_cell_iterator neighbor_cell,
458  const dealii::types::global_dof_index current_cell_index,
459  const dealii::types::global_dof_index neighbor_cell_index,
460  const unsigned int iface,
461  const unsigned int neighbor_iface,
462  const std::vector<adtype> &soln_coeffs_int,
463  const std::vector<adtype> &soln_coeffs_ext,
464  const dealii::Tensor<1,dim,std::vector<adtype>> &aux_soln_coeffs_int,
465  const dealii::Tensor<1,dim,std::vector<adtype>> &aux_soln_coeffs_ext,
466  const std::vector<adtype> &metric_coeff_int,
467  const std::vector<adtype> &metric_coeff_ext,
468  const std::vector< double > &dual_int,
469  const std::vector< double > &dual_ext,
470  const unsigned int poly_degree_int,
471  const unsigned int poly_degree_ext,
472  const unsigned int grid_degree_int,
473  const unsigned int grid_degree_ext,
474  OPERATOR::basis_functions<dim,2*dim> &soln_basis_int,
475  OPERATOR::basis_functions<dim,2*dim> &soln_basis_ext,
476  OPERATOR::basis_functions<dim,2*dim> &flux_basis_int,
477  OPERATOR::basis_functions<dim,2*dim> &flux_basis_ext,
478  OPERATOR::local_basis_stiffness<dim,2*dim> &flux_basis_stiffness,
479  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_int,
480  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_ext,
484  std::array<std::vector<adtype>,dim> &mapping_support_points,
488  dealii::hp::FEFaceValues<dim,dim> &/*fe_values_collection_face_int*/,
489  dealii::hp::FEFaceValues<dim,dim> &/*fe_values_collection_face_ext*/,
490  dealii::hp::FESubfaceValues<dim,dim> &/*fe_values_collection_subface*/,
491  const dealii::FESystem<dim,dim> &/*fe_int*/,
492  const dealii::FESystem<dim,dim> &/*fe_ext*/,
493  const real penalty,
494  std::vector<adtype> &rhs_int,
495  std::vector<adtype> &rhs_ext,
496  dealii::Tensor<1,dim,std::vector<adtype>> &aux_rhs_int,
497  dealii::Tensor<1,dim,std::vector<adtype>> &aux_rhs_ext,
498  const bool compute_auxiliary_right_hand_side,
499  adtype &dual_dot_residual,
500  const bool /*is_a_subface*/,
501  const unsigned int /*neighbor_i_subface*/);
502 
505  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
506  typename dealii::DoFHandler<dim>::active_cell_iterator neighbor_cell,
507  const dealii::types::global_dof_index current_cell_index,
508  const dealii::types::global_dof_index neighbor_cell_index,
509  const unsigned int iface,
510  const unsigned int neighbor_iface,
511  const std::vector<double> &soln_coeff_int,
512  const std::vector<double> &soln_coeff_ext,
513  const dealii::Tensor<1,dim,std::vector<double>> &aux_soln_coeff_int,
514  const dealii::Tensor<1,dim,std::vector<double>> &aux_soln_coeff_ext,
515  const std::vector<double> &metric_coeff_int,
516  const std::vector<double> &metric_coeff_ext,
517  const std::vector< double > &dual_int,
518  const std::vector< double > &dual_ext,
519  const unsigned int poly_degree_int,
520  const unsigned int poly_degree_ext,
521  const unsigned int grid_degree_int,
522  const unsigned int grid_degree_ext,
523  OPERATOR::basis_functions<dim,2*dim> &soln_basis_int,
524  OPERATOR::basis_functions<dim,2*dim> &soln_basis_ext,
525  OPERATOR::basis_functions<dim,2*dim> &flux_basis_int,
526  OPERATOR::basis_functions<dim,2*dim> &flux_basis_ext,
527  OPERATOR::local_basis_stiffness<dim,2*dim> &flux_basis_stiffness,
528  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_int,
529  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_ext,
533  std::array<std::vector<double>,dim> &mapping_support_points,
534  dealii::hp::FEFaceValues<dim,dim> &fe_values_collection_face_int,
535  dealii::hp::FEFaceValues<dim,dim> &fe_values_collection_face_ext,
536  dealii::hp::FESubfaceValues<dim,dim> &fe_values_collection_subface,
537  const dealii::FESystem<dim,dim> &fe_int,
538  const dealii::FESystem<dim,dim> &fe_ext,
539  const real penalty,
540  std::vector<double> &rhs_int,
541  std::vector<double> &rhs_ext,
542  dealii::Tensor<1,dim,std::vector<double>> &aux_rhs_int,
543  dealii::Tensor<1,dim,std::vector<double>> &aux_rhs_ext,
544  const bool compute_auxiliary_right_hand_side,
545  double &dual_dot_residual,
546  const bool /*compute_dRdW*/, const bool /*compute_dRdX*/, const bool /*compute_d2R*/,
547  const bool is_a_subface,
548  const unsigned int neighbor_i_subface) override
549  {
550  assemble_face_term_and_build_operators_ad_templated<double>(
551  cell,
552  neighbor_cell,
553  current_cell_index,
554  neighbor_cell_index,
555  iface,
556  neighbor_iface,
557  soln_coeff_int,
558  soln_coeff_ext,
559  aux_soln_coeff_int,
560  aux_soln_coeff_ext,
561  metric_coeff_int,
562  metric_coeff_ext,
563  dual_int,
564  dual_ext,
565  poly_degree_int,
566  poly_degree_ext,
567  grid_degree_int,
568  grid_degree_ext,
569  soln_basis_int,
570  soln_basis_ext,
571  flux_basis_int,
572  flux_basis_ext,
573  flux_basis_stiffness,
574  soln_basis_projection_oper_int,
575  soln_basis_projection_oper_ext,
576  metric_oper_int,
577  metric_oper_ext,
578  mapping_basis,
579  mapping_support_points,
583  fe_values_collection_face_int,
584  fe_values_collection_face_ext,
585  fe_values_collection_subface,
586  fe_int,
587  fe_ext,
588  penalty,
589  rhs_int,
590  rhs_ext,
591  aux_rhs_int,
592  aux_rhs_ext,
593  compute_auxiliary_right_hand_side,
594  dual_dot_residual,
595  is_a_subface,
596  neighbor_i_subface);
597  }
598 
601  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
602  typename dealii::DoFHandler<dim>::active_cell_iterator neighbor_cell,
603  const dealii::types::global_dof_index current_cell_index,
604  const dealii::types::global_dof_index neighbor_cell_index,
605  const unsigned int iface,
606  const unsigned int neighbor_iface,
607  const std::vector<codi_JacobianComputationType> &soln_coeff_int,
608  const std::vector<codi_JacobianComputationType> &soln_coeff_ext,
609  const dealii::Tensor<1,dim,std::vector<codi_JacobianComputationType>> &aux_soln_coeff_int,
610  const dealii::Tensor<1,dim,std::vector<codi_JacobianComputationType>> &aux_soln_coeff_ext,
611  const std::vector<codi_JacobianComputationType> &metric_coeff_int,
612  const std::vector<codi_JacobianComputationType> &metric_coeff_ext,
613  const std::vector< double > &dual_int,
614  const std::vector< double > &dual_ext,
615  const unsigned int poly_degree_int,
616  const unsigned int poly_degree_ext,
617  const unsigned int grid_degree_int,
618  const unsigned int grid_degree_ext,
619  OPERATOR::basis_functions<dim,2*dim> &soln_basis_int,
620  OPERATOR::basis_functions<dim,2*dim> &soln_basis_ext,
621  OPERATOR::basis_functions<dim,2*dim> &flux_basis_int,
622  OPERATOR::basis_functions<dim,2*dim> &flux_basis_ext,
623  OPERATOR::local_basis_stiffness<dim,2*dim> &flux_basis_stiffness,
624  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_int,
625  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_ext,
629  std::array<std::vector<codi_JacobianComputationType>,dim> &mapping_support_points,
630  dealii::hp::FEFaceValues<dim,dim> &fe_values_collection_face_int,
631  dealii::hp::FEFaceValues<dim,dim> &fe_values_collection_face_ext,
632  dealii::hp::FESubfaceValues<dim,dim> &fe_values_collection_subface,
633  const dealii::FESystem<dim,dim> &fe_int,
634  const dealii::FESystem<dim,dim> &fe_ext,
635  const real penalty,
636  std::vector<codi_JacobianComputationType> &rhs_int,
637  std::vector<codi_JacobianComputationType> &rhs_ext,
638  dealii::Tensor<1,dim,std::vector<codi_JacobianComputationType>> &aux_rhs_int,
639  dealii::Tensor<1,dim,std::vector<codi_JacobianComputationType>> &aux_rhs_ext,
640  const bool compute_auxiliary_right_hand_side,
641  codi_JacobianComputationType &dual_dot_residual,
642  const bool /*compute_dRdW*/, const bool /*compute_dRdX*/, const bool /*compute_d2R*/,
643  const bool is_a_subface,
644  const unsigned int neighbor_i_subface) override
645  {
646  assemble_face_term_and_build_operators_ad_templated<codi_JacobianComputationType>(
647  cell,
648  neighbor_cell,
649  current_cell_index,
650  neighbor_cell_index,
651  iface,
652  neighbor_iface,
653  soln_coeff_int,
654  soln_coeff_ext,
655  aux_soln_coeff_int,
656  aux_soln_coeff_ext,
657  metric_coeff_int,
658  metric_coeff_ext,
659  dual_int,
660  dual_ext,
661  poly_degree_int,
662  poly_degree_ext,
663  grid_degree_int,
664  grid_degree_ext,
665  soln_basis_int,
666  soln_basis_ext,
667  flux_basis_int,
668  flux_basis_ext,
669  flux_basis_stiffness,
670  soln_basis_projection_oper_int,
671  soln_basis_projection_oper_ext,
672  metric_oper_int,
673  metric_oper_ext,
674  mapping_basis,
675  mapping_support_points,
679  fe_values_collection_face_int,
680  fe_values_collection_face_ext,
681  fe_values_collection_subface,
682  fe_int,
683  fe_ext,
684  penalty,
685  rhs_int,
686  rhs_ext,
687  aux_rhs_int,
688  aux_rhs_ext,
689  compute_auxiliary_right_hand_side,
690  dual_dot_residual,
691  is_a_subface,
692  neighbor_i_subface);
693  }
694 
697  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
698  typename dealii::DoFHandler<dim>::active_cell_iterator neighbor_cell,
699  const dealii::types::global_dof_index current_cell_index,
700  const dealii::types::global_dof_index neighbor_cell_index,
701  const unsigned int iface,
702  const unsigned int neighbor_iface,
703  const std::vector<codi_HessianComputationType> &soln_coeff_int,
704  const std::vector<codi_HessianComputationType> &soln_coeff_ext,
705  const dealii::Tensor<1,dim,std::vector<codi_HessianComputationType>> &aux_soln_coeff_int,
706  const dealii::Tensor<1,dim,std::vector<codi_HessianComputationType>> &aux_soln_coeff_ext,
707  const std::vector<codi_HessianComputationType> &metric_coeff_int,
708  const std::vector<codi_HessianComputationType> &metric_coeff_ext,
709  const std::vector< double > &dual_int,
710  const std::vector< double > &dual_ext,
711  const unsigned int poly_degree_int,
712  const unsigned int poly_degree_ext,
713  const unsigned int grid_degree_int,
714  const unsigned int grid_degree_ext,
715  OPERATOR::basis_functions<dim,2*dim> &soln_basis_int,
716  OPERATOR::basis_functions<dim,2*dim> &soln_basis_ext,
717  OPERATOR::basis_functions<dim,2*dim> &flux_basis_int,
718  OPERATOR::basis_functions<dim,2*dim> &flux_basis_ext,
719  OPERATOR::local_basis_stiffness<dim,2*dim> &flux_basis_stiffness,
720  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_int,
721  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_ext,
725  std::array<std::vector<codi_HessianComputationType>,dim> &mapping_support_points,
726  dealii::hp::FEFaceValues<dim,dim> &fe_values_collection_face_int,
727  dealii::hp::FEFaceValues<dim,dim> &fe_values_collection_face_ext,
728  dealii::hp::FESubfaceValues<dim,dim> &fe_values_collection_subface,
729  const dealii::FESystem<dim,dim> &fe_int,
730  const dealii::FESystem<dim,dim> &fe_ext,
731  const real penalty,
732  std::vector<codi_HessianComputationType> &rhs_int,
733  std::vector<codi_HessianComputationType> &rhs_ext,
734  dealii::Tensor<1,dim,std::vector<codi_HessianComputationType>> &aux_rhs_int,
735  dealii::Tensor<1,dim,std::vector<codi_HessianComputationType>> &aux_rhs_ext,
736  const bool compute_auxiliary_right_hand_side,
737  codi_HessianComputationType &dual_dot_residual,
738  const bool /*compute_dRdW*/, const bool /*compute_dRdX*/, const bool /*compute_d2R*/,
739  const bool is_a_subface,
740  const unsigned int neighbor_i_subface) override
741  {
742  assemble_face_term_and_build_operators_ad_templated<codi_HessianComputationType>(
743  cell,
744  neighbor_cell,
745  current_cell_index,
746  neighbor_cell_index,
747  iface,
748  neighbor_iface,
749  soln_coeff_int,
750  soln_coeff_ext,
751  aux_soln_coeff_int,
752  aux_soln_coeff_ext,
753  metric_coeff_int,
754  metric_coeff_ext,
755  dual_int,
756  dual_ext,
757  poly_degree_int,
758  poly_degree_ext,
759  grid_degree_int,
760  grid_degree_ext,
761  soln_basis_int,
762  soln_basis_ext,
763  flux_basis_int,
764  flux_basis_ext,
765  flux_basis_stiffness,
766  soln_basis_projection_oper_int,
767  soln_basis_projection_oper_ext,
768  metric_oper_int,
769  metric_oper_ext,
770  mapping_basis,
771  mapping_support_points,
775  fe_values_collection_face_int,
776  fe_values_collection_face_ext,
777  fe_values_collection_subface,
778  fe_int,
779  fe_ext,
780  penalty,
781  rhs_int,
782  rhs_ext,
783  aux_rhs_int,
784  aux_rhs_ext,
785  compute_auxiliary_right_hand_side,
786  dual_dot_residual,
787  is_a_subface,
788  neighbor_i_subface);
789  }
790 
791 public:
793 
797  template <typename adtype>
799  const std::array<std::vector<adtype>,nstate> &soln_coeff,
800  const unsigned int poly_degree,
804  dealii::Tensor<1,dim,std::vector<adtype>> &local_auxiliary_RHS);
805 
806 protected:
808  template <typename adtype>
810  const unsigned int iface,
811  const dealii::types::global_dof_index current_cell_index,
812  std::vector<bool> face_orientation,
813  const std::array<std::vector<adtype>,nstate> &soln_coeff,
814  const unsigned int poly_degree,
815  const unsigned int boundary_id,
820  dealii::Tensor<1,dim,std::vector<adtype>> &local_auxiliary_RHS);
821 
822 public:
824 
829  template <typename adtype>
831  const unsigned int iface,
832  const unsigned int neighbor_iface,
833  const dealii::types::global_dof_index current_cell_index,
834  const dealii::types::global_dof_index neighbor_cell_index,
835  std::vector<bool> face_orientation_int,
836  std::vector<bool> face_orientation_ext,
837  const std::array<std::vector<adtype>,nstate> &soln_coeff_int,
838  const std::array<std::vector<adtype>,nstate> &soln_coeff_ext,
839  const unsigned int poly_degree_int,
840  const unsigned int poly_degree_ext,
841  OPERATOR::basis_functions<dim,2*dim> &soln_basis_int,
842  OPERATOR::basis_functions<dim,2*dim> &soln_basis_ext,
846  dealii::Tensor<1,dim,std::vector<adtype>> &local_auxiliary_RHS_int,
847  dealii::Tensor<1,dim,std::vector<adtype>> &local_auxiliary_RHS_ext);
848 
849 protected:
851 
868  template <typename adtype>
870  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
871  const dealii::types::global_dof_index current_cell_index,
872  const std::array<std::vector<adtype>,nstate> &soln_coeff,
873  const std::array<dealii::Tensor<1,dim,std::vector<adtype>>,nstate> &aux_soln_coeff,
874  const unsigned int poly_degree,
877  OPERATOR::local_basis_stiffness<dim,2*dim> &flux_basis_stiffness,
878  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper,
881  std::vector<adtype> &local_rhs_int_cell);
882 
884  template <typename adtype>
886  typename dealii::DoFHandler<dim>::active_cell_iterator current_cell,
887  const unsigned int iface,
888  const dealii::types::global_dof_index current_cell_index,
889  std::vector<bool> face_orientation,
890  const std::array<std::vector<adtype>,nstate> &soln_coeff,
891  const std::array<dealii::Tensor<1,dim,std::vector<adtype>>,nstate> &aux_soln_coeff,
892  const unsigned int boundary_id,
893  const unsigned int poly_degree,
894  const real penalty,
897  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper,
902  std::vector<adtype> &local_rhs_cell);
903 
905 
913  template <typename adtype>
915  const unsigned int iface,
916  const unsigned int neighbor_iface,
917  const dealii::types::global_dof_index current_cell_index,
918  const dealii::types::global_dof_index neighbor_cell_index,
919  std::vector<bool> face_orientation_int,
920  std::vector<bool> face_orientation_ext,
921  const std::array<std::vector<adtype>,nstate> &soln_coeff_int,
922  const std::array<std::vector<adtype>,nstate> &soln_coeff_ext,
923  const std::array<dealii::Tensor<1,dim,std::vector<adtype>>,nstate> &aux_soln_coeff_int,
924  const std::array<dealii::Tensor<1,dim,std::vector<adtype>>,nstate> &aux_soln_coeff_ext,
925  const unsigned int poly_degree_int,
926  const unsigned int poly_degree_ext,
927  const real penalty,
928  OPERATOR::basis_functions<dim,2*dim> &soln_basis_int,
929  OPERATOR::basis_functions<dim,2*dim> &soln_basis_ext,
930  OPERATOR::basis_functions<dim,2*dim> &flux_basis_int,
931  OPERATOR::basis_functions<dim,2*dim> &flux_basis_ext,
932  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_int,
933  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_ext,
939  std::vector<adtype> &local_rhs_int_cell,
940  std::vector<adtype> &local_rhs_ext_cell);
941 
942 protected:
945  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
946  const dealii::types::global_dof_index current_cell_index,
947  const dealii::FEValues<dim,dim> &fe_values_volume,
948  const std::vector<dealii::types::global_dof_index> &current_dofs_indices,
949  const std::vector<dealii::types::global_dof_index> &metric_dof_indices,
950  const unsigned int poly_degree,
951  const unsigned int grid_degree,
952  dealii::Vector<real> &current_cell_rhs,
953  const dealii::FEValues<dim,dim> &fe_values_lagrange);
954 
955 
956 
958 
959 public:
961  template <typename adtype>
963  const unsigned int poly_degree,
964  const unsigned int grid_degree,
965  const std::vector<adtype> &metric_coeffs,
968  std::array<std::vector<adtype>,dim> &mapping_support_points);
971  const unsigned int poly_degree,
972  const unsigned int grid_degree,
973  const std::vector<double> &metric_coeffs,
976  std::array<std::vector<double>,dim> &mapping_support_points)
977  {
978  build_volume_metric_operators<double>(poly_degree, grid_degree, metric_coeffs, metric_oper, mapping_basis, mapping_support_points);
979  }
982  const unsigned int poly_degree,
983  const unsigned int grid_degree,
984  const std::vector<codi_JacobianComputationType> &metric_coeffs,
987  std::array<std::vector<codi_JacobianComputationType>,dim> &mapping_support_points)
988  {
989  build_volume_metric_operators<codi_JacobianComputationType>(poly_degree, grid_degree, metric_coeffs, metric_oper, mapping_basis, mapping_support_points);
990  }
993  const unsigned int poly_degree,
994  const unsigned int grid_degree,
995  const std::vector<codi_HessianComputationType> &metric_coeffs,
998  std::array<std::vector<codi_HessianComputationType>,dim> &mapping_support_points)
999  {
1000  build_volume_metric_operators<codi_HessianComputationType>(poly_degree, grid_degree, metric_coeffs, metric_oper, mapping_basis, mapping_support_points);
1001  }
1002 
1003 }; // end of DGStrong class
1004 
1005 } // PHiLiP namespace
1006 
1007 #endif
void assemble_face_term_strong(const unsigned int iface, const unsigned int neighbor_iface, const dealii::types::global_dof_index current_cell_index, const dealii::types::global_dof_index neighbor_cell_index, std::vector< bool > face_orientation_int, std::vector< bool > face_orientation_ext, const std::array< std::vector< adtype >, nstate > &soln_coeff_int, const std::array< std::vector< adtype >, nstate > &soln_coeff_ext, const std::array< dealii::Tensor< 1, dim, std::vector< adtype >>, nstate > &aux_soln_coeff_int, const std::array< dealii::Tensor< 1, dim, std::vector< adtype >>, nstate > &aux_soln_coeff_ext, const unsigned int poly_degree_int, const unsigned int poly_degree_ext, const real penalty, OPERATOR::basis_functions< dim, 2 *dim > &soln_basis_int, OPERATOR::basis_functions< dim, 2 *dim > &soln_basis_ext, OPERATOR::basis_functions< dim, 2 *dim > &flux_basis_int, OPERATOR::basis_functions< dim, 2 *dim > &flux_basis_ext, OPERATOR::vol_projection_operator< dim, 2 *dim > &soln_basis_projection_oper_int, OPERATOR::vol_projection_operator< dim, 2 *dim > &soln_basis_projection_oper_ext, OPERATOR::metric_operators< adtype, dim, 2 *dim > &metric_oper_int, OPERATOR::metric_operators< adtype, dim, 2 *dim > &metric_oper_ext, Physics::PhysicsBase< dim, nspecies, nstate, adtype > &pde_physics, const NumericalFlux::NumericalFluxConvective< dim, nspecies, nstate, adtype > &conv_num_flux, const NumericalFlux::NumericalFluxDissipative< dim, nspecies, nstate, adtype > &diss_num_flux, std::vector< adtype > &local_rhs_int_cell, std::vector< adtype > &local_rhs_ext_cell)
Strong form primary equation&#39;s facet right-hand-side.
Definition: strong_dg.cpp:2371
codi::RealReverseIndexVec< dimReverseAD > codi_JacobianComputationType
Reverse mode type for Jacobian computation using TapeHelper.
Definition: ADTypes.hpp:20
void assemble_face_term_auxiliary_equation(const unsigned int iface, const unsigned int neighbor_iface, const dealii::types::global_dof_index current_cell_index, const dealii::types::global_dof_index neighbor_cell_index, std::vector< bool > face_orientation_int, std::vector< bool > face_orientation_ext, const std::array< std::vector< adtype >, nstate > &soln_coeff_int, const std::array< std::vector< adtype >, nstate > &soln_coeff_ext, const unsigned int poly_degree_int, const unsigned int poly_degree_ext, OPERATOR::basis_functions< dim, 2 *dim > &soln_basis_int, OPERATOR::basis_functions< dim, 2 *dim > &soln_basis_ext, OPERATOR::metric_operators< adtype, dim, 2 *dim > &metric_oper_int, const Physics::PhysicsBase< dim, nspecies, nstate, adtype > &pde_physics, const NumericalFlux::NumericalFluxDissipative< dim, nspecies, nstate, adtype > &diss_num_flux, dealii::Tensor< 1, dim, std::vector< adtype >> &local_auxiliary_RHS_int, dealii::Tensor< 1, dim, std::vector< adtype >> &local_auxiliary_RHS_ext)
Evaluate the facet RHS for the auxiliary equation.
Definition: strong_dg.cpp:872
void assemble_volume_term_and_build_operators_ad(typename dealii::DoFHandler< dim >::active_cell_iterator cell, const dealii::types::global_dof_index current_cell_index, const std::vector< codi_HessianComputationType > &soln_coeffs, const dealii::Tensor< 1, dim, std::vector< codi_HessianComputationType >> &aux_soln_coeffs, const std::vector< codi_HessianComputationType > &metric_coeffs, const std::vector< real > &local_dual, const std::vector< dealii::types::global_dof_index > &soln_dofs_indices, const std::vector< dealii::types::global_dof_index > &metric_dofs_indices, const unsigned int poly_degree, const unsigned int grid_degree, OPERATOR::basis_functions< dim, 2 *dim > &soln_basis, OPERATOR::basis_functions< dim, 2 *dim > &flux_basis, OPERATOR::local_basis_stiffness< dim, 2 *dim > &flux_basis_stiffness, OPERATOR::vol_projection_operator< dim, 2 *dim > &soln_basis_projection_oper_int, OPERATOR::vol_projection_operator< dim, 2 *dim > &soln_basis_projection_oper_ext, OPERATOR::metric_operators< codi_HessianComputationType, dim, 2 *dim > &metric_oper, OPERATOR::mapping_shape_functions< dim, 2 *dim > &mapping_basis, std::array< std::vector< codi_HessianComputationType >, dim > &mapping_support_points, dealii::hp::FEValues< dim, dim > &fe_values_collection_volume, dealii::hp::FEValues< dim, dim > &fe_values_collection_volume_lagrange, const dealii::FESystem< dim, dim > &fe_soln, std::vector< codi_HessianComputationType > &rhs, dealii::Tensor< 1, dim, std::vector< codi_HessianComputationType >> &local_auxiliary_RHS, const bool compute_auxiliary_right_hand_side, codi_HessianComputationType &dual_dot_residual) override
Calls the function to assemble volume residual. For codi_HessianComputationType.
Definition: strong_dg.hpp:202
void assemble_volume_term_and_build_operators_ad_templated(typename dealii::DoFHandler< dim >::active_cell_iterator cell, const dealii::types::global_dof_index current_cell_index, const std::vector< adtype > &soln_coeffs, const dealii::Tensor< 1, dim, std::vector< adtype >> &aux_soln_coeffs, const std::vector< adtype > &metric_coeffs, const std::vector< real > &local_dual, const std::vector< dealii::types::global_dof_index > &soln_dofs_indices, const std::vector< dealii::types::global_dof_index > &metric_dofs_indices, const unsigned int poly_degree, const unsigned int grid_degree, Physics::PhysicsBase< dim, nspecies, nstate, adtype > &physics, OPERATOR::basis_functions< dim, 2 *dim > &soln_basis, OPERATOR::basis_functions< dim, 2 *dim > &flux_basis, OPERATOR::local_basis_stiffness< dim, 2 *dim > &flux_basis_stiffness, OPERATOR::vol_projection_operator< dim, 2 *dim > &soln_basis_projection_oper_int, OPERATOR::vol_projection_operator< dim, 2 *dim > &soln_basis_projection_oper_ext, OPERATOR::metric_operators< adtype, dim, 2 *dim > &metric_oper, OPERATOR::mapping_shape_functions< dim, 2 *dim > &mapping_basis, std::array< std::vector< adtype >, dim > &mapping_support_points, dealii::hp::FEValues< dim, dim > &, dealii::hp::FEValues< dim, dim > &, const dealii::FESystem< dim, dim > &, std::vector< adtype > &rhs, dealii::Tensor< 1, dim, std::vector< adtype >> &local_auxiliary_RHS, const bool compute_auxiliary_right_hand_side, adtype &dual_dot_residual)
Builds the necessary operators and assembles volume residual for either primary or auxiliary...
Definition: strong_dg.cpp:91
void assemble_volume_term_explicit(typename dealii::DoFHandler< dim >::active_cell_iterator cell, const dealii::types::global_dof_index current_cell_index, const dealii::FEValues< dim, dim > &fe_values_volume, const std::vector< dealii::types::global_dof_index > &current_dofs_indices, const std::vector< dealii::types::global_dof_index > &metric_dof_indices, const unsigned int poly_degree, const unsigned int grid_degree, dealii::Vector< real > &current_cell_rhs, const dealii::FEValues< dim, dim > &fe_values_lagrange)
Evaluate the integral over the cell volume.
Definition: strong_dg.cpp:3588
void build_volume_metric_operators(const unsigned int poly_degree, const unsigned int grid_degree, const std::vector< adtype > &metric_coeffs, OPERATOR::metric_operators< adtype, dim, 2 *dim > &metric_oper, OPERATOR::mapping_shape_functions< dim, 2 *dim > &mapping_basis, std::array< std::vector< adtype >, dim > &mapping_support_points)
< Parallel std::cout that only outputs on mpi_rank==0
Definition: strong_dg.cpp:52
Base class from which Advection, Diffusion, ConvectionDiffusion, and Euler is derived.
Definition: physics.h:34
void assemble_volume_term_and_build_operators_ad(typename dealii::DoFHandler< dim >::active_cell_iterator cell, const dealii::types::global_dof_index current_cell_index, const std::vector< double > &soln_coeffs, const dealii::Tensor< 1, dim, std::vector< double >> &aux_soln_coeffs, const std::vector< double > &metric_coeffs, const std::vector< real > &local_dual, const std::vector< dealii::types::global_dof_index > &soln_dofs_indices, const std::vector< dealii::types::global_dof_index > &metric_dofs_indices, const unsigned int poly_degree, const unsigned int grid_degree, OPERATOR::basis_functions< dim, 2 *dim > &soln_basis, OPERATOR::basis_functions< dim, 2 *dim > &flux_basis, OPERATOR::local_basis_stiffness< dim, 2 *dim > &flux_basis_stiffness, OPERATOR::vol_projection_operator< dim, 2 *dim > &soln_basis_projection_oper_int, OPERATOR::vol_projection_operator< dim, 2 *dim > &soln_basis_projection_oper_ext, OPERATOR::metric_operators< double, dim, 2 *dim > &metric_oper, OPERATOR::mapping_shape_functions< dim, 2 *dim > &mapping_basis, std::array< std::vector< double >, dim > &mapping_support_points, dealii::hp::FEValues< dim, dim > &fe_values_collection_volume, dealii::hp::FEValues< dim, dim > &fe_values_collection_volume_lagrange, const dealii::FESystem< dim, dim > &fe_soln, std::vector< double > &rhs, dealii::Tensor< 1, dim, std::vector< double >> &local_auxiliary_RHS, const bool compute_auxiliary_right_hand_side, double &dual_dot_residual) override
Calls the function to assemble volume residual. For double type.
Definition: strong_dg.hpp:88
Base class of numerical flux associated with dissipation.
Files for the baseline physics.
Definition: ADTypes.hpp:10
void assemble_volume_term_and_build_operators_ad(typename dealii::DoFHandler< dim >::active_cell_iterator cell, const dealii::types::global_dof_index current_cell_index, const std::vector< codi_JacobianComputationType > &soln_coeffs, const dealii::Tensor< 1, dim, std::vector< codi_JacobianComputationType >> &aux_soln_coeffs, const std::vector< codi_JacobianComputationType > &metric_coeffs, const std::vector< real > &local_dual, const std::vector< dealii::types::global_dof_index > &soln_dofs_indices, const std::vector< dealii::types::global_dof_index > &metric_dofs_indices, const unsigned int poly_degree, const unsigned int grid_degree, OPERATOR::basis_functions< dim, 2 *dim > &soln_basis, OPERATOR::basis_functions< dim, 2 *dim > &flux_basis, OPERATOR::local_basis_stiffness< dim, 2 *dim > &flux_basis_stiffness, OPERATOR::vol_projection_operator< dim, 2 *dim > &soln_basis_projection_oper_int, OPERATOR::vol_projection_operator< dim, 2 *dim > &soln_basis_projection_oper_ext, OPERATOR::metric_operators< codi_JacobianComputationType, dim, 2 *dim > &metric_oper, OPERATOR::mapping_shape_functions< dim, 2 *dim > &mapping_basis, std::array< std::vector< codi_JacobianComputationType >, dim > &mapping_support_points, dealii::hp::FEValues< dim, dim > &fe_values_collection_volume, dealii::hp::FEValues< dim, dim > &fe_values_collection_volume_lagrange, const dealii::FESystem< dim, dim > &fe_soln, std::vector< codi_JacobianComputationType > &rhs, dealii::Tensor< 1, dim, std::vector< codi_JacobianComputationType >> &local_auxiliary_RHS, const bool compute_auxiliary_right_hand_side, codi_JacobianComputationType &dual_dot_residual) override
Calls the function to assemble volume residual. For codi_JacobianComputationType. ...
Definition: strong_dg.hpp:145
const int nstate
Number of state variables.
Definition: dg_base.hpp:96
void assemble_face_term_and_build_operators_ad(typename dealii::DoFHandler< dim >::active_cell_iterator cell, typename dealii::DoFHandler< dim >::active_cell_iterator neighbor_cell, const dealii::types::global_dof_index current_cell_index, const dealii::types::global_dof_index neighbor_cell_index, const unsigned int iface, const unsigned int neighbor_iface, const std::vector< double > &soln_coeff_int, const std::vector< double > &soln_coeff_ext, const dealii::Tensor< 1, dim, std::vector< double >> &aux_soln_coeff_int, const dealii::Tensor< 1, dim, std::vector< double >> &aux_soln_coeff_ext, const std::vector< double > &metric_coeff_int, const std::vector< double > &metric_coeff_ext, const std::vector< double > &dual_int, const std::vector< double > &dual_ext, const unsigned int poly_degree_int, const unsigned int poly_degree_ext, const unsigned int grid_degree_int, const unsigned int grid_degree_ext, OPERATOR::basis_functions< dim, 2 *dim > &soln_basis_int, OPERATOR::basis_functions< dim, 2 *dim > &soln_basis_ext, OPERATOR::basis_functions< dim, 2 *dim > &flux_basis_int, OPERATOR::basis_functions< dim, 2 *dim > &flux_basis_ext, OPERATOR::local_basis_stiffness< dim, 2 *dim > &flux_basis_stiffness, OPERATOR::vol_projection_operator< dim, 2 *dim > &soln_basis_projection_oper_int, OPERATOR::vol_projection_operator< dim, 2 *dim > &soln_basis_projection_oper_ext, OPERATOR::metric_operators< double, dim, 2 *dim > &metric_oper_int, OPERATOR::metric_operators< double, dim, 2 *dim > &metric_oper_ext, OPERATOR::mapping_shape_functions< dim, 2 *dim > &mapping_basis, std::array< std::vector< double >, dim > &mapping_support_points, dealii::hp::FEFaceValues< dim, dim > &fe_values_collection_face_int, dealii::hp::FEFaceValues< dim, dim > &fe_values_collection_face_ext, dealii::hp::FESubfaceValues< dim, dim > &fe_values_collection_subface, const dealii::FESystem< dim, dim > &fe_int, const dealii::FESystem< dim, dim > &fe_ext, const real penalty, std::vector< double > &rhs_int, std::vector< double > &rhs_ext, dealii::Tensor< 1, dim, std::vector< double >> &aux_rhs_int, dealii::Tensor< 1, dim, std::vector< double >> &aux_rhs_ext, const bool compute_auxiliary_right_hand_side, double &dual_dot_residual, const bool, const bool, const bool, const bool is_a_subface, const unsigned int neighbor_i_subface) override
Calls the function to assemble face residual. For double type.
Definition: strong_dg.hpp:504
void assemble_boundary_term_and_build_operators_ad(typename dealii::DoFHandler< dim >::active_cell_iterator cell, const dealii::types::global_dof_index current_cell_index, const std::vector< codi_JacobianComputationType > &soln_coeffs, const dealii::Tensor< 1, dim, std::vector< codi_JacobianComputationType >> &aux_soln_coeffs, const std::vector< codi_JacobianComputationType > &metric_coeffs, const std::vector< real > &local_dual, const unsigned int face_number, const unsigned int boundary_id, const unsigned int poly_degree, const unsigned int grid_degree, OPERATOR::basis_functions< dim, 2 *dim > &soln_basis, OPERATOR::basis_functions< dim, 2 *dim > &flux_basis, OPERATOR::vol_projection_operator< dim, 2 *dim > &soln_basis_projection_oper_int, OPERATOR::metric_operators< codi_JacobianComputationType, dim, 2 *dim > &metric_oper, OPERATOR::mapping_shape_functions< dim, 2 *dim > &mapping_basis, std::array< std::vector< codi_JacobianComputationType >, dim > &mapping_support_points, dealii::hp::FEFaceValues< dim, dim > &fe_values_collection_face_int, const dealii::FESystem< dim, dim > &fe_soln, const real penalty, std::vector< codi_JacobianComputationType > &rhs, dealii::Tensor< 1, dim, std::vector< codi_JacobianComputationType >> &local_auxiliary_RHS, const bool compute_auxiliary_right_hand_side, codi_JacobianComputationType &dual_dot_residual) override
Calls the function to assemble boundary residual. For codi_JacobianComputationType.
Definition: strong_dg.hpp:344
Main parameter class that contains the various other sub-parameter classes.
void assemble_auxiliary_residual(const bool compute_dRdW, const bool compute_dRdX, const bool compute_d2R)
Flag for using projected entropy variables for NSFR boundary term.
Definition: strong_dg.cpp:498
const bool using_wall_model
Flag for using wall model.
Definition: strong_dg.hpp:34
const bool use_projected_entropy_variables_for_nsfr_boundary_term
Flag for using the second element as the wall model input.
Definition: strong_dg.hpp:36
const bool do_compute_filtered_solution
Flag to compute the filtered solution.
Definition: strong_dg.hpp:31
DGStrong class templated on the number of state variables.
Definition: strong_dg.hpp:16
void build_volume_metric_operators(const unsigned int poly_degree, const unsigned int grid_degree, const std::vector< codi_HessianComputationType > &metric_coeffs, OPERATOR::metric_operators< codi_HessianComputationType, dim, 2 *dim > &metric_oper, OPERATOR::mapping_shape_functions< dim, 2 *dim > &mapping_basis, std::array< std::vector< codi_HessianComputationType >, dim > &mapping_support_points)
Builds volume metric operators (metric cofactor and determinant of metric Jacobian). For codi_HessianComputationType.
Definition: strong_dg.hpp:992
void assemble_volume_term_auxiliary_equation(const std::array< std::vector< adtype >, nstate > &soln_coeff, const unsigned int poly_degree, OPERATOR::basis_functions< dim, 2 *dim > &soln_basis, OPERATOR::basis_functions< dim, 2 *dim > &flux_basis, OPERATOR::metric_operators< adtype, dim, 2 *dim > &metric_oper, dealii::Tensor< 1, dim, std::vector< adtype >> &local_auxiliary_RHS)
Evaluate the volume RHS for the auxiliary equation.
Definition: strong_dg.cpp:667
Base metric operators class that stores functions used in both the volume and on surface.
Definition: operators.h:1131
MeshType Triangulation
Definition: dg_base.hpp:89
The mapping shape functions evaluated at the desired nodes (facet set included in volume grid nodes f...
Definition: operators.h:1071
void assemble_face_term_and_build_operators_ad(typename dealii::DoFHandler< dim >::active_cell_iterator cell, typename dealii::DoFHandler< dim >::active_cell_iterator neighbor_cell, const dealii::types::global_dof_index current_cell_index, const dealii::types::global_dof_index neighbor_cell_index, const unsigned int iface, const unsigned int neighbor_iface, const std::vector< codi_HessianComputationType > &soln_coeff_int, const std::vector< codi_HessianComputationType > &soln_coeff_ext, const dealii::Tensor< 1, dim, std::vector< codi_HessianComputationType >> &aux_soln_coeff_int, const dealii::Tensor< 1, dim, std::vector< codi_HessianComputationType >> &aux_soln_coeff_ext, const std::vector< codi_HessianComputationType > &metric_coeff_int, const std::vector< codi_HessianComputationType > &metric_coeff_ext, const std::vector< double > &dual_int, const std::vector< double > &dual_ext, const unsigned int poly_degree_int, const unsigned int poly_degree_ext, const unsigned int grid_degree_int, const unsigned int grid_degree_ext, OPERATOR::basis_functions< dim, 2 *dim > &soln_basis_int, OPERATOR::basis_functions< dim, 2 *dim > &soln_basis_ext, OPERATOR::basis_functions< dim, 2 *dim > &flux_basis_int, OPERATOR::basis_functions< dim, 2 *dim > &flux_basis_ext, OPERATOR::local_basis_stiffness< dim, 2 *dim > &flux_basis_stiffness, OPERATOR::vol_projection_operator< dim, 2 *dim > &soln_basis_projection_oper_int, OPERATOR::vol_projection_operator< dim, 2 *dim > &soln_basis_projection_oper_ext, OPERATOR::metric_operators< codi_HessianComputationType, dim, 2 *dim > &metric_oper_int, OPERATOR::metric_operators< codi_HessianComputationType, dim, 2 *dim > &metric_oper_ext, OPERATOR::mapping_shape_functions< dim, 2 *dim > &mapping_basis, std::array< std::vector< codi_HessianComputationType >, dim > &mapping_support_points, dealii::hp::FEFaceValues< dim, dim > &fe_values_collection_face_int, dealii::hp::FEFaceValues< dim, dim > &fe_values_collection_face_ext, dealii::hp::FESubfaceValues< dim, dim > &fe_values_collection_subface, const dealii::FESystem< dim, dim > &fe_int, const dealii::FESystem< dim, dim > &fe_ext, const real penalty, std::vector< codi_HessianComputationType > &rhs_int, std::vector< codi_HessianComputationType > &rhs_ext, dealii::Tensor< 1, dim, std::vector< codi_HessianComputationType >> &aux_rhs_int, dealii::Tensor< 1, dim, std::vector< codi_HessianComputationType >> &aux_rhs_ext, const bool compute_auxiliary_right_hand_side, codi_HessianComputationType &dual_dot_residual, const bool, const bool, const bool, const bool is_a_subface, const unsigned int neighbor_i_subface) override
Calls the function to assemble face residual. For codi_HessianComputationType.
Definition: strong_dg.hpp:696
Base class of numerical flux associated with convection.
void assemble_boundary_term_and_build_operators_ad_templated(typename dealii::DoFHandler< dim >::active_cell_iterator cell, const dealii::types::global_dof_index current_cell_index, const std::vector< adtype > &soln_coeffs, const dealii::Tensor< 1, dim, std::vector< adtype >> &aux_soln_coeffs, const std::vector< adtype > &metric_coeffs, const std::vector< real > &local_dual, const unsigned int face_number, const unsigned int boundary_id, Physics::PhysicsBase< dim, nspecies, nstate, adtype > &physics, const NumericalFlux::NumericalFluxConvective< dim, nspecies, nstate, adtype > &conv_num_flux, const NumericalFlux::NumericalFluxDissipative< dim, nspecies, nstate, adtype > &diss_num_flux, const unsigned int poly_degree, const unsigned int grid_degree, OPERATOR::basis_functions< dim, 2 *dim > &soln_basis, OPERATOR::basis_functions< dim, 2 *dim > &flux_basis, OPERATOR::vol_projection_operator< dim, 2 *dim > &soln_basis_projection_oper_int, OPERATOR::metric_operators< adtype, dim, 2 *dim > &metric_oper, OPERATOR::mapping_shape_functions< dim, 2 *dim > &mapping_basis, std::array< std::vector< adtype >, dim > &mapping_support_points, dealii::hp::FEFaceValues< dim, dim > &, const dealii::FESystem< dim, dim > &, const real penalty, std::vector< adtype > &rhs, dealii::Tensor< 1, dim, std::vector< adtype >> &local_auxiliary_RHS, const bool compute_auxiliary_right_hand_side, adtype &dual_dot_residual)
Builds the necessary operators and assembles boundary residual for either primary or auxiliary...
Definition: strong_dg.cpp:192
DGStrong(const Parameters::AllParameters *const parameters_input, const unsigned int degree, const unsigned int max_degree_input, const unsigned int grid_degree_input, const std::shared_ptr< Triangulation > triangulation_input)
Constructor.
Definition: strong_dg.cpp:35
const bool apply_modal_high_pass_filter_on_filtered_solution
Flag to apply modal high pass filter on the filtered solution.
Definition: strong_dg.hpp:32
void assemble_boundary_term_and_build_operators_ad(typename dealii::DoFHandler< dim >::active_cell_iterator cell, const dealii::types::global_dof_index current_cell_index, const std::vector< codi_HessianComputationType > &soln_coeffs, const dealii::Tensor< 1, dim, std::vector< codi_HessianComputationType >> &aux_soln_coeffs, const std::vector< codi_HessianComputationType > &metric_coeffs, const std::vector< real > &local_dual, const unsigned int face_number, const unsigned int boundary_id, const unsigned int poly_degree, const unsigned int grid_degree, OPERATOR::basis_functions< dim, 2 *dim > &soln_basis, OPERATOR::basis_functions< dim, 2 *dim > &flux_basis, OPERATOR::vol_projection_operator< dim, 2 *dim > &soln_basis_projection_oper_int, OPERATOR::metric_operators< codi_HessianComputationType, dim, 2 *dim > &metric_oper, OPERATOR::mapping_shape_functions< dim, 2 *dim > &mapping_basis, std::array< std::vector< codi_HessianComputationType >, dim > &mapping_support_points, dealii::hp::FEFaceValues< dim, dim > &fe_values_collection_face_int, const dealii::FESystem< dim, dim > &fe_soln, const real penalty, std::vector< codi_HessianComputationType > &rhs, dealii::Tensor< 1, dim, std::vector< codi_HessianComputationType >> &local_auxiliary_RHS, const bool compute_auxiliary_right_hand_side, codi_HessianComputationType &dual_dot_residual) override
Calls the function to assemble boundary residual. For codi_HessianComputationType.
Definition: strong_dg.hpp:399
void assemble_boundary_term_strong(typename dealii::DoFHandler< dim >::active_cell_iterator current_cell, const unsigned int iface, const dealii::types::global_dof_index current_cell_index, std::vector< bool > face_orientation, const std::array< std::vector< adtype >, nstate > &soln_coeff, const std::array< dealii::Tensor< 1, dim, std::vector< adtype >>, nstate > &aux_soln_coeff, const unsigned int boundary_id, const unsigned int poly_degree, const real penalty, OPERATOR::basis_functions< dim, 2 *dim > &soln_basis, OPERATOR::basis_functions< dim, 2 *dim > &flux_basis, OPERATOR::vol_projection_operator< dim, 2 *dim > &soln_basis_projection_oper, OPERATOR::metric_operators< adtype, dim, 2 *dim > &metric_oper, Physics::PhysicsBase< dim, nspecies, nstate, adtype > &pde_physics, const NumericalFlux::NumericalFluxConvective< dim, nspecies, nstate, adtype > &conv_num_flux, const NumericalFlux::NumericalFluxDissipative< dim, nspecies, nstate, adtype > &diss_num_flux, std::vector< adtype > &local_rhs_cell)
Strong form primary equation&#39;s boundary right-hand-side.
Definition: strong_dg.cpp:1583
typename DGBase< dim, nspecies, real, MeshType >::Triangulation Triangulation
Alias to base class Triangulation.
Abstract class templated on the number of state variables.
codi::RealReversePrimalIndexGen< codi::RealForwardVec< dimForwardAD >, codi::Direction< codi::RealForwardVec< dimForwardAD >, dimReverseAD > > codi_HessianComputationType
Nested reverse-forward mode type for Jacobian and Hessian computation using TapeHelper.
Definition: ADTypes.hpp:23
void assemble_face_term_and_build_operators_ad_templated(typename dealii::DoFHandler< dim >::active_cell_iterator cell, typename dealii::DoFHandler< dim >::active_cell_iterator neighbor_cell, const dealii::types::global_dof_index current_cell_index, const dealii::types::global_dof_index neighbor_cell_index, const unsigned int iface, const unsigned int neighbor_iface, const std::vector< adtype > &soln_coeffs_int, const std::vector< adtype > &soln_coeffs_ext, const dealii::Tensor< 1, dim, std::vector< adtype >> &aux_soln_coeffs_int, const dealii::Tensor< 1, dim, std::vector< adtype >> &aux_soln_coeffs_ext, const std::vector< adtype > &metric_coeff_int, const std::vector< adtype > &metric_coeff_ext, const std::vector< double > &dual_int, const std::vector< double > &dual_ext, const unsigned int poly_degree_int, const unsigned int poly_degree_ext, const unsigned int grid_degree_int, const unsigned int grid_degree_ext, OPERATOR::basis_functions< dim, 2 *dim > &soln_basis_int, OPERATOR::basis_functions< dim, 2 *dim > &soln_basis_ext, OPERATOR::basis_functions< dim, 2 *dim > &flux_basis_int, OPERATOR::basis_functions< dim, 2 *dim > &flux_basis_ext, OPERATOR::local_basis_stiffness< dim, 2 *dim > &flux_basis_stiffness, OPERATOR::vol_projection_operator< dim, 2 *dim > &soln_basis_projection_oper_int, OPERATOR::vol_projection_operator< dim, 2 *dim > &soln_basis_projection_oper_ext, OPERATOR::metric_operators< adtype, dim, 2 *dim > &metric_oper_int, OPERATOR::metric_operators< adtype, dim, 2 *dim > &metric_oper_ext, OPERATOR::mapping_shape_functions< dim, 2 *dim > &mapping_basis, std::array< std::vector< adtype >, dim > &mapping_support_points, Physics::PhysicsBase< dim, nspecies, nstate, adtype > &physics, const NumericalFlux::NumericalFluxConvective< dim, nspecies, nstate, adtype > &conv_num_flux, const NumericalFlux::NumericalFluxDissipative< dim, nspecies, nstate, adtype > &diss_num_flux, dealii::hp::FEFaceValues< dim, dim > &, dealii::hp::FEFaceValues< dim, dim > &, dealii::hp::FESubfaceValues< dim, dim > &, const dealii::FESystem< dim, dim > &, const dealii::FESystem< dim, dim > &, const real penalty, std::vector< adtype > &rhs_int, std::vector< adtype > &rhs_ext, dealii::Tensor< 1, dim, std::vector< adtype >> &aux_rhs_int, dealii::Tensor< 1, dim, std::vector< adtype >> &aux_rhs_ext, const bool compute_auxiliary_right_hand_side, adtype &dual_dot_residual, const bool, const unsigned int)
Calls the function to assemble face residual.
Definition: strong_dg.cpp:296
void build_volume_metric_operators(const unsigned int poly_degree, const unsigned int grid_degree, const std::vector< double > &metric_coeffs, OPERATOR::metric_operators< double, dim, 2 *dim > &metric_oper, OPERATOR::mapping_shape_functions< dim, 2 *dim > &mapping_basis, std::array< std::vector< double >, dim > &mapping_support_points)
Builds volume metric operators (metric cofactor and determinant of metric Jacobian). For double type.
Definition: strong_dg.hpp:970
void assemble_cell_auxiliary_residual(const DoFCellAccessorType1 &current_cell, const DoFCellAccessorType2 &current_metric_cell, std::vector< dealii::LinearAlgebra::distributed::Vector< double >> &rhs)
Assembles the auxiliary equations&#39; cell residuals.
const unsigned int poly_degree_max_large_scales
For filtered solution; lower bound of high pass filter.
Definition: strong_dg.hpp:33
void assemble_volume_term_strong(typename dealii::DoFHandler< dim >::active_cell_iterator cell, const dealii::types::global_dof_index current_cell_index, const std::array< std::vector< adtype >, nstate > &soln_coeff, const std::array< dealii::Tensor< 1, dim, std::vector< adtype >>, nstate > &aux_soln_coeff, const unsigned int poly_degree, OPERATOR::basis_functions< dim, 2 *dim > &soln_basis, OPERATOR::basis_functions< dim, 2 *dim > &flux_basis, OPERATOR::local_basis_stiffness< dim, 2 *dim > &flux_basis_stiffness, OPERATOR::vol_projection_operator< dim, 2 *dim > &soln_basis_projection_oper, OPERATOR::metric_operators< adtype, dim, 2 *dim > &metric_oper, Physics::PhysicsBase< dim, nspecies, nstate, adtype > &pde_physics, std::vector< adtype > &local_rhs_int_cell)
Strong form primary equation&#39;s volume right-hand-side.
Definition: strong_dg.cpp:1017
void assemble_boundary_term_auxiliary_equation(const unsigned int iface, const dealii::types::global_dof_index current_cell_index, std::vector< bool > face_orientation, const std::array< std::vector< adtype >, nstate > &soln_coeff, const unsigned int poly_degree, const unsigned int boundary_id, OPERATOR::basis_functions< dim, 2 *dim > &soln_basis, OPERATOR::metric_operators< adtype, dim, 2 *dim > &metric_oper, const Physics::PhysicsBase< dim, nspecies, nstate, adtype > &pde_physics, const NumericalFlux::NumericalFluxDissipative< dim, nspecies, nstate, adtype > &diss_num_flux, dealii::Tensor< 1, dim, std::vector< adtype >> &local_auxiliary_RHS)
Evaluate the boundary RHS for the auxiliary equation.
Definition: strong_dg.cpp:728
void assemble_boundary_term_and_build_operators_ad(typename dealii::DoFHandler< dim >::active_cell_iterator cell, const dealii::types::global_dof_index current_cell_index, const std::vector< double > &soln_coeffs, const dealii::Tensor< 1, dim, std::vector< double >> &aux_soln_coeffs, const std::vector< double > &metric_coeffs, const std::vector< real > &local_dual, const unsigned int face_number, const unsigned int boundary_id, const unsigned int poly_degree, const unsigned int grid_degree, OPERATOR::basis_functions< dim, 2 *dim > &soln_basis, OPERATOR::basis_functions< dim, 2 *dim > &flux_basis, OPERATOR::vol_projection_operator< dim, 2 *dim > &soln_basis_projection_oper_int, OPERATOR::metric_operators< double, dim, 2 *dim > &metric_oper, OPERATOR::mapping_shape_functions< dim, 2 *dim > &mapping_basis, std::array< std::vector< double >, dim > &mapping_support_points, dealii::hp::FEFaceValues< dim, dim > &fe_values_collection_face_int, const dealii::FESystem< dim, dim > &fe_soln, const real penalty, std::vector< double > &rhs, dealii::Tensor< 1, dim, std::vector< double >> &local_auxiliary_RHS, const bool compute_auxiliary_right_hand_side, double &dual_dot_residual) override
Calls the function to assemble boundary residual. For double type.
Definition: strong_dg.hpp:289
void allocate_dual_vector(const bool compute_d2R)
Allocate the dual vector for optimization.
Definition: strong_dg.cpp:3604
DGBase is independent of the number of state variables.
Definition: dg_base.hpp:82
void assemble_face_term_and_build_operators_ad(typename dealii::DoFHandler< dim >::active_cell_iterator cell, typename dealii::DoFHandler< dim >::active_cell_iterator neighbor_cell, const dealii::types::global_dof_index current_cell_index, const dealii::types::global_dof_index neighbor_cell_index, const unsigned int iface, const unsigned int neighbor_iface, const std::vector< codi_JacobianComputationType > &soln_coeff_int, const std::vector< codi_JacobianComputationType > &soln_coeff_ext, const dealii::Tensor< 1, dim, std::vector< codi_JacobianComputationType >> &aux_soln_coeff_int, const dealii::Tensor< 1, dim, std::vector< codi_JacobianComputationType >> &aux_soln_coeff_ext, const std::vector< codi_JacobianComputationType > &metric_coeff_int, const std::vector< codi_JacobianComputationType > &metric_coeff_ext, const std::vector< double > &dual_int, const std::vector< double > &dual_ext, const unsigned int poly_degree_int, const unsigned int poly_degree_ext, const unsigned int grid_degree_int, const unsigned int grid_degree_ext, OPERATOR::basis_functions< dim, 2 *dim > &soln_basis_int, OPERATOR::basis_functions< dim, 2 *dim > &soln_basis_ext, OPERATOR::basis_functions< dim, 2 *dim > &flux_basis_int, OPERATOR::basis_functions< dim, 2 *dim > &flux_basis_ext, OPERATOR::local_basis_stiffness< dim, 2 *dim > &flux_basis_stiffness, OPERATOR::vol_projection_operator< dim, 2 *dim > &soln_basis_projection_oper_int, OPERATOR::vol_projection_operator< dim, 2 *dim > &soln_basis_projection_oper_ext, OPERATOR::metric_operators< codi_JacobianComputationType, dim, 2 *dim > &metric_oper_int, OPERATOR::metric_operators< codi_JacobianComputationType, dim, 2 *dim > &metric_oper_ext, OPERATOR::mapping_shape_functions< dim, 2 *dim > &mapping_basis, std::array< std::vector< codi_JacobianComputationType >, dim > &mapping_support_points, dealii::hp::FEFaceValues< dim, dim > &fe_values_collection_face_int, dealii::hp::FEFaceValues< dim, dim > &fe_values_collection_face_ext, dealii::hp::FESubfaceValues< dim, dim > &fe_values_collection_subface, const dealii::FESystem< dim, dim > &fe_int, const dealii::FESystem< dim, dim > &fe_ext, const real penalty, std::vector< codi_JacobianComputationType > &rhs_int, std::vector< codi_JacobianComputationType > &rhs_ext, dealii::Tensor< 1, dim, std::vector< codi_JacobianComputationType >> &aux_rhs_int, dealii::Tensor< 1, dim, std::vector< codi_JacobianComputationType >> &aux_rhs_ext, const bool compute_auxiliary_right_hand_side, codi_JacobianComputationType &dual_dot_residual, const bool, const bool, const bool, const bool is_a_subface, const unsigned int neighbor_i_subface) override
Calls the function to assemble face residual. For codi_JacobianComputationType.
Definition: strong_dg.hpp:600
Projection operator corresponding to basis functions onto M-norm (L2).
Definition: operators.h:723
Local stiffness matrix without jacobian dependence.
Definition: operators.h:497
void build_volume_metric_operators(const unsigned int poly_degree, const unsigned int grid_degree, const std::vector< codi_JacobianComputationType > &metric_coeffs, OPERATOR::metric_operators< codi_JacobianComputationType, dim, 2 *dim > &metric_oper, OPERATOR::mapping_shape_functions< dim, 2 *dim > &mapping_basis, std::array< std::vector< codi_JacobianComputationType >, dim > &mapping_support_points)
Builds volume metric operators (metric cofactor and determinant of metric Jacobian). For codi_JacobianComputationType.
Definition: strong_dg.hpp:981