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>
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);
111 template<
int dim,
int n_faces>
117 const int nstate_input,
118 const unsigned int max_degree_input,
119 const unsigned int grid_degree_input);
128 template <
typename real>
129 void matrix_vector_mult(
130 const std::vector<real> &input_vect,
131 std::vector<real> &output_vect,
132 const dealii::FullMatrix<double> &basis_x,
133 const dealii::FullMatrix<double> &basis_y,
134 const dealii::FullMatrix<double> &basis_z,
135 const bool adding =
false,
136 const double factor = 1.0);
148 template <
typename real>
149 void divergence_matrix_vector_mult(
150 const dealii::Tensor<1,dim,std::vector<real>> &input_vect,
151 std::vector<real> &output_vect,
152 const dealii::FullMatrix<double> &basis_x,
153 const dealii::FullMatrix<double> &basis_y,
154 const dealii::FullMatrix<double> &basis_z,
155 const dealii::FullMatrix<double> &gradient_basis_x,
156 const dealii::FullMatrix<double> &gradient_basis_y,
157 const dealii::FullMatrix<double> &gradient_basis_z);
160 template <
typename real>
161 void divergence_matrix_vector_mult_1D(
162 const dealii::Tensor<1,dim,std::vector<real>> &input_vect,
163 std::vector<real> &output_vect,
164 const dealii::FullMatrix<double> &basis,
165 const dealii::FullMatrix<double> &gradient_basis);
168 template <
typename real>
169 void gradient_matrix_vector_mult(
170 const std::vector<real> &input_vect,
171 dealii::Tensor<1,dim,std::vector<real>> &output_vect,
172 const dealii::FullMatrix<double> &basis_x,
173 const dealii::FullMatrix<double> &basis_y,
174 const dealii::FullMatrix<double> &basis_z,
175 const dealii::FullMatrix<double> &gradient_basis_x,
176 const dealii::FullMatrix<double> &gradient_basis_y,
177 const dealii::FullMatrix<double> &gradient_basis_z);
179 template <
typename real>
180 void gradient_matrix_vector_mult_1D(
181 const std::vector<real> &input_vect,
182 dealii::Tensor<1,dim,std::vector<real>> &output_vect,
183 const dealii::FullMatrix<double> &basis,
184 const dealii::FullMatrix<double> &gradient_basis);
189 template <
typename real>
191 const std::vector<real> &input_vect,
192 const std::vector<double> &weight_vect,
193 std::vector<real> &output_vect,
194 const dealii::FullMatrix<double> &basis_x,
195 const dealii::FullMatrix<double> &basis_y,
196 const dealii::FullMatrix<double> &basis_z,
197 const bool adding =
false,
198 const double factor = 1.0);
206 void divergence_two_pt_flux_Hadamard_product(
207 const dealii::Tensor<1,dim,dealii::FullMatrix<double>> &input_mat,
208 std::vector<double> &output_vect,
209 const std::vector<double> &weights,
210 const dealii::FullMatrix<double> &basis,
211 const double scaling = 2.0);
215 void surface_two_pt_flux_Hadamard_product(
216 const dealii::FullMatrix<double> &input_mat,
217 std::vector<double> &output_vect_vol,
218 std::vector<double> &output_vect_surf,
219 const std::vector<double> &weights,
220 const std::array<dealii::FullMatrix<double>,2> &surf_basis,
221 const unsigned int iface,
222 const unsigned int dim_not_zero,
223 const double scaling = 2.0);
235 void two_pt_flux_Hadamard_product(
236 const dealii::FullMatrix<double> &input_mat,
237 dealii::FullMatrix<double> &output_mat,
238 const dealii::FullMatrix<double> &basis,
239 const std::vector<double> &weights,
240 const int direction);
244 void sum_factorized_Hadamard_sparsity_pattern(
245 const unsigned int rows_size,
246 const unsigned int columns_size,
247 std::vector<std::array<unsigned int,dim>> &rows,
248 std::vector<std::array<unsigned int,dim>> &columns);
251 void sum_factorized_Hadamard_basis_assembly(
252 const unsigned int rows_size_1D,
253 const unsigned int columns_size_1D,
254 const std::vector<std::array<unsigned int,dim>> &rows,
255 const std::vector<std::array<unsigned int,dim>> &columns,
256 const dealii::FullMatrix<double> &basis,
257 const std::vector<double> &weights,
258 std::array<dealii::FullMatrix<double>,dim> &basis_sparse);
261 void sum_factorized_Hadamard_surface_sparsity_pattern(
262 const unsigned int rows_size,
263 const unsigned int columns_size,
264 std::vector<unsigned int> &rows,
265 std::vector<unsigned int> &columns,
266 const int dim_not_zero);
269 void sum_factorized_Hadamard_surface_basis_assembly(
270 const unsigned int rows_size,
271 const unsigned int columns_size_1D,
272 const std::vector<unsigned int> &rows,
273 const std::vector<unsigned int> &columns,
274 const dealii::FullMatrix<double> &basis,
275 const std::vector<double> &weights,
276 dealii::FullMatrix<double> &basis_sparse,
277 const int dim_not_zero);
283 template <
typename real>
284 void matrix_vector_mult_1D(
285 const std::vector<real> &input_vect,
286 std::vector<real> &output_vect,
287 const dealii::FullMatrix<double> &basis_x,
288 const bool adding =
false,
289 const double factor = 1.0);
295 template <
typename real>
296 void inner_product_1D(
297 const std::vector<real> &input_vect,
298 const std::vector<double> &weight_vect,
299 std::vector<real> &output_vect,
300 const dealii::FullMatrix<double> &basis_x,
301 const bool adding =
false,
302 const double factor = 1.0);
311 template <
typename real>
312 void matrix_vector_mult_surface_1D(
313 const std::vector<bool> face_orientation,
314 const unsigned int face_number,
315 const std::vector<real> &input_vect,
316 std::vector<real> &output_vect,
317 const std::array<dealii::FullMatrix<double>,2> &basis_surf,
318 const dealii::FullMatrix<double> &basis_vol,
319 const bool adding =
false,
320 const double factor = 1.0);
323 template <
typename real>
324 void inner_product_surface_1D(
325 const std::vector<bool> face_orientation,
326 const unsigned int face_number,
327 const std::vector<real> &input_vect,
328 const std::vector<double> &weight_vect,
329 std::vector<real> &output_vect,
330 const std::array<dealii::FullMatrix<double>,2> &basis_surf,
331 const dealii::FullMatrix<double> &basis_vol,
332 const bool adding =
false,
333 const double factor = 1.0);
341 template <
typename real>
342 void face_orientation_tensor_product(
343 const std::vector<bool> face_orientation,
344 const unsigned int face_number,
345 std::vector<real> &output_vect,
346 const dealii::FullMatrix<double> &basis);
348 template <
typename real>
349 void face_orientation_inner_product(
350 const std::vector<bool> face_orientation,
351 const unsigned int face_number,
352 const std::vector<real> &input_vect,
353 std::vector<real> &output_vect,
354 const dealii::FullMatrix<double> &basis);
360 void Hadamard_product(
361 const dealii::FullMatrix<double> &input_mat1,
362 const dealii::FullMatrix<double> &input_mat2,
363 dealii::FullMatrix<double> &output_mat);
371 template <
typename real>
372 void Hadamard_product_AD_vector(
373 const dealii::FullMatrix<double> &input_mat1,
374 const std::vector<real> &input_mat2,
375 std::vector<real> &output_mat);
405 template<
int dim,
int n_faces>
411 const int nstate_input,
412 const unsigned int max_degree_input,
413 const unsigned int grid_degree_input);
419 void build_1D_volume_operator(
420 const dealii::FESystem<1,1> &finite_element,
421 const dealii::Quadrature<1> &quadrature);
424 void build_1D_gradient_operator(
425 const dealii::FESystem<1,1> &finite_element,
426 const dealii::Quadrature<1> &quadrature);
429 void build_1D_surface_operator(
430 const dealii::FESystem<1,1> &finite_element,
431 const dealii::Quadrature<0> &quadrature);
434 void build_1D_surface_gradient_operator(
435 const dealii::FESystem<1,1> &finite_element,
436 const dealii::Quadrature<0> &quadrature);
440 template<
int dim,
int n_faces>
446 const int nstate_input,
447 const unsigned int max_degree_input,
448 const unsigned int grid_degree_input);
454 void build_1D_volume_operator(
455 const dealii::FESystem<1,1> &finite_element,
456 const dealii::Quadrature<1> &quadrature);
460 template<
int dim,
int n_faces>
466 const int nstate_input,
467 const unsigned int max_degree_input,
468 const unsigned int grid_degree_input);
474 void build_1D_volume_operator(
475 const dealii::FESystem<1,1> &finite_element,
476 const dealii::Quadrature<1> &quadrature);
482 dealii::FullMatrix<double> build_dim_mass_matrix(
484 const unsigned int n_dofs,
const unsigned int n_quad_pts,
486 const std::vector<double> &det_Jac,
487 const std::vector<double> &quad_weights);
496 template<
int dim,
int n_faces>
502 const int nstate_input,
503 const unsigned int max_degree_input,
504 const unsigned int grid_degree_input,
505 const bool store_skew_symmetric_form_input =
false);
514 void build_1D_volume_operator(
515 const dealii::FESystem<1,1> &finite_element,
516 const dealii::Quadrature<1> &quadrature);
523 template<
int dim,
int n_faces>
529 const int nstate_input,
530 const unsigned int max_degree_input,
531 const unsigned int grid_degree_input);
537 void build_1D_volume_operator(
538 const dealii::FESystem<1,1> &finite_element,
539 const dealii::Quadrature<1> &quadrature);
543 template<
int dim,
int n_faces>
549 const int nstate_input,
550 const unsigned int max_degree_input,
551 const unsigned int grid_degree_input);
557 void build_1D_volume_operator(
558 const dealii::FESystem<1,1> &finite_element,
559 const dealii::Quadrature<1> &quadrature);
563 template<
int dim,
int n_faces>
569 const int nstate_input,
570 const unsigned int max_degree_input,
571 const unsigned int grid_degree_input,
573 const double FR_user_specified_correction_parameter_value_input=0.0);
590 void get_Huynh_g2_parameter (
591 const unsigned int curr_cell_degree,
597 void get_spectral_difference_parameter (
598 const unsigned int curr_cell_degree,
604 void get_c_negative_FR_parameter (
605 const unsigned int curr_cell_degree,
612 void get_c_negative_divided_by_two_FR_parameter (
613 const unsigned int curr_cell_degree,
621 void get_c_plus_parameter (
622 const unsigned int curr_cell_degree,
633 void get_FR_correction_parameter (
634 const unsigned int curr_cell_degree,
641 void build_local_Flux_Reconstruction_operator(
642 const dealii::FullMatrix<double> &local_Mass_Matrix,
643 const dealii::FullMatrix<double> &pth_derivative,
644 const unsigned int n_dofs,
646 dealii::FullMatrix<double> &Flux_Reconstruction_operator);
649 void build_1D_volume_operator(
650 const dealii::FESystem<1,1> &finite_element,
651 const dealii::Quadrature<1> &quadrature);
659 dealii::FullMatrix<double> build_dim_Flux_Reconstruction_operator(
660 const dealii::FullMatrix<double> &local_Mass_Matrix,
662 const unsigned int n_dofs);
671 dealii::FullMatrix<double> build_dim_Flux_Reconstruction_operator_directly(
673 const unsigned int n_dofs,
674 dealii::FullMatrix<double> &pth_deriv,
675 dealii::FullMatrix<double> &mass_matrix);
683 template<
int dim,
int n_faces>
689 const int nstate_input,
690 const unsigned int max_degree_input,
691 const unsigned int grid_degree_input,
711 void get_FR_aux_correction_parameter (
712 const unsigned int curr_cell_degree,
716 void build_1D_volume_operator(
717 const dealii::FESystem<1,1> &finite_element,
718 const dealii::Quadrature<1> &quadrature);
722 template<
int dim,
int n_faces>
728 const int nstate_input,
729 const unsigned int max_degree_input,
730 const unsigned int grid_degree_input);
736 void compute_local_vol_projection_operator(
737 const dealii::FullMatrix<double> &norm_matrix_inverse,
738 const dealii::FullMatrix<double> &integral_vol_basis,
739 dealii::FullMatrix<double> &volume_projection);
742 void build_1D_volume_operator(
743 const dealii::FESystem<1,1> &finite_element,
744 const dealii::Quadrature<1> &quadrature);
748 template<
int dim,
int n_faces>
754 const int nstate_input,
755 const unsigned int max_degree_input,
756 const unsigned int grid_degree_input,
758 const double FR_user_specified_correction_parameter_value_input=0.0,
759 const bool store_transpose_input =
false);
774 void build_1D_volume_operator(
775 const dealii::FESystem<1,1> &finite_element,
776 const dealii::Quadrature<1> &quadrature);
783 template<
int dim,
int n_faces>
789 const int nstate_input,
790 const unsigned int max_degree_input,
791 const unsigned int grid_degree_input,
793 const bool store_transpose_input =
false);
805 void build_1D_volume_operator(
806 const dealii::FESystem<1,1> &finite_element,
807 const dealii::Quadrature<1> &quadrature);
814 template<
int dim,
int n_faces>
820 const int nstate_input,
821 const unsigned int max_degree_input,
822 const unsigned int grid_degree_input,
824 const double FR_user_specified_correction_parameter_value_input=0.0);
836 void build_1D_volume_operator(
837 const dealii::FESystem<1,1> &finite_element,
838 const dealii::Quadrature<1> &quadrature);
841 template<
int dim,
int n_faces>
847 const int nstate_input,
848 const unsigned int max_degree_input,
849 const unsigned int grid_degree_input,
859 void build_1D_volume_operator(
860 const dealii::FESystem<1,1> &finite_element,
861 const dealii::Quadrature<1> &quadrature);
864 template<
int dim,
int n_faces>
870 const int nstate_input,
871 const unsigned int max_degree_input,
872 const unsigned int grid_degree_input,
874 const double FR_user_specified_correction_parameter_value_input=0.0);
886 void build_1D_volume_operator(
887 const dealii::FESystem<1,1> &finite_element,
888 const dealii::Quadrature<1> &quadrature);
892 template<
int dim,
int n_faces>
898 const int nstate_input,
899 const unsigned int max_degree_input,
900 const unsigned int grid_degree_input,
910 void build_1D_volume_operator(
911 const dealii::FESystem<1,1> &finite_element,
912 const dealii::Quadrature<1> &quadrature);
923 template <
int dim,
int n_faces>
929 const int nstate_input,
930 const unsigned int max_degree_input,
931 const unsigned int grid_degree_input);
937 void build_1D_gradient_operator(
938 const dealii::FESystem<1,1> &finite_element,
939 const dealii::Quadrature<1> &quadrature);
956 template<
int dim,
int n_faces>
962 const int nstate_input,
963 const unsigned int max_degree_input,
964 const unsigned int grid_degree_input);
970 void build_1D_surface_operator(
971 const dealii::FESystem<1,1> &finite_element,
972 const dealii::Quadrature<0> &face_quadrature);
981 template<
int dim,
int n_faces>
987 const int nstate_input,
988 const unsigned int max_degree_input,
989 const unsigned int grid_degree_input);
995 void build_local_surface_lifting_operator (
996 const unsigned int n_dofs,
997 const dealii::FullMatrix<double> &norm_matrix,
998 const dealii::FullMatrix<double> &face_integral,
999 dealii::FullMatrix<double> &lifting);
1004 void build_1D_volume_operator(
1005 const dealii::FESystem<1,1> &finite_element,
1006 const dealii::Quadrature<1> &face_quadrature);
1009 void build_1D_surface_operator(
1010 const dealii::FESystem<1,1> &finite_element,
1011 const dealii::Quadrature<0> &face_quadrature);
1022 template<
int dim,
int n_faces>
1028 const int nstate_input,
1029 const unsigned int max_degree_input,
1030 const unsigned int grid_degree_input,
1032 const double FR_user_specified_correction_parameter_value_input=0.0);
1046 void build_1D_volume_operator(
1047 const dealii::FESystem<1,1> &finite_element,
1048 const dealii::Quadrature<1> &face_quadrature);
1051 void build_1D_surface_operator(
1052 const dealii::FESystem<1,1> &finite_element,
1053 const dealii::Quadrature<0> &face_quadrature);
1070 template<
int dim,
int n_faces>
1076 const int nstate_input,
1077 const unsigned int max_degree_input,
1078 const unsigned int grid_degree_input);
1100 void build_1D_shape_functions_at_grid_nodes(
1101 const dealii::FESystem<1,1> &finite_element,
1102 const dealii::Quadrature<1> &quadrature);
1108 void build_1D_shape_functions_at_flux_nodes(
1109 const dealii::FESystem<1,1> &finite_element,
1110 const dealii::Quadrature<1> &quadrature,
1111 const dealii::Quadrature<0> &face_quadrature);
1118 void build_1D_shape_functions_at_volume_flux_nodes(
1119 const dealii::FESystem<1,1> &finite_element,
1120 const dealii::Quadrature<1> &quadrature);
1130 template <
typename real,
int dim,
int n_faces>
1136 const int nstate_input,
1137 const unsigned int max_degree_input,
1138 const unsigned int grid_degree_input,
1139 const bool store_vol_flux_nodes_input =
false,
1140 const bool store_surf_flux_nodes_input =
false,
1141 const bool store_Jacobian_input =
false);
1153 void transform_physical_to_reference(
1154 const dealii::Tensor<1,dim,real> &phys,
1155 const dealii::Tensor<2,dim,real> &metric_cofactor,
1156 dealii::Tensor<1,dim,real> &ref);
1159 void transform_reference_to_physical(
1160 const dealii::Tensor<1,dim,real> &ref,
1161 const dealii::Tensor<2,dim,real> &metric_cofactor,
1162 dealii::Tensor<1,dim,real> &phys);
1165 void transform_physical_to_reference_vector(
1166 const dealii::Tensor<1,dim,std::vector<real>> &phys,
1167 const dealii::Tensor<2,dim,std::vector<real>> &metric_cofactor,
1168 dealii::Tensor<1,dim,std::vector<real>> &ref);
1171 void transform_reference_unit_normal_to_physical_unit_normal(
1172 const unsigned int n_quad_pts,
1173 const dealii::Tensor<1,dim,real> &ref,
1174 const dealii::Tensor<2,dim,std::vector<real>> &metric_cofactor,
1175 std::vector<dealii::Tensor<1,dim,real>> &phys);
1178 void build_determinant_volume_metric_Jacobian(
1179 const unsigned int n_quad_pts,
1180 const unsigned int n_metric_dofs,
1181 const std::array<std::vector<real>,dim> &mapping_support_points,
1189 void build_volume_metric_operators(
1190 const unsigned int n_quad_pts,
1191 const unsigned int n_metric_dofs,
1192 const std::array<std::vector<real>,dim> &mapping_support_points,
1194 const bool use_invariant_curl_form =
false);
1201 void build_facet_metric_operators(
1202 const unsigned int iface,
1203 const unsigned int n_quad_pts,
1204 const unsigned int n_metric_dofs,
1205 const std::array<std::vector<real>,dim> &mapping_support_points,
1207 const bool use_invariant_curl_form =
false);
1236 void build_metric_Jacobian(
1237 const unsigned int n_quad_pts,
1238 const std::array<std::vector<real>,dim> &mapping_support_points,
1239 const dealii::FullMatrix<double> &basis_x_flux_nodes,
1240 const dealii::FullMatrix<double> &basis_y_flux_nodes,
1241 const dealii::FullMatrix<double> &basis_z_flux_nodes,
1242 const dealii::FullMatrix<double> &grad_basis_x_flux_nodes,
1243 const dealii::FullMatrix<double> &grad_basis_y_flux_nodes,
1244 const dealii::FullMatrix<double> &grad_basis_z_flux_nodes,
1245 std::vector<dealii::Tensor<2,dim,real>> &local_Jac);
1253 void build_determinant_metric_Jacobian(
1254 const unsigned int n_quad_pts,
1255 const std::array<std::vector<real>,dim> &mapping_support_points,
1256 const dealii::FullMatrix<double> &basis_x_flux_nodes,
1257 const dealii::FullMatrix<double> &basis_y_flux_nodes,
1258 const dealii::FullMatrix<double> &basis_z_flux_nodes,
1259 const dealii::FullMatrix<double> &grad_basis_x_flux_nodes,
1260 const dealii::FullMatrix<double> &grad_basis_y_flux_nodes,
1261 const dealii::FullMatrix<double> &grad_basis_z_flux_nodes,
1262 std::vector<real> &det_metric_Jac);
1265 void build_local_metric_cofactor_matrix(
1266 const unsigned int n_quad_pts,
1267 const unsigned int n_metric_dofs,
1268 const std::array<std::vector<real>,dim> &mapping_support_points,
1269 const dealii::FullMatrix<double> &basis_x_grid_nodes,
1270 const dealii::FullMatrix<double> &basis_y_grid_nodes,
1271 const dealii::FullMatrix<double> &basis_z_grid_nodes,
1272 const dealii::FullMatrix<double> &basis_x_flux_nodes,
1273 const dealii::FullMatrix<double> &basis_y_flux_nodes,
1274 const dealii::FullMatrix<double> &basis_z_flux_nodes,
1275 const dealii::FullMatrix<double> &grad_basis_x_grid_nodes,
1276 const dealii::FullMatrix<double> &grad_basis_y_grid_nodes,
1277 const dealii::FullMatrix<double> &grad_basis_z_grid_nodes,
1278 const dealii::FullMatrix<double> &grad_basis_x_flux_nodes,
1279 const dealii::FullMatrix<double> &grad_basis_y_flux_nodes,
1280 const dealii::FullMatrix<double> &grad_basis_z_flux_nodes,
1281 dealii::Tensor<2,dim,std::vector<real>> &metric_cofactor,
1282 const bool use_invariant_curl_form =
false);
1306 void compute_local_3D_cofactor(
1307 const unsigned int n_metric_dofs,
1308 const unsigned int n_quad_pts,
1309 const std::array<std::vector<real>,dim> &mapping_support_points,
1310 const dealii::FullMatrix<double> &basis_x_grid_nodes,
1311 const dealii::FullMatrix<double> &basis_y_grid_nodes,
1312 const dealii::FullMatrix<double> &basis_z_grid_nodes,
1313 const dealii::FullMatrix<double> &basis_x_flux_nodes,
1314 const dealii::FullMatrix<double> &basis_y_flux_nodes,
1315 const dealii::FullMatrix<double> &basis_z_flux_nodes,
1316 const dealii::FullMatrix<double> &grad_basis_x_grid_nodes,
1317 const dealii::FullMatrix<double> &grad_basis_y_grid_nodes,
1318 const dealii::FullMatrix<double> &grad_basis_z_grid_nodes,
1319 const dealii::FullMatrix<double> &grad_basis_x_flux_nodes,
1320 const dealii::FullMatrix<double> &grad_basis_y_flux_nodes,
1321 const dealii::FullMatrix<double> &grad_basis_z_flux_nodes,
1322 dealii::Tensor<2,dim,std::vector<real>> &metric_cofactor,
1323 const bool use_invariant_curl_form =
false);
1336 template <
int dim,
int nstate,
int n_faces>
1342 const unsigned int max_degree_input,
1343 const unsigned int grid_degree_input);
1360 template <
int dim,
int nstate,
int n_faces>
1366 const unsigned int max_degree_input,
1367 const unsigned int grid_degree_input);
1373 void build_1D_volume_state_operator(
1374 const dealii::FESystem<1,1> &finite_element,
1375 const dealii::Quadrature<1> &quadrature);
1378 void build_1D_gradient_state_operator(
1379 const dealii::FESystem<1,1> &finite_element,
1380 const dealii::Quadrature<1> &quadrature);
1383 void build_1D_surface_state_operator(
1384 const dealii::FESystem<1,1> &finite_element,
1385 const dealii::Quadrature<0> &face_quadrature);
1392 template <
int dim,
int nstate,
int n_faces>
1398 const unsigned int max_degree_input,
1399 const unsigned int grid_degree_input);
1405 virtual void build_1D_volume_state_operator(
1406 const dealii::FESystem<1,1> &finite_element,
1407 const dealii::Quadrature<1> &quadrature);
1410 void build_1D_gradient_state_operator(
1411 const dealii::FESystem<1,1> &finite_element,
1412 const dealii::Quadrature<1> &quadrature);
1415 void build_1D_surface_state_operator(
1416 const dealii::FESystem<1,1> &finite_element,
1417 const dealii::Quadrature<0> &face_quadrature);
1427 template <
int dim,
int nstate,
int n_faces>
1433 const unsigned int max_degree_input,
1434 const unsigned int grid_degree_input);
1440 void build_1D_volume_state_operator(
1441 const dealii::FESystem<1,1> &finite_element,
1442 const dealii::Quadrature<1> &quadrature);
bool store_transpose
Flag is store transpose operator.
The FLUX basis functions separated by nstate with n shape functions.
dealii::ConditionalOStream pcout
Parallel std::cout that only outputs on mpi_rank==0.
const unsigned int max_degree
Max polynomial degree.
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.
const double FR_user_specified_correction_parameter_value
User specified flux recontruction correction parameter value.
The metric independent inverse of the FR mass matrix .
basis_functions< dim, n_faces > 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.
The integration of gradient of solution basis.
const bool store_skew_symmetric_form
Flag to store the skew symmetric form .
unsigned int current_degree
Stores the degree of the current poly degree.
const int nstate
Number of states.
Sum Factorization derived class.
double FR_param
Flux reconstruction paramater value.
virtual ~OperatorsBase()=default
Destructor.
unsigned int current_degree
Stores the degree of the current poly degree.
The metric independent FR mass matrix for auxiliary equation .
const Parameters::AllParameters::Flux_Reconstruction FR_param_type
Flux reconstruction parameter type.
Projection operator corresponding to basis functions onto -norm for auxiliary equation.
const double FR_user_specified_correction_parameter_value
User specified flux recontruction correction parameter value.
unsigned int current_degree
Stores the degree of the current poly degree.
Files for the baseline physics.
unsigned int current_degree
Stores the degree of the current poly degree.
dealii::Tensor< 2, dim, std::vector< real > > metric_cofactor_surf
The facet metric cofactor matrix, for ONE face.
unsigned int current_degree
Stores the degree of the current poly degree.
Flux_Reconstruction
Type of correction in Flux Reconstruction.
const bool store_Jacobian
Flag if store metric Jacobian at flux nodes.
unsigned int current_degree
Stores the degree of the current poly degree.
-th order modal derivative of basis fuctions, ie/
const double FR_user_specified_correction_parameter_value
User specified flux recontruction correction parameter value.
std::array< dealii::FullMatrix< double >, 2 > oneD_surf_grad_operator
Stores the one dimensional surface gradient operator.
const Parameters::AllParameters::Flux_Reconstruction FR_param_type
Flux reconstruction parameter type.
That is Quadrature Weights multiplies with basis_at_vol_cubature.
const bool store_surf_flux_nodes
Flag if store metric Jacobian at flux nodes.
unsigned int current_degree
Stores the degree of the current poly degree.
basis_functions< dim, n_faces > mapping_shape_functions_grid_nodes
Object of mapping shape functions evaluated at grid nodes.
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 > 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.
double compute_factorial(double n)
Standard function to compute factorial of a number.
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.
const Parameters::AllParameters::Flux_Reconstruction_Aux FR_param_type
Flux reconstruction parameter type.
The DG lifting operator is defined as the operator that lifts inner products of polynomials of some o...
bool store_transpose
Flag is store transpose operator.
const unsigned int max_grid_degree
Max grid degree.
dealii::Tensor< 2, dim, std::vector< real > > metric_Jacobian_vol_cubature
Stores the metric Jacobian at flux nodes.
dealii::FullMatrix< double > oneD_transpose_vol_operator
Stores the transpose of the operator for fast weight-adjusted solves.
The ESFR lifting operator.
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.
const MPI_Comm mpi_communicator
MPI communicator.
Base metric operators class that stores functions used in both the volume and on surface.
ESFR correction matrix for AUX EQUATION without jac dependence.
dealii::FullMatrix< double > oneD_vol_operator
Stores the one dimensional volume operator.
The mapping shape functions evaluated at the desired nodes (facet set included in volume grid nodes f...
unsigned int current_degree
Stores the degree of the current poly degree.
unsigned int current_grid_degree
Stores the degree of the current grid degree.
unsigned int current_degree
Stores the degree of the current poly degree.
const bool store_vol_flux_nodes
Flag if store metric Jacobian at flux nodes.
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 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.
The metric independent FR mass matrix .
const Parameters::AllParameters::Flux_Reconstruction_Aux FR_param_aux_type
Flux reconstruction parameter type.
const Parameters::AllParameters::Flux_Reconstruction_Aux FR_param_type
Flux reconstruction parameter type.
Flux_Reconstruction_Aux
Type of correction in Flux Reconstruction for the auxiliary variables.
dealii::FullMatrix< double > oneD_grad_operator
Stores the one dimensional gradient operator.
std::vector< real > det_Jac_surf
The determinant of the metric Jacobian at facet cubature nodes.
unsigned int current_degree
Stores the degree of the current poly degree.
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.
dealii::FullMatrix< double > oneD_skew_symm_vol_oper
Skew-symmetric volume operator .
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.
unsigned int current_degree
Stores the degree of the current poly degree.
double FR_param_aux
Flux reconstruction paramater value.
const Parameters::AllParameters::Flux_Reconstruction FR_param_type
Flux reconstruction parameter type.
const double FR_user_specified_correction_parameter_value
User specified flux recontruction correction parameter value.
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.
const double FR_user_specified_correction_parameter_value
User specified flux recontruction correction parameter value.
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.
Projection operator corresponding to basis functions onto M-norm (L2).
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.
Local stiffness matrix without jacobian dependence.
unsigned int current_degree
Stores the degree of the current poly degree.
unsigned int max_grid_degree_check
Check to see if the metrics used are a higher order then the initialized grid.
OperatorsBase(const int nstate_input, const unsigned int max_degree_input, const unsigned int grid_degree_input)
Constructor.
unsigned int current_degree
Stores the degree of the current poly degree.
unsigned int current_degree
Stores the degree of the current poly degree.