[P]arallel [Hi]gh-order [Li]brary for [P]DEs  Latest
Parallel High-Order Library for PDEs through hp-adaptive Discontinuous Galerkin methods
weak_dg.hpp
1 #ifndef __WEAK_DISCONTINUOUSGALERKIN_H__
2 #define __WEAK_DISCONTINUOUSGALERKIN_H__
3 
4 #include "dg_base_state.hpp"
5 #include "solution/local_solution.hpp"
6 
7 namespace PHiLiP {
8 
10 /* Contains the functions that need to be templated on the number of state variables.
11  */
12 #if PHILIP_DIM==1 // dealii::parallel::distributed::Triangulation<dim> does not work for 1D
13 template <int dim, int nspecies, int nstate, typename real, typename MeshType = dealii::Triangulation<dim>>
14 #else
15 template <int dim, int nspecies, int nstate, typename real, typename MeshType = dealii::parallel::distributed::Triangulation<dim>>
16 #endif
17 class DGWeak : public DGBaseState<dim, nspecies, nstate, real, MeshType>
18 {
19 protected:
22 public:
24  DGWeak(
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 
31 private:
32 
34  void assemble_auxiliary_residual (const bool /*compute_dRdW*/, const bool /*compute_dRdX*/, const bool /*compute_d2R*/);
35 
37  void allocate_dual_vector (const bool compute_d2R);
38 
40 
42  template <typename real2>
44  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
45  const dealii::types::global_dof_index current_cell_index,
46  const LocalSolution<real2, dim, nspecies, nstate> &local_solution,
47  const LocalSolution<real2, dim, nspecies, dim> &local_metric,
48  const std::vector<real> &local_dual,
49  const dealii::Quadrature<dim> &quadrature,
51  std::vector<real2> &rhs, real2 &dual_dot_residual,
52  const bool compute_metric_derivatives,
53  const dealii::FEValues<dim,dim> &fe_values_vol);
54 
56 
58  template <typename real2>
60  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
61  const dealii::types::global_dof_index current_cell_index,
62  const LocalSolution<real2, dim, nspecies, nstate> &local_solution,
63  const LocalSolution<real2, dim, nspecies, dim> &local_metric,
64  const std::vector< real > &local_dual,
65  const unsigned int face_number,
66  const unsigned int boundary_id,
70  const dealii::FEFaceValuesBase<dim,dim> &fe_values_boundary,
71  const real penalty,
72  const dealii::Quadrature<dim-1> &quadrature,
73  std::vector<real2> &rhs,
74  real2 &dual_dot_residual,
75  const bool compute_metric_derivatives);
76 
78 
80  template <typename real2>
81  void assemble_face_term(
82  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
83  typename dealii::DoFHandler<dim>::active_cell_iterator neighbor_cell,
84  const dealii::types::global_dof_index current_cell_index,
85  const dealii::types::global_dof_index neighbor_cell_index,
90  const std::vector< double > &dual_int,
91  const std::vector< double > &dual_ext,
92  const std::pair<unsigned int, int> face_subface_int,
93  const std::pair<unsigned int, int> face_subface_ext,
94  const typename dealii::QProjector<dim>::DataSetDescriptor face_data_set_int,
95  const typename dealii::QProjector<dim>::DataSetDescriptor face_data_set_ext,
99  const dealii::FEFaceValuesBase<dim,dim> &fe_values_int,
100  const dealii::FEFaceValuesBase<dim,dim> &fe_values_ext,
101  const real penalty,
102  const dealii::Quadrature<dim-1> &face_quadrature,
103  std::vector<real2> &rhs_int,
104  std::vector<real2> &rhs_ext,
105  real2 &dual_dot_residual,
106  const bool compute_dRdW, const bool compute_dRdX, const bool compute_d2R);
107 
109  template <typename adtype>
111  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
112  const dealii::types::global_dof_index current_cell_index,
113  const std::vector<adtype> &soln_coeffs,
114  const dealii::Tensor<1,dim,std::vector<adtype>> &/*aux_soln_coeffs*/,
115  const std::vector<adtype> &metric_coeffs,
116  const std::vector<real> &local_dual,
117  const std::vector<dealii::types::global_dof_index> &soln_dofs_indices,
118  const std::vector<dealii::types::global_dof_index> &metric_dofs_indices,
119  const unsigned int poly_degree,
120  const unsigned int grid_degree,
122  OPERATOR::basis_functions<dim,2*dim> &/*soln_basis*/,
123  OPERATOR::basis_functions<dim,2*dim> &/*flux_basis*/,
124  OPERATOR::local_basis_stiffness<dim,2*dim> &/*flux_basis_stiffness*/,
125  OPERATOR::vol_projection_operator<dim,2*dim> &/*soln_basis_projection_oper_int*/,
126  OPERATOR::vol_projection_operator<dim,2*dim> &/*soln_basis_projection_oper_ext*/,
129  std::array<std::vector<adtype>,dim> &/*mapping_support_points*/,
130  dealii::hp::FEValues<dim,dim> &fe_values_collection_volume,
131  dealii::hp::FEValues<dim,dim> &fe_values_collection_volume_lagrange,
132  const dealii::FESystem<dim,dim> &fe_soln,
133  std::vector<adtype> &rhs,
134  dealii::Tensor<1,dim,std::vector<adtype>> &/*local_auxiliary_RHS*/,
135  const bool /*compute_auxiliary_right_hand_side*/,
136  adtype &dual_dot_residual);
137 
140  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
141  const dealii::types::global_dof_index current_cell_index,
142  const std::vector<double> &soln_coeffs,
143  const dealii::Tensor<1,dim,std::vector<double>> &aux_soln_coeffs,
144  const std::vector<double> &metric_coeffs,
145  const std::vector<real> &local_dual,
146  const std::vector<dealii::types::global_dof_index> &soln_dofs_indices,
147  const std::vector<dealii::types::global_dof_index> &metric_dofs_indices,
148  const unsigned int poly_degree,
149  const unsigned int grid_degree,
152  OPERATOR::local_basis_stiffness<dim,2*dim> &flux_basis_stiffness,
153  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_int,
154  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_ext,
157  std::array<std::vector<double>,dim> &mapping_support_points,
158  dealii::hp::FEValues<dim,dim> &fe_values_collection_volume,
159  dealii::hp::FEValues<dim,dim> &fe_values_collection_volume_lagrange,
160  const dealii::FESystem<dim,dim> &fe_soln,
161  std::vector<double> &rhs,
162  dealii::Tensor<1,dim,std::vector<double>> &local_auxiliary_RHS,
163  const bool compute_auxiliary_right_hand_side,
164  double &dual_dot_residual) override
165  {
166  assemble_volume_term_and_build_operators_ad_templated<double>(
167  cell,
168  current_cell_index,
169  soln_coeffs,
170  aux_soln_coeffs,
171  metric_coeffs,
172  local_dual,
173  soln_dofs_indices,
174  metric_dofs_indices,
175  poly_degree,
176  grid_degree,
178  soln_basis,
179  flux_basis,
180  flux_basis_stiffness,
181  soln_basis_projection_oper_int,
182  soln_basis_projection_oper_ext,
183  metric_oper,
184  mapping_basis,
185  mapping_support_points,
186  fe_values_collection_volume,
187  fe_values_collection_volume_lagrange,
188  fe_soln,
189  rhs,
190  local_auxiliary_RHS,
191  compute_auxiliary_right_hand_side,
192  dual_dot_residual);
193  }
194 
197  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
198  const dealii::types::global_dof_index current_cell_index,
199  const std::vector<codi_JacobianComputationType> &soln_coeffs,
200  const dealii::Tensor<1,dim,std::vector<codi_JacobianComputationType>> &aux_soln_coeffs,
201  const std::vector<codi_JacobianComputationType> &metric_coeffs,
202  const std::vector<real> &local_dual,
203  const std::vector<dealii::types::global_dof_index> &soln_dofs_indices,
204  const std::vector<dealii::types::global_dof_index> &metric_dofs_indices,
205  const unsigned int poly_degree,
206  const unsigned int grid_degree,
209  OPERATOR::local_basis_stiffness<dim,2*dim> &flux_basis_stiffness,
210  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_int,
211  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_ext,
214  std::array<std::vector<codi_JacobianComputationType>,dim> &mapping_support_points,
215  dealii::hp::FEValues<dim,dim> &fe_values_collection_volume,
216  dealii::hp::FEValues<dim,dim> &fe_values_collection_volume_lagrange,
217  const dealii::FESystem<dim,dim> &fe_soln,
218  std::vector<codi_JacobianComputationType> &rhs,
219  dealii::Tensor<1,dim,std::vector<codi_JacobianComputationType>> &local_auxiliary_RHS,
220  const bool compute_auxiliary_right_hand_side,
221  codi_JacobianComputationType &dual_dot_residual) override
222  {
223  assemble_volume_term_and_build_operators_ad_templated<codi_JacobianComputationType>(
224  cell,
225  current_cell_index,
226  soln_coeffs,
227  aux_soln_coeffs,
228  metric_coeffs,
229  local_dual,
230  soln_dofs_indices,
231  metric_dofs_indices,
232  poly_degree,
233  grid_degree,
235  soln_basis,
236  flux_basis,
237  flux_basis_stiffness,
238  soln_basis_projection_oper_int,
239  soln_basis_projection_oper_ext,
240  metric_oper,
241  mapping_basis,
242  mapping_support_points,
243  fe_values_collection_volume,
244  fe_values_collection_volume_lagrange,
245  fe_soln,
246  rhs,
247  local_auxiliary_RHS,
248  compute_auxiliary_right_hand_side,
249  dual_dot_residual);
250  }
251 
254  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
255  const dealii::types::global_dof_index current_cell_index,
256  const std::vector<codi_HessianComputationType> &soln_coeffs,
257  const dealii::Tensor<1,dim,std::vector<codi_HessianComputationType>> &aux_soln_coeffs,
258  const std::vector<codi_HessianComputationType> &metric_coeffs,
259  const std::vector<real> &local_dual,
260  const std::vector<dealii::types::global_dof_index> &soln_dofs_indices,
261  const std::vector<dealii::types::global_dof_index> &metric_dofs_indices,
262  const unsigned int poly_degree,
263  const unsigned int grid_degree,
266  OPERATOR::local_basis_stiffness<dim,2*dim> &flux_basis_stiffness,
267  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_int,
268  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_ext,
271  std::array<std::vector<codi_HessianComputationType>,dim> &mapping_support_points,
272  dealii::hp::FEValues<dim,dim> &fe_values_collection_volume,
273  dealii::hp::FEValues<dim,dim> &fe_values_collection_volume_lagrange,
274  const dealii::FESystem<dim,dim> &fe_soln,
275  std::vector<codi_HessianComputationType> &rhs,
276  dealii::Tensor<1,dim,std::vector<codi_HessianComputationType>> &local_auxiliary_RHS,
277  const bool compute_auxiliary_right_hand_side,
278  codi_HessianComputationType &dual_dot_residual) override
279  {
280  assemble_volume_term_and_build_operators_ad_templated<codi_HessianComputationType>(
281  cell,
282  current_cell_index,
283  soln_coeffs,
284  aux_soln_coeffs,
285  metric_coeffs,
286  local_dual,
287  soln_dofs_indices,
288  metric_dofs_indices,
289  poly_degree,
290  grid_degree,
292  soln_basis,
293  flux_basis,
294  flux_basis_stiffness,
295  soln_basis_projection_oper_int,
296  soln_basis_projection_oper_ext,
297  metric_oper,
298  mapping_basis,
299  mapping_support_points,
300  fe_values_collection_volume,
301  fe_values_collection_volume_lagrange,
302  fe_soln,
303  rhs,
304  local_auxiliary_RHS,
305  compute_auxiliary_right_hand_side,
306  dual_dot_residual);
307  }
308 
310  template <typename adtype>
312  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
313  const dealii::types::global_dof_index current_cell_index,
314  const std::vector<adtype> &soln_coeffs,
315  const dealii::Tensor<1,dim,std::vector<adtype>> &/*aux_soln_coeffs*/,
316  const std::vector<adtype> &metric_coeffs,
317  const std::vector<real> &local_dual,
318  const unsigned int face_number,
319  const unsigned int boundary_id,
323  const unsigned int /*poly_degree*/,
324  const unsigned int /*grid_degree*/,
325  OPERATOR::basis_functions<dim,2*dim> &/*soln_basis*/,
326  OPERATOR::basis_functions<dim,2*dim> &/*flux_basis*/,
327  OPERATOR::vol_projection_operator<dim,2*dim> &/*soln_basis_projection_oper_int*/,
330  std::array<std::vector<adtype>,dim> &/*mapping_support_points*/,
331  dealii::hp::FEFaceValues<dim,dim> &fe_values_collection_face_int,
332  const dealii::FESystem<dim,dim> &fe_soln,
333  const real penalty,
334  std::vector<adtype> &rhs,
335  dealii::Tensor<1,dim,std::vector<adtype>> &/*local_auxiliary_RHS*/,
336  const bool /*compute_auxiliary_right_hand_side*/,
337  adtype &dual_dot_residual);
338 
341  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
342  const dealii::types::global_dof_index current_cell_index,
343  const std::vector<double> &soln_coeffs,
344  const dealii::Tensor<1,dim,std::vector<double>> &aux_soln_coeffs,
345  const std::vector<double> &metric_coeffs,
346  const std::vector<real> &local_dual,
347  const unsigned int face_number,
348  const unsigned int boundary_id,
349  const unsigned int poly_degree,
350  const unsigned int grid_degree,
353  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_int,
356  std::array<std::vector<double>,dim> &mapping_support_points,
357  dealii::hp::FEFaceValues<dim,dim> &fe_values_collection_face_int,
358  const dealii::FESystem<dim,dim> &fe_soln,
359  const real penalty,
360  std::vector<double> &rhs,
361  dealii::Tensor<1,dim,std::vector<double>> &local_auxiliary_RHS,
362  const bool compute_auxiliary_right_hand_side,
363  double &dual_dot_residual) override
364  {
365  assemble_boundary_term_and_build_operators_ad_templated<double>(
366  cell,
367  current_cell_index,
368  soln_coeffs,
369  aux_soln_coeffs,
370  metric_coeffs,
371  local_dual,
372  face_number,
373  boundary_id,
377  poly_degree,
378  grid_degree,
379  soln_basis,
380  flux_basis,
381  soln_basis_projection_oper_int,
382  metric_oper,
383  mapping_basis,
384  mapping_support_points,
385  fe_values_collection_face_int,
386  fe_soln,
387  penalty,
388  rhs,
389  local_auxiliary_RHS,
390  compute_auxiliary_right_hand_side,
391  dual_dot_residual);
392  }
393 
396  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
397  const dealii::types::global_dof_index current_cell_index,
398  const std::vector<codi_JacobianComputationType> &soln_coeffs,
399  const dealii::Tensor<1,dim,std::vector<codi_JacobianComputationType>> &aux_soln_coeffs,
400  const std::vector<codi_JacobianComputationType> &metric_coeffs,
401  const std::vector<real> &local_dual,
402  const unsigned int face_number,
403  const unsigned int boundary_id,
404  const unsigned int poly_degree,
405  const unsigned int grid_degree,
408  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_int,
411  std::array<std::vector<codi_JacobianComputationType>,dim> &mapping_support_points,
412  dealii::hp::FEFaceValues<dim,dim> &fe_values_collection_face_int,
413  const dealii::FESystem<dim,dim> &fe_soln,
414  const real penalty,
415  std::vector<codi_JacobianComputationType> &rhs,
416  dealii::Tensor<1,dim,std::vector<codi_JacobianComputationType>> &local_auxiliary_RHS,
417  const bool compute_auxiliary_right_hand_side,
418  codi_JacobianComputationType &dual_dot_residual) override
419  {
420  assemble_boundary_term_and_build_operators_ad_templated<codi_JacobianComputationType>(
421  cell,
422  current_cell_index,
423  soln_coeffs,
424  aux_soln_coeffs,
425  metric_coeffs,
426  local_dual,
427  face_number,
428  boundary_id,
432  poly_degree,
433  grid_degree,
434  soln_basis,
435  flux_basis,
436  soln_basis_projection_oper_int,
437  metric_oper,
438  mapping_basis,
439  mapping_support_points,
440  fe_values_collection_face_int,
441  fe_soln,
442  penalty,
443  rhs,
444  local_auxiliary_RHS,
445  compute_auxiliary_right_hand_side,
446  dual_dot_residual);
447  }
448 
451  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
452  const dealii::types::global_dof_index current_cell_index,
453  const std::vector<codi_HessianComputationType> &soln_coeffs,
454  const dealii::Tensor<1,dim,std::vector<codi_HessianComputationType>> &aux_soln_coeffs,
455  const std::vector<codi_HessianComputationType> &metric_coeffs,
456  const std::vector<real> &local_dual,
457  const unsigned int face_number,
458  const unsigned int boundary_id,
459  const unsigned int poly_degree,
460  const unsigned int grid_degree,
463  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_int,
466  std::array<std::vector<codi_HessianComputationType>,dim> &mapping_support_points,
467  dealii::hp::FEFaceValues<dim,dim> &fe_values_collection_face_int,
468  const dealii::FESystem<dim,dim> &fe_soln,
469  const real penalty,
470  std::vector<codi_HessianComputationType> &rhs,
471  dealii::Tensor<1,dim,std::vector<codi_HessianComputationType>> &local_auxiliary_RHS,
472  const bool compute_auxiliary_right_hand_side,
473  codi_HessianComputationType &dual_dot_residual) override
474  {
475  assemble_boundary_term_and_build_operators_ad_templated<codi_HessianComputationType>(
476  cell,
477  current_cell_index,
478  soln_coeffs,
479  aux_soln_coeffs,
480  metric_coeffs,
481  local_dual,
482  face_number,
483  boundary_id,
487  poly_degree,
488  grid_degree,
489  soln_basis,
490  flux_basis,
491  soln_basis_projection_oper_int,
492  metric_oper,
493  mapping_basis,
494  mapping_support_points,
495  fe_values_collection_face_int,
496  fe_soln,
497  penalty,
498  rhs,
499  local_auxiliary_RHS,
500  compute_auxiliary_right_hand_side,
501  dual_dot_residual);
502  }
503 
505  template <typename adtype>
507  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
508  typename dealii::DoFHandler<dim>::active_cell_iterator neighbor_cell,
509  const dealii::types::global_dof_index current_cell_index,
510  const dealii::types::global_dof_index neighbor_cell_index,
511  const unsigned int iface,
512  const unsigned int neighbor_iface,
513  const std::vector<adtype> &soln_coeff_int,
514  const std::vector<adtype> &soln_coeff_ext,
515  const dealii::Tensor<1,dim,std::vector<adtype>> &/*aux_soln_coeff_int*/,
516  const dealii::Tensor<1,dim,std::vector<adtype>> &/*aux_soln_coeff_ext*/,
517  const std::vector<adtype> &metric_coeff_int,
518  const std::vector<adtype> &metric_coeff_ext,
519  const std::vector< double > &dual_int,
520  const std::vector< double > &dual_ext,
521  const unsigned int /*poly_degree_int*/,
522  const unsigned int /*poly_degree_ext*/,
523  const unsigned int /*grid_degree_int*/,
524  const unsigned int /*grid_degree_ext*/,
525  OPERATOR::basis_functions<dim,2*dim> &/*soln_basis_int*/,
526  OPERATOR::basis_functions<dim,2*dim> &/*soln_basis_ext*/,
527  OPERATOR::basis_functions<dim,2*dim> &/*flux_basis_int*/,
528  OPERATOR::basis_functions<dim,2*dim> &/*flux_basis_ext*/,
529  OPERATOR::local_basis_stiffness<dim,2*dim> &/*flux_basis_stiffness*/,
530  OPERATOR::vol_projection_operator<dim,2*dim> &/*soln_basis_projection_oper_int*/,
531  OPERATOR::vol_projection_operator<dim,2*dim> &/*soln_basis_projection_oper_ext*/,
535  std::array<std::vector<adtype>,dim> &/*mapping_support_points*/,
539  dealii::hp::FEFaceValues<dim,dim> &fe_values_collection_face_int,
540  dealii::hp::FEFaceValues<dim,dim> &fe_values_collection_face_ext,
541  dealii::hp::FESubfaceValues<dim,dim> &fe_values_collection_subface,
542  const dealii::FESystem<dim,dim> &fe_int,
543  const dealii::FESystem<dim,dim> &fe_ext,
544  const real penalty,
545  std::vector<adtype> &rhs_int,
546  std::vector<adtype> &rhs_ext,
547  dealii::Tensor<1,dim,std::vector<adtype>> &/*aux_rhs_int*/,
548  dealii::Tensor<1,dim,std::vector<adtype>> &/*aux_rhs_ext*/,
549  const bool /*compute_auxiliary_right_hand_side*/,
550  adtype &dual_dot_residual,
551  const bool compute_dRdW, const bool compute_dRdX, const bool compute_d2R,
552  const bool is_a_subface,
553  const unsigned int neighbor_i_subface);
554 
557  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
558  typename dealii::DoFHandler<dim>::active_cell_iterator neighbor_cell,
559  const dealii::types::global_dof_index current_cell_index,
560  const dealii::types::global_dof_index neighbor_cell_index,
561  const unsigned int iface,
562  const unsigned int neighbor_iface,
563  const std::vector<double> &soln_coeff_int,
564  const std::vector<double> &soln_coeff_ext,
565  const dealii::Tensor<1,dim,std::vector<double>> &aux_soln_coeff_int,
566  const dealii::Tensor<1,dim,std::vector<double>> &aux_soln_coeff_ext,
567  const std::vector<double> &metric_coeff_int,
568  const std::vector<double> &metric_coeff_ext,
569  const std::vector< double > &dual_int,
570  const std::vector< double > &dual_ext,
571  const unsigned int poly_degree_int,
572  const unsigned int poly_degree_ext,
573  const unsigned int grid_degree_int,
574  const unsigned int grid_degree_ext,
575  OPERATOR::basis_functions<dim,2*dim> &soln_basis_int,
576  OPERATOR::basis_functions<dim,2*dim> &soln_basis_ext,
577  OPERATOR::basis_functions<dim,2*dim> &flux_basis_int,
578  OPERATOR::basis_functions<dim,2*dim> &flux_basis_ext,
579  OPERATOR::local_basis_stiffness<dim,2*dim> &flux_basis_stiffness,
580  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_int,
581  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_ext,
585  std::array<std::vector<double>,dim> &mapping_support_points,
586  dealii::hp::FEFaceValues<dim,dim> &fe_values_collection_face_int,
587  dealii::hp::FEFaceValues<dim,dim> &fe_values_collection_face_ext,
588  dealii::hp::FESubfaceValues<dim,dim> &fe_values_collection_subface,
589  const dealii::FESystem<dim,dim> &fe_int,
590  const dealii::FESystem<dim,dim> &fe_ext,
591  const real penalty,
592  std::vector<double> &rhs_int,
593  std::vector<double> &rhs_ext,
594  dealii::Tensor<1,dim,std::vector<double>> &aux_rhs_int,
595  dealii::Tensor<1,dim,std::vector<double>> &aux_rhs_ext,
596  const bool compute_auxiliary_right_hand_side,
597  double &dual_dot_residual,
598  const bool compute_dRdW, const bool compute_dRdX, const bool compute_d2R,
599  const bool is_a_subface,
600  const unsigned int neighbor_i_subface) override
601  {
602  assemble_face_term_and_build_operators_ad_templated<double>(
603  cell,
604  neighbor_cell,
605  current_cell_index,
606  neighbor_cell_index,
607  iface,
608  neighbor_iface,
609  soln_coeff_int,
610  soln_coeff_ext,
611  aux_soln_coeff_int,
612  aux_soln_coeff_ext,
613  metric_coeff_int,
614  metric_coeff_ext,
615  dual_int,
616  dual_ext,
617  poly_degree_int,
618  poly_degree_ext,
619  grid_degree_int,
620  grid_degree_ext,
621  soln_basis_int,
622  soln_basis_ext,
623  flux_basis_int,
624  flux_basis_ext,
625  flux_basis_stiffness,
626  soln_basis_projection_oper_int,
627  soln_basis_projection_oper_ext,
628  metric_oper_int,
629  metric_oper_ext,
630  mapping_basis,
631  mapping_support_points,
635  fe_values_collection_face_int,
636  fe_values_collection_face_ext,
637  fe_values_collection_subface,
638  fe_int,
639  fe_ext,
640  penalty,
641  rhs_int,
642  rhs_ext,
643  aux_rhs_int,
644  aux_rhs_ext,
645  compute_auxiliary_right_hand_side,
646  dual_dot_residual,
647  compute_dRdW, compute_dRdX, compute_d2R,
648  is_a_subface,
649  neighbor_i_subface);
650  }
651 
654  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
655  typename dealii::DoFHandler<dim>::active_cell_iterator neighbor_cell,
656  const dealii::types::global_dof_index current_cell_index,
657  const dealii::types::global_dof_index neighbor_cell_index,
658  const unsigned int iface,
659  const unsigned int neighbor_iface,
660  const std::vector<codi_JacobianComputationType> &soln_coeff_int,
661  const std::vector<codi_JacobianComputationType> &soln_coeff_ext,
662  const dealii::Tensor<1,dim,std::vector<codi_JacobianComputationType>> &aux_soln_coeff_int,
663  const dealii::Tensor<1,dim,std::vector<codi_JacobianComputationType>> &aux_soln_coeff_ext,
664  const std::vector<codi_JacobianComputationType> &metric_coeff_int,
665  const std::vector<codi_JacobianComputationType> &metric_coeff_ext,
666  const std::vector< double > &dual_int,
667  const std::vector< double > &dual_ext,
668  const unsigned int poly_degree_int,
669  const unsigned int poly_degree_ext,
670  const unsigned int grid_degree_int,
671  const unsigned int grid_degree_ext,
672  OPERATOR::basis_functions<dim,2*dim> &soln_basis_int,
673  OPERATOR::basis_functions<dim,2*dim> &soln_basis_ext,
674  OPERATOR::basis_functions<dim,2*dim> &flux_basis_int,
675  OPERATOR::basis_functions<dim,2*dim> &flux_basis_ext,
676  OPERATOR::local_basis_stiffness<dim,2*dim> &flux_basis_stiffness,
677  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_int,
678  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_ext,
682  std::array<std::vector<codi_JacobianComputationType>,dim> &mapping_support_points,
683  dealii::hp::FEFaceValues<dim,dim> &fe_values_collection_face_int,
684  dealii::hp::FEFaceValues<dim,dim> &fe_values_collection_face_ext,
685  dealii::hp::FESubfaceValues<dim,dim> &fe_values_collection_subface,
686  const dealii::FESystem<dim,dim> &fe_int,
687  const dealii::FESystem<dim,dim> &fe_ext,
688  const real penalty,
689  std::vector<codi_JacobianComputationType> &rhs_int,
690  std::vector<codi_JacobianComputationType> &rhs_ext,
691  dealii::Tensor<1,dim,std::vector<codi_JacobianComputationType>> &aux_rhs_int,
692  dealii::Tensor<1,dim,std::vector<codi_JacobianComputationType>> &aux_rhs_ext,
693  const bool compute_auxiliary_right_hand_side,
694  codi_JacobianComputationType &dual_dot_residual,
695  const bool compute_dRdW, const bool compute_dRdX, const bool compute_d2R,
696  const bool is_a_subface,
697  const unsigned int neighbor_i_subface) override
698  {
699  assemble_face_term_and_build_operators_ad_templated<codi_JacobianComputationType>(
700  cell,
701  neighbor_cell,
702  current_cell_index,
703  neighbor_cell_index,
704  iface,
705  neighbor_iface,
706  soln_coeff_int,
707  soln_coeff_ext,
708  aux_soln_coeff_int,
709  aux_soln_coeff_ext,
710  metric_coeff_int,
711  metric_coeff_ext,
712  dual_int,
713  dual_ext,
714  poly_degree_int,
715  poly_degree_ext,
716  grid_degree_int,
717  grid_degree_ext,
718  soln_basis_int,
719  soln_basis_ext,
720  flux_basis_int,
721  flux_basis_ext,
722  flux_basis_stiffness,
723  soln_basis_projection_oper_int,
724  soln_basis_projection_oper_ext,
725  metric_oper_int,
726  metric_oper_ext,
727  mapping_basis,
728  mapping_support_points,
732  fe_values_collection_face_int,
733  fe_values_collection_face_ext,
734  fe_values_collection_subface,
735  fe_int,
736  fe_ext,
737  penalty,
738  rhs_int,
739  rhs_ext,
740  aux_rhs_int,
741  aux_rhs_ext,
742  compute_auxiliary_right_hand_side,
743  dual_dot_residual,
744  compute_dRdW, compute_dRdX, compute_d2R,
745  is_a_subface,
746  neighbor_i_subface);
747  }
748 
751  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
752  typename dealii::DoFHandler<dim>::active_cell_iterator neighbor_cell,
753  const dealii::types::global_dof_index current_cell_index,
754  const dealii::types::global_dof_index neighbor_cell_index,
755  const unsigned int iface,
756  const unsigned int neighbor_iface,
757  const std::vector<codi_HessianComputationType> &soln_coeff_int,
758  const std::vector<codi_HessianComputationType> &soln_coeff_ext,
759  const dealii::Tensor<1,dim,std::vector<codi_HessianComputationType>> &aux_soln_coeff_int,
760  const dealii::Tensor<1,dim,std::vector<codi_HessianComputationType>> &aux_soln_coeff_ext,
761  const std::vector<codi_HessianComputationType> &metric_coeff_int,
762  const std::vector<codi_HessianComputationType> &metric_coeff_ext,
763  const std::vector< double > &dual_int,
764  const std::vector< double > &dual_ext,
765  const unsigned int poly_degree_int,
766  const unsigned int poly_degree_ext,
767  const unsigned int grid_degree_int,
768  const unsigned int grid_degree_ext,
769  OPERATOR::basis_functions<dim,2*dim> &soln_basis_int,
770  OPERATOR::basis_functions<dim,2*dim> &soln_basis_ext,
771  OPERATOR::basis_functions<dim,2*dim> &flux_basis_int,
772  OPERATOR::basis_functions<dim,2*dim> &flux_basis_ext,
773  OPERATOR::local_basis_stiffness<dim,2*dim> &flux_basis_stiffness,
774  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_int,
775  OPERATOR::vol_projection_operator<dim,2*dim> &soln_basis_projection_oper_ext,
779  std::array<std::vector<codi_HessianComputationType>,dim> &mapping_support_points,
780  dealii::hp::FEFaceValues<dim,dim> &fe_values_collection_face_int,
781  dealii::hp::FEFaceValues<dim,dim> &fe_values_collection_face_ext,
782  dealii::hp::FESubfaceValues<dim,dim> &fe_values_collection_subface,
783  const dealii::FESystem<dim,dim> &fe_int,
784  const dealii::FESystem<dim,dim> &fe_ext,
785  const real penalty,
786  std::vector<codi_HessianComputationType> &rhs_int,
787  std::vector<codi_HessianComputationType> &rhs_ext,
788  dealii::Tensor<1,dim,std::vector<codi_HessianComputationType>> &aux_rhs_int,
789  dealii::Tensor<1,dim,std::vector<codi_HessianComputationType>> &aux_rhs_ext,
790  const bool compute_auxiliary_right_hand_side,
791  codi_HessianComputationType &dual_dot_residual,
792  const bool compute_dRdW, const bool compute_dRdX, const bool compute_d2R,
793  const bool is_a_subface,
794  const unsigned int neighbor_i_subface) override
795  {
796  assemble_face_term_and_build_operators_ad_templated<codi_HessianComputationType>(
797  cell,
798  neighbor_cell,
799  current_cell_index,
800  neighbor_cell_index,
801  iface,
802  neighbor_iface,
803  soln_coeff_int,
804  soln_coeff_ext,
805  aux_soln_coeff_int,
806  aux_soln_coeff_ext,
807  metric_coeff_int,
808  metric_coeff_ext,
809  dual_int,
810  dual_ext,
811  poly_degree_int,
812  poly_degree_ext,
813  grid_degree_int,
814  grid_degree_ext,
815  soln_basis_int,
816  soln_basis_ext,
817  flux_basis_int,
818  flux_basis_ext,
819  flux_basis_stiffness,
820  soln_basis_projection_oper_int,
821  soln_basis_projection_oper_ext,
822  metric_oper_int,
823  metric_oper_ext,
824  mapping_basis,
825  mapping_support_points,
829  fe_values_collection_face_int,
830  fe_values_collection_face_ext,
831  fe_values_collection_subface,
832  fe_int,
833  fe_ext,
834  penalty,
835  rhs_int,
836  rhs_ext,
837  aux_rhs_int,
838  aux_rhs_ext,
839  compute_auxiliary_right_hand_side,
840  dual_dot_residual,
841  compute_dRdW, compute_dRdX, compute_d2R,
842  is_a_subface,
843  neighbor_i_subface);
844  }
845 
846 private:
849  typename dealii::DoFHandler<dim>::active_cell_iterator cell,
850  const dealii::types::global_dof_index current_cell_index,
851  const dealii::FEValues<dim,dim> &fe_values_volume,
852  const std::vector<dealii::types::global_dof_index> &current_dofs_indices,
853  const std::vector<dealii::types::global_dof_index> &metric_dof_indices,
854  const unsigned int poly_degree,
855  const unsigned int grid_degree,
856  dealii::Vector<real> &current_cell_rhs,
857  const dealii::FEValues<dim,dim> &fe_values_lagrange);
858 
859 
861 
862 public:
864  template <typename adtype>
866  const unsigned int /*poly_degree*/,
867  const unsigned int /*grid_degree*/,
868  const std::vector<adtype> &/*metric_coeffs*/,
871  std::array<std::vector<adtype>,dim> &/*mapping_support_points*/)
872  {
873  //Do Nothing.
874  }
877  const unsigned int poly_degree,
878  const unsigned int grid_degree,
879  const std::vector<double> &metric_coeffs,
882  std::array<std::vector<double>,dim> &mapping_support_points)
883  {
884  build_volume_metric_operators<double>(poly_degree, grid_degree, metric_coeffs, metric_oper, mapping_basis, mapping_support_points);
885  }
888  const unsigned int poly_degree,
889  const unsigned int grid_degree,
890  const std::vector<codi_JacobianComputationType> &metric_coeffs,
893  std::array<std::vector<codi_JacobianComputationType>,dim> &mapping_support_points)
894  {
895  build_volume_metric_operators<codi_JacobianComputationType>(poly_degree, grid_degree, metric_coeffs, metric_oper, mapping_basis, mapping_support_points);
896  }
899  const unsigned int poly_degree,
900  const unsigned int grid_degree,
901  const std::vector<codi_HessianComputationType> &metric_coeffs,
904  std::array<std::vector<codi_HessianComputationType>,dim> &mapping_support_points)
905  {
906  build_volume_metric_operators<codi_HessianComputationType>(poly_degree, grid_degree, metric_coeffs, metric_oper, mapping_basis, mapping_support_points);
907  }
908 
909 }; // end of DGWeak class
910 
911 } // PHiLiP namespace
912 
913 #endif
codi::RealReverseIndexVec< dimReverseAD > codi_JacobianComputationType
Reverse mode type for Jacobian computation using TapeHelper.
Definition: ADTypes.hpp:20
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 compute_dRdW, const bool compute_dRdX, const bool compute_d2R, const bool is_a_subface, const unsigned int neighbor_i_subface) override
Calls the function to assemble face residual. For codi_HessianComputationType.
Definition: weak_dg.hpp:750
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: weak_dg.cpp:378
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 compute_dRdW, const bool compute_dRdX, const bool compute_d2R, const bool is_a_subface, const unsigned int neighbor_i_subface) override
Calls the function to assemble face residual. For codi_JacobianComputationType.
Definition: weak_dg.hpp:653
Base class from which Advection, Diffusion, ConvectionDiffusion, and Euler is derived.
Definition: physics.h:34
Class to store local solution coefficients and provide evaluation functions.
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). Does nothing for weak DG. For codi_HessianComputationType.
Definition: weak_dg.hpp:898
Base class of numerical flux associated with dissipation.
Files for the baseline physics.
Definition: ADTypes.hpp:10
DGWeak class templated on the number of state variables.
Definition: weak_dg.hpp:17
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: weak_dg.hpp:450
DGWeak(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: weak_dg.cpp:368
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: weak_dg.hpp:196
Main parameter class that contains the various other sub-parameter classes.
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: weak_dg.hpp:395
void assemble_auxiliary_residual(const bool, const bool, const bool)
Assembles the auxiliary equations&#39; residuals and solves for the auxiliary variables.
Definition: weak_dg.cpp:2000
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
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 >> &, const std::vector< adtype > &metric_coeffs, const std::vector< real > &local_dual, const unsigned int face_number, const unsigned int boundary_id, const 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, const unsigned int, OPERATOR::basis_functions< dim, 2 *dim > &, OPERATOR::basis_functions< dim, 2 *dim > &, OPERATOR::vol_projection_operator< dim, 2 *dim > &, OPERATOR::metric_operators< adtype, dim, 2 *dim > &, OPERATOR::mapping_shape_functions< dim, 2 *dim > &, std::array< std::vector< adtype >, dim > &, dealii::hp::FEFaceValues< dim, dim > &fe_values_collection_face_int, const dealii::FESystem< dim, dim > &fe_soln, const real penalty, std::vector< adtype > &rhs, dealii::Tensor< 1, dim, std::vector< adtype >> &, const bool, adtype &dual_dot_residual)
Calls the function to assemble boundary residual.
Definition: weak_dg.cpp:1757
The mapping shape functions evaluated at the desired nodes (facet set included in volume grid nodes f...
Definition: operators.h:1071
Base class of numerical flux associated with convection.
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). Does nothing for weak DG. For codi_JacobianComputationType.
Definition: weak_dg.hpp:887
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: weak_dg.hpp:139
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 >> &, 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, const Physics::PhysicsBase< dim, nspecies, nstate, adtype > &physics, OPERATOR::basis_functions< dim, 2 *dim > &, OPERATOR::basis_functions< dim, 2 *dim > &, OPERATOR::local_basis_stiffness< dim, 2 *dim > &, OPERATOR::vol_projection_operator< dim, 2 *dim > &, OPERATOR::vol_projection_operator< dim, 2 *dim > &, OPERATOR::metric_operators< adtype, dim, 2 *dim > &, OPERATOR::mapping_shape_functions< dim, 2 *dim > &, std::array< std::vector< adtype >, dim > &, 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< adtype > &rhs, dealii::Tensor< 1, dim, std::vector< adtype >> &, const bool, adtype &dual_dot_residual)
Calls the function to assemble volume residual.
Definition: weak_dg.cpp:1674
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 compute_dRdW, const bool compute_dRdX, const bool compute_d2R, const bool is_a_subface, const unsigned int neighbor_i_subface) override
Calls the function to assemble face residual. For double type.
Definition: weak_dg.hpp:556
void assemble_boundary_term(typename dealii::DoFHandler< dim >::active_cell_iterator cell, const dealii::types::global_dof_index current_cell_index, const LocalSolution< real2, dim, nspecies, nstate > &local_solution, const LocalSolution< real2, dim, nspecies, dim > &local_metric, const std::vector< real > &local_dual, const unsigned int face_number, const unsigned int boundary_id, const Physics::PhysicsBase< dim, nspecies, nstate, real2 > &physics, const NumericalFlux::NumericalFluxConvective< dim, nspecies, nstate, real2 > &conv_num_flux, const NumericalFlux::NumericalFluxDissipative< dim, nspecies, nstate, real2 > &diss_num_flux, const dealii::FEFaceValuesBase< dim, dim > &fe_values_boundary, const real penalty, const dealii::Quadrature< dim-1 > &quadrature, std::vector< real2 > &rhs, real2 &dual_dot_residual, const bool compute_metric_derivatives)
Main function responsible for evaluating the boundary integral and the specified derivatives.
Definition: weak_dg.cpp:565
typename DGBase< dim, nspecies, real, MeshType >::Triangulation Triangulation
Alias to base class Triangulation.
void build_volume_metric_operators(const unsigned int, const unsigned int, const std::vector< adtype > &, OPERATOR::metric_operators< adtype, dim, 2 *dim > &, OPERATOR::mapping_shape_functions< dim, 2 *dim > &, std::array< std::vector< adtype >, dim > &)
< Parallel std::cout that only outputs on mpi_rank==0
Definition: weak_dg.hpp:865
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_volume_term(typename dealii::DoFHandler< dim >::active_cell_iterator cell, const dealii::types::global_dof_index current_cell_index, const LocalSolution< real2, dim, nspecies, nstate > &local_solution, const LocalSolution< real2, dim, nspecies, dim > &local_metric, const std::vector< real > &local_dual, const dealii::Quadrature< dim > &quadrature, const Physics::PhysicsBase< dim, nspecies, nstate, real2 > &physics, std::vector< real2 > &rhs, real2 &dual_dot_residual, const bool compute_metric_derivatives, const dealii::FEValues< dim, dim > &fe_values_vol)
Main function responsible for evaluating the integral over the cell volume and the specified derivati...
Definition: weak_dg.cpp:1412
void allocate_dual_vector(const bool compute_d2R)
Allocate the dual vector for optimization.
Definition: weak_dg.cpp:2006
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_coeff_int, const std::vector< adtype > &soln_coeff_ext, const dealii::Tensor< 1, dim, std::vector< adtype >> &, const dealii::Tensor< 1, dim, std::vector< adtype >> &, 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, const unsigned int, const unsigned int, const unsigned int, OPERATOR::basis_functions< dim, 2 *dim > &, OPERATOR::basis_functions< dim, 2 *dim > &, OPERATOR::basis_functions< dim, 2 *dim > &, OPERATOR::basis_functions< dim, 2 *dim > &, OPERATOR::local_basis_stiffness< dim, 2 *dim > &, OPERATOR::vol_projection_operator< dim, 2 *dim > &, OPERATOR::vol_projection_operator< dim, 2 *dim > &, OPERATOR::metric_operators< adtype, dim, 2 *dim > &, OPERATOR::metric_operators< adtype, dim, 2 *dim > &, OPERATOR::mapping_shape_functions< dim, 2 *dim > &, std::array< std::vector< adtype >, dim > &, const 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 > &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< adtype > &rhs_int, std::vector< adtype > &rhs_ext, dealii::Tensor< 1, dim, std::vector< adtype >> &, dealii::Tensor< 1, dim, std::vector< adtype >> &, const bool, adtype &dual_dot_residual, const bool compute_dRdW, const bool compute_dRdX, const bool compute_d2R, const bool is_a_subface, const unsigned int neighbor_i_subface)
Calls the function to assemble face residual.
Definition: weak_dg.cpp:1831
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). Does nothing for weak DG. For double type.
Definition: weak_dg.hpp:876
void assemble_face_term(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 LocalSolution< real2, dim, nspecies, nstate > &soln_int, const LocalSolution< real2, dim, nspecies, nstate > &soln_ext, const LocalSolution< real2, dim, nspecies, dim > &metric_int, const LocalSolution< real2, dim, nspecies, dim > &metric_ext, const std::vector< double > &dual_int, const std::vector< double > &dual_ext, const std::pair< unsigned int, int > face_subface_int, const std::pair< unsigned int, int > face_subface_ext, const typename dealii::QProjector< dim >::DataSetDescriptor face_data_set_int, const typename dealii::QProjector< dim >::DataSetDescriptor face_data_set_ext, const Physics::PhysicsBase< dim, nspecies, nstate, real2 > &physics, const NumericalFlux::NumericalFluxConvective< dim, nspecies, nstate, real2 > &conv_num_flux, const NumericalFlux::NumericalFluxDissipative< dim, nspecies, nstate, real2 > &diss_num_flux, const dealii::FEFaceValuesBase< dim, dim > &fe_values_int, const dealii::FEFaceValuesBase< dim, dim > &fe_values_ext, const real penalty, const dealii::Quadrature< dim-1 > &face_quadrature, std::vector< real2 > &rhs_int, std::vector< real2 > &rhs_ext, real2 &dual_dot_residual, const bool compute_dRdW, const bool compute_dRdX, const bool compute_d2R)
Main function responsible for evaluating the internal face integral and the specified derivatives...
Definition: weak_dg.cpp:936
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: weak_dg.hpp:253
DGBase is independent of the number of state variables.
Definition: dg_base.hpp:82
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 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: weak_dg.hpp:340