1 #ifndef __STRONG_DISCONTINUOUSGALERKIN_H__ 2 #define __STRONG_DISCONTINUOUSGALERKIN_H__ 4 #include "dg_base_state.hpp" 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>>
14 template <
int dim,
int nspecies,
int nstate,
typename real,
typename MeshType = dealii::parallel::distributed::Triangulation<dim>>
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);
35 const bool wall_model_input_from_second_element;
50 template<
typename DoFCellAccessorType1,
typename DoFCellAccessorType2>
52 const DoFCellAccessorType1 ¤t_cell,
53 const DoFCellAccessorType2 ¤t_metric_cell,
54 std::vector<dealii::LinearAlgebra::distributed::Vector<double>> &rhs);
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,
78 std::array<std::vector<adtype>,dim> &mapping_support_points,
79 dealii::hp::FEValues<dim,dim> &,
80 dealii::hp::FEValues<dim,dim> &,
81 const dealii::FESystem<dim,dim> &,
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);
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,
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 115 assemble_volume_term_and_build_operators_ad_templated<double>(
129 flux_basis_stiffness,
130 soln_basis_projection_oper_int,
131 soln_basis_projection_oper_ext,
134 mapping_support_points,
135 fe_values_collection_volume,
136 fe_values_collection_volume_lagrange,
140 compute_auxiliary_right_hand_side,
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,
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,
172 assemble_volume_term_and_build_operators_ad_templated<codi_JacobianComputationType>(
186 flux_basis_stiffness,
187 soln_basis_projection_oper_int,
188 soln_basis_projection_oper_ext,
191 mapping_support_points,
192 fe_values_collection_volume,
193 fe_values_collection_volume_lagrange,
197 compute_auxiliary_right_hand_side,
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,
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,
229 assemble_volume_term_and_build_operators_ad_templated<codi_HessianComputationType>(
243 flux_basis_stiffness,
244 soln_basis_projection_oper_int,
245 soln_basis_projection_oper_ext,
248 mapping_support_points,
249 fe_values_collection_volume,
250 fe_values_collection_volume_lagrange,
254 compute_auxiliary_right_hand_side,
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,
279 std::array<std::vector<adtype>,dim> &mapping_support_points,
280 dealii::hp::FEFaceValues<dim,dim> &,
281 const dealii::FESystem<dim,dim> &,
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);
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,
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,
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 314 assemble_boundary_term_and_build_operators_ad_templated<double>(
330 soln_basis_projection_oper_int,
333 mapping_support_points,
334 fe_values_collection_face_int,
339 compute_auxiliary_right_hand_side,
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,
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,
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,
369 assemble_boundary_term_and_build_operators_ad_templated<codi_JacobianComputationType>(
385 soln_basis_projection_oper_int,
388 mapping_support_points,
389 fe_values_collection_face_int,
394 compute_auxiliary_right_hand_side,
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,
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,
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,
424 assemble_boundary_term_and_build_operators_ad_templated<codi_HessianComputationType>(
440 soln_basis_projection_oper_int,
443 mapping_support_points,
444 fe_values_collection_face_int,
449 compute_auxiliary_right_hand_side,
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,
484 std::array<std::vector<adtype>,dim> &mapping_support_points,
488 dealii::hp::FEFaceValues<dim,dim> &,
489 dealii::hp::FEFaceValues<dim,dim> &,
490 dealii::hp::FESubfaceValues<dim,dim> &,
491 const dealii::FESystem<dim,dim> &,
492 const dealii::FESystem<dim,dim> &,
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,
501 const unsigned int );
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,
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,
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 ,
const bool ,
const bool ,
547 const bool is_a_subface,
548 const unsigned int neighbor_i_subface)
override 550 assemble_face_term_and_build_operators_ad_templated<double>(
573 flux_basis_stiffness,
574 soln_basis_projection_oper_int,
575 soln_basis_projection_oper_ext,
579 mapping_support_points,
583 fe_values_collection_face_int,
584 fe_values_collection_face_ext,
585 fe_values_collection_subface,
593 compute_auxiliary_right_hand_side,
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,
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,
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,
642 const bool ,
const bool ,
const bool ,
643 const bool is_a_subface,
644 const unsigned int neighbor_i_subface)
override 646 assemble_face_term_and_build_operators_ad_templated<codi_JacobianComputationType>(
669 flux_basis_stiffness,
670 soln_basis_projection_oper_int,
671 soln_basis_projection_oper_ext,
675 mapping_support_points,
679 fe_values_collection_face_int,
680 fe_values_collection_face_ext,
681 fe_values_collection_subface,
689 compute_auxiliary_right_hand_side,
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,
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,
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,
738 const bool ,
const bool ,
const bool ,
739 const bool is_a_subface,
740 const unsigned int neighbor_i_subface)
override 742 assemble_face_term_and_build_operators_ad_templated<codi_HessianComputationType>(
765 flux_basis_stiffness,
766 soln_basis_projection_oper_int,
767 soln_basis_projection_oper_ext,
771 mapping_support_points,
775 fe_values_collection_face_int,
776 fe_values_collection_face_ext,
777 fe_values_collection_subface,
785 compute_auxiliary_right_hand_side,
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);
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);
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,
846 dealii::Tensor<1,dim,std::vector<adtype>> &local_auxiliary_RHS_int,
847 dealii::Tensor<1,dim,std::vector<adtype>> &local_auxiliary_RHS_ext);
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,
881 std::vector<adtype> &local_rhs_int_cell);
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,
902 std::vector<adtype> &local_rhs_cell);
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,
939 std::vector<adtype> &local_rhs_int_cell,
940 std::vector<adtype> &local_rhs_ext_cell);
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> ¤t_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> ¤t_cell_rhs,
953 const dealii::FEValues<dim,dim> &fe_values_lagrange);
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)
978 build_volume_metric_operators<double>(poly_degree, grid_degree, metric_coeffs, metric_oper, mapping_basis, mapping_support_points);
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)
989 build_volume_metric_operators<codi_JacobianComputationType>(poly_degree, grid_degree, metric_coeffs, metric_oper, mapping_basis, mapping_support_points);
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)
1000 build_volume_metric_operators<codi_HessianComputationType>(poly_degree, grid_degree, metric_coeffs, metric_oper, mapping_basis, mapping_support_points);
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's facet right-hand-side.
codi::RealReverseIndexVec< dimReverseAD > codi_JacobianComputationType
Reverse mode type for Jacobian computation using TapeHelper.
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.
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.
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...
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 > ¤t_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 > ¤t_cell_rhs, const dealii::FEValues< dim, dim > &fe_values_lagrange)
Evaluate the integral over the cell volume.
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
Base class from which Advection, Diffusion, ConvectionDiffusion, and Euler is derived.
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.
Base class of numerical flux associated with dissipation.
Files for the baseline physics.
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. ...
const int nstate
Number of state variables.
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.
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.
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.
const bool using_wall_model
Flag for using wall model.
const bool use_projected_entropy_variables_for_nsfr_boundary_term
Flag for using the second element as the wall model input.
const bool do_compute_filtered_solution
Flag to compute the filtered solution.
DGStrong class templated on the number of state variables.
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.
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.
Base metric operators class that stores functions used in both the volume and on surface.
The mapping shape functions evaluated at the desired nodes (facet set included in volume grid nodes f...
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.
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...
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.
const bool apply_modal_high_pass_filter_on_filtered_solution
Flag to apply modal high pass filter on the filtered solution.
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.
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's boundary right-hand-side.
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.
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.
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.
void assemble_cell_auxiliary_residual(const DoFCellAccessorType1 ¤t_cell, const DoFCellAccessorType2 ¤t_metric_cell, std::vector< dealii::LinearAlgebra::distributed::Vector< double >> &rhs)
Assembles the auxiliary equations' cell residuals.
const unsigned int poly_degree_max_large_scales
For filtered solution; lower bound of high pass filter.
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's volume right-hand-side.
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.
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.
void allocate_dual_vector(const bool compute_d2R)
Allocate the dual vector for optimization.
DGBase is independent of the number of state variables.
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.
Projection operator corresponding to basis functions onto M-norm (L2).
Local stiffness matrix without jacobian dependence.
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.