67 std::tuple<
unsigned int ,
68 dealii::Tensor<1, dim, Number> ,
71 dealii::types::boundary_id ,
98 const std::string &subsection =
"/OfflineData");
108 void prepare(
const unsigned int problem_dimension,
109 const unsigned int n_precomputed_values);
140 if (discretization_->have_discontinuous_ansatz()) {
141 Assert(dof_handler_dg_, dealii::ExcInternalError());
142 return *dof_handler_dg_;
144 Assert(dof_handler_cg_, dealii::ExcInternalError());
145 return *dof_handler_cg_;
154 if (discretization_->have_discontinuous_ansatz()) {
155 Assert(dof_handler_dg_, dealii::ExcInternalError());
156 return *dof_handler_dg_;
158 Assert(dof_handler_cg_, dealii::ExcInternalError());
159 return *dof_handler_cg_;
201 if (discretization_->have_discontinuous_ansatz()) {
202 return affine_constraints_dg_;
204 return affine_constraints_cg_;
392 bool treat_fe_nothing_as_boundary_;
393 double incidence_relaxation_even_;
394 double incidence_relaxation_odd_;
406 std::unique_ptr<dealii::DoFHandler<dim>> dof_handler_cg_;
407 std::unique_ptr<dealii::DoFHandler<dim>> dof_handler_dg_;
409 dealii::AffineConstraints<Number> affine_constraints_cg_;
410 dealii::AffineConstraints<Number> affine_constraints_dg_;
412 std::shared_ptr<const dealii::Utilities::MPI::Partitioner>
415 std::shared_ptr<const dealii::Utilities::MPI::Partitioner>
416 hyperbolic_vector_partitioner_;
418 std::shared_ptr<const dealii::Utilities::MPI::Partitioner>
419 precomputed_vector_partitioner_;
421 unsigned int n_export_indices_;
422 unsigned int n_locally_internal_;
423 unsigned int n_locally_owned_;
424 unsigned int n_locally_relevant_;
427 BoundaryMap boundary_map_;
428 std::vector<BoundaryMap> level_boundary_map_;
430 Mirrored<
unsigned int *> boundary_indices_{
"offline_data_boundary_indices"};
431 std::vector<unsigned int> boundary_slots_;
433 using CouplingBoundaryPairs = std::vector<CouplingDescription>;
435 "offline_data_coupling_boundary_pairs"};
437 dealii::DynamicSparsityPattern sparsity_pattern_;
439 SparsityPattern<warp_size> sparsity_pattern_simd_;
441 SparseMatrix<Number> mass_matrix_;
442 SparseMatrix<Number> mass_matrix_inverse_;
444 using ScalarVector = Vectors::ScalarVector<Number>;
445 ScalarVector lumped_mass_matrix_;
446 ScalarVector lumped_mass_matrix_inverse_;
448 using ScalarHostVectorFloat = Vectors::ScalarHostVector<float>;
449 std::vector<ScalarHostVectorFloat> level_lumped_mass_matrix_;
451 SparseMatrix<Number> betaij_matrix_;
452 SparseMatrix<Number, dim> cij_matrix_;
453 SparseMatrix<Number> incidence_matrix_;
455 Number measure_of_omega_;
468 void create_dof_handlers();
476 void renumber_for_simd();
484 void create_constraints_and_sparsity_pattern();
493 void ensure_simd_stride_consistency();
500 void create_partitioner_and_simd_sparsity(
501 const unsigned int problem_dimension,
502 const unsigned int n_precomputed_values);
509 void create_matrices();
516 void create_multigrid_data();
521 template <
typename ITERATOR1,
typename ITERATOR2>
522 BoundaryMap construct_boundary_map(
523 const ITERATOR1 &begin,
524 const ITERATOR2 &end,
525 const dealii::Utilities::MPI::Partitioner &partitioner)
const;
531 template <
typename ITERATOR1,
typename ITERATOR2>
532 CouplingBoundaryPairs collect_coupling_boundary_pairs(
533 const ITERATOR1 &begin,
534 const ITERATOR2 &end,
535 const dealii::Utilities::MPI::Partitioner &partitioner)
const;
std::tuple< unsigned int, dealii::Tensor< 1, dim, Number >, Number, Number, dealii::types::boundary_id, dealii::Point< dim > > BoundaryDescription