1 #ifndef __OPERATORS_H__ 2 #define __OPERATORS_H__ 4 #include <deal.II/base/conditional_ostream.h> 5 #include <deal.II/base/parameter_handler.h> 7 #include <deal.II/base/qprojector.h> 9 #include <deal.II/grid/tria.h> 11 #include <deal.II/fe/fe_dgq.h> 12 #include <deal.II/fe/fe_dgp.h> 13 #include <deal.II/fe/fe_system.h> 14 #include <deal.II/fe/mapping_fe_field.h> 15 #include <deal.II/fe/fe_q.h> 17 #include <deal.II/dofs/dof_handler.h> 19 #include <deal.II/hp/q_collection.h> 20 #include <deal.II/hp/mapping_collection.h> 21 #include <deal.II/hp/fe_values.h> 23 #include <deal.II/lac/vector.h> 24 #include <deal.II/lac/sparsity_pattern.h> 25 #include <deal.II/lac/trilinos_sparse_matrix.h> 26 #include <deal.II/lac/trilinos_vector.h> 28 #include <Epetra_RowMatrixTransposer.h> 31 #include "ADTypes.hpp" 33 #include <CoDiPack/include/codi.hpp> 35 #include "parameters/all_parameters.h" 36 #include "parameters/parameters.h" 52 template <
int dim,
int n_faces,
typename real>
61 const int nstate_input,
62 const unsigned int max_degree_input,
63 const unsigned int grid_degree_input);
80 const dealii::FullMatrix<double> &basis_x,
81 const dealii::FullMatrix<double> &basis_y,
82 const dealii::FullMatrix<double> &basis_z);
93 const dealii::FullMatrix<double> &basis_x,
94 const dealii::FullMatrix<double> &basis_y,
95 const dealii::FullMatrix<double> &basis_z);
102 const std::vector<real> &input_vect,
103 std::vector<real> &output_vect,
104 const dealii::FullMatrix<double> &basis_x,
105 const dealii::FullMatrix<double> &basis_y,
106 const dealii::FullMatrix<double> &basis_z,
107 const bool adding =
false,
108 const double factor = 1.0) = 0;
111 const std::vector<real> &input_vect,
112 const std::vector<real> &weight_vect,
113 std::vector<real> &output_vect,
114 const dealii::FullMatrix<double> &basis_x,
115 const dealii::FullMatrix<double> &basis_y,
116 const dealii::FullMatrix<double> &basis_z,
117 const bool adding =
false,
118 const double factor = 1.0) = 0;
130 template<
int dim,
int n_faces,
typename real>
136 const int nstate_input,
137 const unsigned int max_degree_input,
138 const unsigned int grid_degree_input);
148 const std::vector<real> &input_vect,
149 std::vector<real> &output_vect,
150 const dealii::FullMatrix<double> &basis_x,
151 const dealii::FullMatrix<double> &basis_y,
152 const dealii::FullMatrix<double> &basis_z,
153 const bool adding =
false,
154 const double factor = 1.0)
override;
166 void divergence_matrix_vector_mult(
167 const dealii::Tensor<1,dim,std::vector<real>> &input_vect,
168 std::vector<real> &output_vect,
169 const dealii::FullMatrix<double> &basis_x,
170 const dealii::FullMatrix<double> &basis_y,
171 const dealii::FullMatrix<double> &basis_z,
172 const dealii::FullMatrix<double> &gradient_basis_x,
173 const dealii::FullMatrix<double> &gradient_basis_y,
174 const dealii::FullMatrix<double> &gradient_basis_z);
177 void divergence_matrix_vector_mult_1D(
178 const dealii::Tensor<1,dim,std::vector<real>> &input_vect,
179 std::vector<real> &output_vect,
180 const dealii::FullMatrix<double> &basis,
181 const dealii::FullMatrix<double> &gradient_basis);
184 void gradient_matrix_vector_mult(
185 const std::vector<real> &input_vect,
186 dealii::Tensor<1,dim,std::vector<real>> &output_vect,
187 const dealii::FullMatrix<double> &basis_x,
188 const dealii::FullMatrix<double> &basis_y,
189 const dealii::FullMatrix<double> &basis_z,
190 const dealii::FullMatrix<double> &gradient_basis_x,
191 const dealii::FullMatrix<double> &gradient_basis_y,
192 const dealii::FullMatrix<double> &gradient_basis_z);
194 void gradient_matrix_vector_mult_1D(
195 const std::vector<real> &input_vect,
196 dealii::Tensor<1,dim,std::vector<real>> &output_vect,
197 const dealii::FullMatrix<double> &basis,
198 const dealii::FullMatrix<double> &gradient_basis);
204 const std::vector<real> &input_vect,
205 const std::vector<real> &weight_vect,
206 std::vector<real> &output_vect,
207 const dealii::FullMatrix<double> &basis_x,
208 const dealii::FullMatrix<double> &basis_y,
209 const dealii::FullMatrix<double> &basis_z,
210 const bool adding =
false,
211 const double factor = 1.0)
override;
219 void divergence_two_pt_flux_Hadamard_product(
220 const dealii::Tensor<1,dim,dealii::FullMatrix<real>> &input_mat,
221 std::vector<real> &output_vect,
222 const std::vector<real> &weights,
223 const dealii::FullMatrix<double> &basis,
224 const double scaling = 2.0);
228 void surface_two_pt_flux_Hadamard_product(
229 const dealii::FullMatrix<real> &input_mat,
230 std::vector<real> &output_vect_vol,
231 std::vector<real> &output_vect_surf,
232 const std::vector<real> &weights,
233 const std::array<dealii::FullMatrix<double>,2> &surf_basis,
234 const unsigned int iface,
235 const unsigned int dim_not_zero,
236 const double scaling = 2.0);
248 void two_pt_flux_Hadamard_product(
249 const dealii::FullMatrix<real> &input_mat,
250 dealii::FullMatrix<real> &output_mat,
251 const dealii::FullMatrix<double> &basis,
252 const std::vector<real> &weights,
253 const int direction);
257 void sum_factorized_Hadamard_sparsity_pattern(
258 const unsigned int rows_size,
259 const unsigned int columns_size,
260 std::vector<std::array<unsigned int,dim>> &rows,
261 std::vector<std::array<unsigned int,dim>> &columns);
264 void sum_factorized_Hadamard_basis_assembly(
265 const unsigned int rows_size_1D,
266 const unsigned int columns_size_1D,
267 const std::vector<std::array<unsigned int,dim>> &rows,
268 const std::vector<std::array<unsigned int,dim>> &columns,
269 const dealii::FullMatrix<double> &basis,
270 const std::vector<double> &weights,
271 std::array<dealii::FullMatrix<double>,dim> &basis_sparse);
274 void sum_factorized_Hadamard_surface_sparsity_pattern(
275 const unsigned int rows_size,
276 const unsigned int columns_size,
277 std::vector<unsigned int> &rows,
278 std::vector<unsigned int> &columns,
279 const int dim_not_zero);
282 void sum_factorized_Hadamard_surface_basis_assembly(
283 const unsigned int rows_size,
284 const unsigned int columns_size_1D,
285 const std::vector<unsigned int> &rows,
286 const std::vector<unsigned int> &columns,
287 const dealii::FullMatrix<double> &basis,
288 const std::vector<double> &weights,
289 dealii::FullMatrix<double> &basis_sparse,
290 const int dim_not_zero);
296 void matrix_vector_mult_1D(
297 const std::vector<real> &input_vect,
298 std::vector<real> &output_vect,
299 const dealii::FullMatrix<double> &basis_x,
300 const bool adding =
false,
301 const double factor = 1.0);
307 void inner_product_1D(
308 const std::vector<real> &input_vect,
309 const std::vector<real> &weight_vect,
310 std::vector<real> &output_vect,
311 const dealii::FullMatrix<double> &basis_x,
312 const bool adding =
false,
313 const double factor = 1.0);
322 void matrix_vector_mult_surface_1D(
323 const unsigned int face_number,
324 const std::vector<real> &input_vect,
325 std::vector<real> &output_vect,
326 const std::array<dealii::FullMatrix<double>,2> &basis_surf,
327 const dealii::FullMatrix<double> &basis_vol,
328 const bool adding =
false,
329 const double factor = 1.0);
332 void inner_product_surface_1D(
333 const unsigned int face_number,
334 const std::vector<real> &input_vect,
335 const std::vector<real> &weight_vect,
336 std::vector<real> &output_vect,
337 const std::array<dealii::FullMatrix<double>,2> &basis_surf,
338 const dealii::FullMatrix<double> &basis_vol,
339 const bool adding =
false,
340 const double factor = 1.0);
347 void Hadamard_product(
348 const dealii::FullMatrix<real> &input_mat1,
349 const dealii::FullMatrix<real> &input_mat2,
350 dealii::FullMatrix<real> &output_mat);
380 template<
int dim,
int n_faces,
typename real>
386 const int nstate_input,
387 const unsigned int max_degree_input,
388 const unsigned int grid_degree_input);
394 void build_1D_volume_operator(
395 const dealii::FESystem<1,1> &finite_element,
396 const dealii::Quadrature<1> &quadrature);
399 void build_1D_gradient_operator(
400 const dealii::FESystem<1,1> &finite_element,
401 const dealii::Quadrature<1> &quadrature);
404 void build_1D_surface_operator(
405 const dealii::FESystem<1,1> &finite_element,
406 const dealii::Quadrature<0> &quadrature);
409 void build_1D_surface_gradient_operator(
410 const dealii::FESystem<1,1> &finite_element,
411 const dealii::Quadrature<0> &quadrature);
415 template<
int dim,
int n_faces,
typename real>
421 const int nstate_input,
422 const unsigned int max_degree_input,
423 const unsigned int grid_degree_input);
429 void build_1D_volume_operator(
430 const dealii::FESystem<1,1> &finite_element,
431 const dealii::Quadrature<1> &quadrature);
435 template<
int dim,
int n_faces,
typename real>
441 const int nstate_input,
442 const unsigned int max_degree_input,
443 const unsigned int grid_degree_input);
449 void build_1D_volume_operator(
450 const dealii::FESystem<1,1> &finite_element,
451 const dealii::Quadrature<1> &quadrature);
457 dealii::FullMatrix<double> build_dim_mass_matrix(
459 const unsigned int n_dofs,
const unsigned int n_quad_pts,
461 const std::vector<double> &det_Jac,
462 const std::vector<double> &quad_weights);
471 template<
int dim,
int n_faces,
typename real>
477 const int nstate_input,
478 const unsigned int max_degree_input,
479 const unsigned int grid_degree_input,
480 const bool store_skew_symmetric_form_input =
false);
489 void build_1D_volume_operator(
490 const dealii::FESystem<1,1> &finite_element,
491 const dealii::Quadrature<1> &quadrature);
498 template<
int dim,
int n_faces,
typename real>
504 const int nstate_input,
505 const unsigned int max_degree_input,
506 const unsigned int grid_degree_input);
512 void build_1D_volume_operator(
513 const dealii::FESystem<1,1> &finite_element,
514 const dealii::Quadrature<1> &quadrature);
518 template<
int dim,
int n_faces,
typename real>
524 const int nstate_input,
525 const unsigned int max_degree_input,
526 const unsigned int grid_degree_input);
532 void build_1D_volume_operator(
533 const dealii::FESystem<1,1> &finite_element,
534 const dealii::Quadrature<1> &quadrature);
538 template<
int dim,
int n_faces,
typename real>
544 const int nstate_input,
545 const unsigned int max_degree_input,
546 const unsigned int grid_degree_input,
561 void get_Huynh_g2_parameter (
562 const unsigned int curr_cell_degree,
568 void get_spectral_difference_parameter (
569 const unsigned int curr_cell_degree,
575 void get_c_negative_FR_parameter (
576 const unsigned int curr_cell_degree,
583 void get_c_negative_divided_by_two_FR_parameter (
584 const unsigned int curr_cell_degree,
592 void get_c_plus_parameter (
593 const unsigned int curr_cell_degree,
604 void get_FR_correction_parameter (
605 const unsigned int curr_cell_degree,
612 void build_local_Flux_Reconstruction_operator(
613 const dealii::FullMatrix<double> &local_Mass_Matrix,
614 const dealii::FullMatrix<double> &pth_derivative,
615 const unsigned int n_dofs,
617 dealii::FullMatrix<double> &Flux_Reconstruction_operator);
620 void build_1D_volume_operator(
621 const dealii::FESystem<1,1> &finite_element,
622 const dealii::Quadrature<1> &quadrature);
630 dealii::FullMatrix<double> build_dim_Flux_Reconstruction_operator(
631 const dealii::FullMatrix<double> &local_Mass_Matrix,
633 const unsigned int n_dofs);
642 dealii::FullMatrix<double> build_dim_Flux_Reconstruction_operator_directly(
644 const unsigned int n_dofs,
645 dealii::FullMatrix<double> &pth_deriv,
646 dealii::FullMatrix<double> &mass_matrix);
654 template<
int dim,
int n_faces,
typename real>
660 const int nstate_input,
661 const unsigned int max_degree_input,
662 const unsigned int grid_degree_input,
682 void get_FR_aux_correction_parameter (
683 const unsigned int curr_cell_degree,
687 void build_1D_volume_operator(
688 const dealii::FESystem<1,1> &finite_element,
689 const dealii::Quadrature<1> &quadrature);
693 template<
int dim,
int n_faces,
typename real>
699 const int nstate_input,
700 const unsigned int max_degree_input,
701 const unsigned int grid_degree_input);
707 void compute_local_vol_projection_operator(
708 const dealii::FullMatrix<double> &norm_matrix_inverse,
709 const dealii::FullMatrix<double> &integral_vol_basis,
710 dealii::FullMatrix<double> &volume_projection);
713 void build_1D_volume_operator(
714 const dealii::FESystem<1,1> &finite_element,
715 const dealii::Quadrature<1> &quadrature);
719 template<
int dim,
int n_faces,
typename real>
725 const int nstate_input,
726 const unsigned int max_degree_input,
727 const unsigned int grid_degree_input,
729 const bool store_transpose_input =
false);
741 void build_1D_volume_operator(
742 const dealii::FESystem<1,1> &finite_element,
743 const dealii::Quadrature<1> &quadrature);
750 template<
int dim,
int n_faces,
typename real>
756 const int nstate_input,
757 const unsigned int max_degree_input,
758 const unsigned int grid_degree_input,
760 const bool store_transpose_input =
false);
772 void build_1D_volume_operator(
773 const dealii::FESystem<1,1> &finite_element,
774 const dealii::Quadrature<1> &quadrature);
781 template<
int dim,
int n_faces,
typename real>
787 const int nstate_input,
788 const unsigned int max_degree_input,
789 const unsigned int grid_degree_input,
799 void build_1D_volume_operator(
800 const dealii::FESystem<1,1> &finite_element,
801 const dealii::Quadrature<1> &quadrature);
804 template<
int dim,
int n_faces,
typename real>
810 const int nstate_input,
811 const unsigned int max_degree_input,
812 const unsigned int grid_degree_input,
822 void build_1D_volume_operator(
823 const dealii::FESystem<1,1> &finite_element,
824 const dealii::Quadrature<1> &quadrature);
827 template<
int dim,
int n_faces,
typename real>
833 const int nstate_input,
834 const unsigned int max_degree_input,
835 const unsigned int grid_degree_input,
845 void build_1D_volume_operator(
846 const dealii::FESystem<1,1> &finite_element,
847 const dealii::Quadrature<1> &quadrature);
851 template<
int dim,
int n_faces,
typename real>
857 const int nstate_input,
858 const unsigned int max_degree_input,
859 const unsigned int grid_degree_input,
869 void build_1D_volume_operator(
870 const dealii::FESystem<1,1> &finite_element,
871 const dealii::Quadrature<1> &quadrature);
882 template <
int dim,
int n_faces,
typename real>
888 const int nstate_input,
889 const unsigned int max_degree_input,
890 const unsigned int grid_degree_input);
896 void build_1D_gradient_operator(
897 const dealii::FESystem<1,1> &finite_element,
898 const dealii::Quadrature<1> &quadrature);
915 template<
int dim,
int n_faces,
typename real>
921 const int nstate_input,
922 const unsigned int max_degree_input,
923 const unsigned int grid_degree_input);
929 void build_1D_surface_operator(
930 const dealii::FESystem<1,1> &finite_element,
931 const dealii::Quadrature<0> &face_quadrature);
940 template<
int dim,
int n_faces,
typename real>
946 const int nstate_input,
947 const unsigned int max_degree_input,
948 const unsigned int grid_degree_input);
954 void build_local_surface_lifting_operator (
955 const unsigned int n_dofs,
956 const dealii::FullMatrix<double> &norm_matrix,
957 const dealii::FullMatrix<double> &face_integral,
958 dealii::FullMatrix<double> &lifting);
963 void build_1D_volume_operator(
964 const dealii::FESystem<1,1> &finite_element,
965 const dealii::Quadrature<1> &face_quadrature);
968 void build_1D_surface_operator(
969 const dealii::FESystem<1,1> &finite_element,
970 const dealii::Quadrature<0> &face_quadrature);
981 template<
int dim,
int n_faces,
typename real>
987 const int nstate_input,
988 const unsigned int max_degree_input,
989 const unsigned int grid_degree_input,
1001 void build_1D_volume_operator(
1002 const dealii::FESystem<1,1> &finite_element,
1003 const dealii::Quadrature<1> &face_quadrature);
1006 void build_1D_surface_operator(
1007 const dealii::FESystem<1,1> &finite_element,
1008 const dealii::Quadrature<0> &face_quadrature);
1025 template<
int dim,
int n_faces,
typename real>
1031 const int nstate_input,
1032 const unsigned int max_degree_input,
1033 const unsigned int grid_degree_input);
1055 void build_1D_shape_functions_at_grid_nodes(
1056 const dealii::FESystem<1,1> &finite_element,
1057 const dealii::Quadrature<1> &quadrature);
1063 void build_1D_shape_functions_at_flux_nodes(
1064 const dealii::FESystem<1,1> &finite_element,
1065 const dealii::Quadrature<1> &quadrature,
1066 const dealii::Quadrature<0> &face_quadrature);
1073 void build_1D_shape_functions_at_volume_flux_nodes(
1074 const dealii::FESystem<1,1> &finite_element,
1075 const dealii::Quadrature<1> &quadrature);
1085 template <
typename real,
int dim,
int n_faces>
1091 const int nstate_input,
1092 const unsigned int max_degree_input,
1093 const unsigned int grid_degree_input,
1094 const bool store_vol_flux_nodes_input =
false,
1095 const bool store_surf_flux_nodes_input =
false,
1096 const bool store_Jacobian_input =
false);
1108 void transform_physical_to_reference(
1109 const dealii::Tensor<1,dim,real> &phys,
1110 const dealii::Tensor<2,dim,real> &metric_cofactor,
1111 dealii::Tensor<1,dim,real> &ref);
1114 void transform_reference_to_physical(
1115 const dealii::Tensor<1,dim,real> &ref,
1116 const dealii::Tensor<2,dim,real> &metric_cofactor,
1117 dealii::Tensor<1,dim,real> &phys);
1120 void transform_physical_to_reference_vector(
1121 const dealii::Tensor<1,dim,std::vector<real>> &phys,
1122 const dealii::Tensor<2,dim,std::vector<real>> &metric_cofactor,
1123 dealii::Tensor<1,dim,std::vector<real>> &ref);
1126 void transform_reference_unit_normal_to_physical_unit_normal(
1127 const unsigned int n_quad_pts,
1128 const dealii::Tensor<1,dim,real> &ref,
1129 const dealii::Tensor<2,dim,std::vector<real>> &metric_cofactor,
1130 std::vector<dealii::Tensor<1,dim,real>> &phys);
1133 void build_determinant_volume_metric_Jacobian(
1134 const unsigned int n_quad_pts,
1135 const unsigned int n_metric_dofs,
1136 const std::array<std::vector<real>,dim> &mapping_support_points,
1144 void build_volume_metric_operators(
1145 const unsigned int n_quad_pts,
1146 const unsigned int n_metric_dofs,
1147 const std::array<std::vector<real>,dim> &mapping_support_points,
1149 const bool use_invariant_curl_form =
false);
1156 void build_facet_metric_operators(
1157 const unsigned int iface,
1158 const unsigned int n_quad_pts,
1159 const unsigned int n_metric_dofs,
1160 const std::array<std::vector<real>,dim> &mapping_support_points,
1162 const bool use_invariant_curl_form =
false);
1191 void build_metric_Jacobian(
1192 const unsigned int n_quad_pts,
1193 const std::array<std::vector<real>,dim> &mapping_support_points,
1194 const dealii::FullMatrix<double> &basis_x_flux_nodes,
1195 const dealii::FullMatrix<double> &basis_y_flux_nodes,
1196 const dealii::FullMatrix<double> &basis_z_flux_nodes,
1197 const dealii::FullMatrix<double> &grad_basis_x_flux_nodes,
1198 const dealii::FullMatrix<double> &grad_basis_y_flux_nodes,
1199 const dealii::FullMatrix<double> &grad_basis_z_flux_nodes,
1200 std::vector<dealii::Tensor<2,dim,real>> &local_Jac);
1208 void build_determinant_metric_Jacobian(
1209 const unsigned int n_quad_pts,
1210 const std::array<std::vector<real>,dim> &mapping_support_points,
1211 const dealii::FullMatrix<double> &basis_x_flux_nodes,
1212 const dealii::FullMatrix<double> &basis_y_flux_nodes,
1213 const dealii::FullMatrix<double> &basis_z_flux_nodes,
1214 const dealii::FullMatrix<double> &grad_basis_x_flux_nodes,
1215 const dealii::FullMatrix<double> &grad_basis_y_flux_nodes,
1216 const dealii::FullMatrix<double> &grad_basis_z_flux_nodes,
1217 std::vector<real> &det_metric_Jac);
1220 void build_local_metric_cofactor_matrix(
1221 const unsigned int n_quad_pts,
1222 const unsigned int n_metric_dofs,
1223 const std::array<std::vector<real>,dim> &mapping_support_points,
1224 const dealii::FullMatrix<double> &basis_x_grid_nodes,
1225 const dealii::FullMatrix<double> &basis_y_grid_nodes,
1226 const dealii::FullMatrix<double> &basis_z_grid_nodes,
1227 const dealii::FullMatrix<double> &basis_x_flux_nodes,
1228 const dealii::FullMatrix<double> &basis_y_flux_nodes,
1229 const dealii::FullMatrix<double> &basis_z_flux_nodes,
1230 const dealii::FullMatrix<double> &grad_basis_x_grid_nodes,
1231 const dealii::FullMatrix<double> &grad_basis_y_grid_nodes,
1232 const dealii::FullMatrix<double> &grad_basis_z_grid_nodes,
1233 const dealii::FullMatrix<double> &grad_basis_x_flux_nodes,
1234 const dealii::FullMatrix<double> &grad_basis_y_flux_nodes,
1235 const dealii::FullMatrix<double> &grad_basis_z_flux_nodes,
1236 dealii::Tensor<2,dim,std::vector<real>> &metric_cofactor,
1237 const bool use_invariant_curl_form =
false);
1261 void compute_local_3D_cofactor(
1262 const unsigned int n_metric_dofs,
1263 const unsigned int n_quad_pts,
1264 const std::array<std::vector<real>,dim> &mapping_support_points,
1265 const dealii::FullMatrix<double> &basis_x_grid_nodes,
1266 const dealii::FullMatrix<double> &basis_y_grid_nodes,
1267 const dealii::FullMatrix<double> &basis_z_grid_nodes,
1268 const dealii::FullMatrix<double> &basis_x_flux_nodes,
1269 const dealii::FullMatrix<double> &basis_y_flux_nodes,
1270 const dealii::FullMatrix<double> &basis_z_flux_nodes,
1271 const dealii::FullMatrix<double> &grad_basis_x_grid_nodes,
1272 const dealii::FullMatrix<double> &grad_basis_y_grid_nodes,
1273 const dealii::FullMatrix<double> &grad_basis_z_grid_nodes,
1274 const dealii::FullMatrix<double> &grad_basis_x_flux_nodes,
1275 const dealii::FullMatrix<double> &grad_basis_y_flux_nodes,
1276 const dealii::FullMatrix<double> &grad_basis_z_flux_nodes,
1277 dealii::Tensor<2,dim,std::vector<real>> &metric_cofactor,
1278 const bool use_invariant_curl_form =
false);
1291 template <
int dim,
int nstate,
int n_faces,
typename real>
1297 const unsigned int max_degree_input,
1298 const unsigned int grid_degree_input);
1315 template <
int dim,
int nstate,
int n_faces,
typename real>
1321 const unsigned int max_degree_input,
1322 const unsigned int grid_degree_input);
1328 void build_1D_volume_state_operator(
1329 const dealii::FESystem<1,1> &finite_element,
1330 const dealii::Quadrature<1> &quadrature);
1333 void build_1D_gradient_state_operator(
1334 const dealii::FESystem<1,1> &finite_element,
1335 const dealii::Quadrature<1> &quadrature);
1338 void build_1D_surface_state_operator(
1339 const dealii::FESystem<1,1> &finite_element,
1340 const dealii::Quadrature<0> &face_quadrature);
1347 template <
int dim,
int nstate,
int n_faces,
typename real>
1353 const unsigned int max_degree_input,
1354 const unsigned int grid_degree_input);
1360 virtual void build_1D_volume_state_operator(
1361 const dealii::FESystem<1,1> &finite_element,
1362 const dealii::Quadrature<1> &quadrature);
1365 void build_1D_gradient_state_operator(
1366 const dealii::FESystem<1,1> &finite_element,
1367 const dealii::Quadrature<1> &quadrature);
1370 void build_1D_surface_state_operator(
1371 const dealii::FESystem<1,1> &finite_element,
1372 const dealii::Quadrature<0> &face_quadrature);
1382 template <
int dim,
int nstate,
int n_faces,
typename real>
1388 const unsigned int max_degree_input,
1389 const unsigned int grid_degree_input);
1395 void build_1D_volume_state_operator(
1396 const dealii::FESystem<1,1> &finite_element,
1397 const dealii::Quadrature<1> &quadrature);
The FLUX basis functions separated by nstate with n shape functions.
unsigned int current_degree
Stores the degree of the current poly degree.
unsigned int current_degree
Stores the degree of the current poly degree.
basis_functions< dim, n_faces, real > mapping_shape_functions_grid_nodes
Object of mapping shape functions evaluated at grid nodes.
dealii::Tensor< 2, dim, std::vector< real > > metric_cofactor_vol
The volume metric cofactor matrix.
const Parameters::AllParameters::Flux_Reconstruction FR_param_type
Flux reconstruction parameter type.
std::array< dealii::FullMatrix< double >, 2 > oneD_surf_operator
Stores the one dimensional surface operator.
The metric independent inverse of the FR mass matrix .
bool store_transpose
Flag is store transpose operator.
unsigned int current_degree
Stores the degree of the current poly degree.
virtual void inner_product(const std::vector< real > &input_vect, const std::vector< real > &weight_vect, std::vector< real > &output_vect, const dealii::FullMatrix< double > &basis_x, const dealii::FullMatrix< double > &basis_y, const dealii::FullMatrix< double > &basis_z, const bool adding=false, const double factor=1.0)=0
virtual function to be defined.
The integration of gradient of solution basis.
unsigned int current_degree
Stores the degree of the current poly degree.
const MPI_Comm mpi_communicator
MPI communicator.
unsigned int current_degree
Stores the degree of the current poly degree.
Sum Factorization derived class.
virtual ~OperatorsBase()=default
Destructor.
unsigned int current_grid_degree
Stores the degree of the current grid degree.
const unsigned int max_grid_degree
Max grid degree.
unsigned int current_degree
Stores the degree of the current poly degree.
const Parameters::AllParameters::Flux_Reconstruction_Aux FR_param_type
Flux reconstruction parameter type.
dealii::FullMatrix< double > oneD_grad_operator
Stores the one dimensional gradient operator.
dealii::ConditionalOStream pcout
Parallel std::cout that only outputs on mpi_rank==0.
dealii::FullMatrix< double > tensor_product(const dealii::FullMatrix< double > &basis_x, const dealii::FullMatrix< double > &basis_y, const dealii::FullMatrix< double > &basis_z)
Returns the tensor product of matrices passed.
The metric independent FR mass matrix for auxiliary equation .
dealii::FullMatrix< double > tensor_product_state(const int nstate, const dealii::FullMatrix< double > &basis_x, const dealii::FullMatrix< double > &basis_y, const dealii::FullMatrix< double > &basis_z)
Returns the tensor product of matrices passed, but makes it sparse diagonal by state.
bool store_transpose
Flag is store transpose operator.
const Parameters::AllParameters::Flux_Reconstruction_Aux FR_param_type
Flux reconstruction parameter type.
const int nstate
Number of states.
double compute_factorial(double n)
Standard function to compute factorial of a number.
Projection operator corresponding to basis functions onto -norm for auxiliary equation.
unsigned int current_degree
Stores the degree of the current poly degree.
Files for the baseline physics.
double FR_param_aux
Flux reconstruction paramater value.
unsigned int current_degree
Stores the degree of the current poly degree.
const unsigned int max_degree
Max polynomial degree.
unsigned int current_degree
Stores the degree of the current poly degree.
std::array< dealii::FullMatrix< double >, 2 > oneD_surf_grad_operator
Stores the one dimensional surface gradient operator.
dealii::Tensor< 2, dim, std::vector< real > > metric_cofactor_surf
The facet metric cofactor matrix, for ONE face.
dealii::FullMatrix< double > oneD_transpose_vol_operator
Stores the transpose of the operator for fast weight-adjusted solves.
unsigned int current_degree
Stores the degree of the current poly degree.
unsigned int current_degree
Stores the degree of the current poly degree.
Flux_Reconstruction
Type of correction in Flux Reconstruction.
dealii::FullMatrix< double > oneD_skew_symm_vol_oper
Skew-symmetric volume operator .
const bool store_Jacobian
Flag if store metric Jacobian at flux nodes.
-th order modal derivative of basis fuctions, ie/
That is Quadrature Weights multiplies with basis_at_vol_cubature.
const bool store_surf_flux_nodes
Flag if store metric Jacobian at flux nodes.
This is the solution basis , the modal differential opertaor commonly seen in DG defined as ...
ESFR correction matrix without jac dependence.
std::vector< real > det_Jac_vol
The determinant of the metric Jacobian at volume cubature nodes.
Local mass matrix without jacobian dependence.
The DG lifting operator is defined as the operator that lifts inner products of polynomials of some o...
unsigned int current_degree
Stores the degree of the current poly degree.
unsigned int current_degree
Stores the degree of the current poly degree.
unsigned int current_degree
Stores the degree of the current poly degree.
dealii::FullMatrix< double > oneD_transpose_vol_operator
Stores the transpose of the operator for fast weight-adjusted solves.
dealii::Tensor< 2, dim, std::vector< real > > metric_Jacobian_vol_cubature
Stores the metric Jacobian at flux nodes.
The ESFR lifting operator.
const Parameters::AllParameters::Flux_Reconstruction_Aux FR_param_type
Flux reconstruction parameter type.
double FR_param
Flux reconstruction paramater value.
unsigned int current_degree
Stores the degree of the current poly degree.
Base metric operators class that stores functions used in both the volume and on surface.
unsigned int max_grid_degree_check
Check to see if the metrics used are a higher order then the initialized grid.
const Parameters::AllParameters::Flux_Reconstruction FR_param_type
Flux reconstruction parameter type.
ESFR correction matrix for AUX EQUATION without jac dependence.
The mapping shape functions evaluated at the desired nodes (facet set included in volume grid nodes f...
const bool store_vol_flux_nodes
Flag if store metric Jacobian at flux nodes.
OperatorsBase(const int nstate_input, const unsigned int max_degree_input, const unsigned int grid_degree_input)
Constructor.
The basis functions separated by nstate with n shape functions.
The metric independent FR mass matrix .
const Parameters::AllParameters::Flux_Reconstruction FR_param_type
Flux reconstruction parameter type.
dealii::FullMatrix< double > oneD_vol_operator
Stores the one dimensional volume operator.
Flux_Reconstruction_Aux
Type of correction in Flux Reconstruction for the auxiliary variables.
unsigned int current_degree
Stores the degree of the current poly degree.
std::vector< real > det_Jac_surf
The determinant of the metric Jacobian at facet cubature nodes.
basis_functions< dim, n_faces, real > mapping_shape_functions_flux_nodes
Object of mapping shape functions evaluated at flux nodes.
unsigned int current_degree
Stores the degree of the current poly degree.
const Parameters::AllParameters::Flux_Reconstruction_Aux FR_param_aux_type
Flux reconstruction parameter type.
The metric independent inverse of the FR mass matrix for auxiliary equation .
Projection operator corresponding to basis functions onto -norm.
unsigned int current_degree
Stores the degree of the current poly degree.
const bool store_skew_symmetric_form
Flag to store the skew symmetric form .
std::array< dealii::Tensor< 1, dim, std::vector< real > >, n_faces > flux_nodes_surf
Stores the physical facet flux nodes.
"Stiffness" operator used in DG Strong form.
const Parameters::AllParameters::Flux_Reconstruction FR_param_type
Flux reconstruction parameter type.
unsigned int current_degree
Stores the degree of the current poly degree.
unsigned int current_degree
Stores the degree of the current poly degree.
const Parameters::AllParameters::Flux_Reconstruction FR_param_type
Flux reconstruction parameter type.
unsigned int current_degree
Stores the degree of the current poly degree.
dealii::Tensor< 1, dim, std::vector< real > > flux_nodes_vol
Stores the physical volume flux nodes.
The surface integral of test functions.
unsigned int current_degree
Stores the degree of the current poly degree.
Projection operator corresponding to basis functions onto M-norm (L2).
Local stiffness matrix without jacobian dependence.
virtual void matrix_vector_mult(const std::vector< real > &input_vect, std::vector< real > &output_vect, const dealii::FullMatrix< double > &basis_x, const dealii::FullMatrix< double > &basis_y, const dealii::FullMatrix< double > &basis_z, const bool adding=false, const double factor=1.0)=0
virtual function to be defined.
unsigned int current_degree
Stores the degree of the current poly degree.