72 std::tuple<
unsigned int ,
73 dealii::Tensor<1, dim, Number> ,
76 dealii::types::boundary_id ,
113 const std::string &subsection =
"/OfflineData");
123 void prepare(
const unsigned int problem_dimension,
124 const unsigned int n_precomputed_values);
155 if (discretization_->have_discontinuous_ansatz()) {
156 Assert(dof_handler_dg_, dealii::ExcInternalError());
157 return *dof_handler_dg_;
159 Assert(dof_handler_cg_, dealii::ExcInternalError());
160 return *dof_handler_cg_;
202 if (discretization_->have_discontinuous_ansatz()) {
203 return *affine_constraints_dg_;
205 return *affine_constraints_cg_;
394 bool treat_fe_nothing_as_boundary_;
395 double incidence_relaxation_even_;
396 double incidence_relaxation_odd_;
406 dealii::ObserverPointer<const Discretization<dim>> discretization_;
408 std::unique_ptr<dealii::DoFHandler<dim>> dof_handler_cg_;
409 std::unique_ptr<dealii::DoFHandler<dim>> dof_handler_dg_;
411 std::unique_ptr<dealii::AffineConstraints<Number>> affine_constraints_cg_;
412 std::unique_ptr<dealii::AffineConstraints<Number>> affine_constraints_dg_;
414 std::shared_ptr<const dealii::Utilities::MPI::Partitioner>
417 std::shared_ptr<const dealii::Utilities::MPI::Partitioner>
418 hyperbolic_vector_partitioner_;
420 std::shared_ptr<const dealii::Utilities::MPI::Partitioner>
421 precomputed_vector_partitioner_;
423 unsigned int n_export_indices_;
424 unsigned int n_locally_internal_;
425 unsigned int n_locally_owned_;
426 unsigned int n_locally_relevant_;
429 std::vector<BoundaryMap> level_boundary_map_;
431 std::unique_ptr<Mirrored<unsigned int *>> boundary_indices_;
432 std::vector<unsigned int> boundary_slots_;
434 std::unique_ptr<Mirrored<CouplingDescription *>> coupling_boundary_pairs_;
436 std::unique_ptr<dealii::DynamicSparsityPattern> sparsity_pattern_;
438 std::unique_ptr<SparsityPattern<warp_size>> sparsity_pattern_simd_;
440 std::unique_ptr<SparseMatrix<Number>> mass_matrix_;
441 std::unique_ptr<SparseMatrix<Number>> mass_matrix_inverse_;
443 std::unique_ptr<ScalarVector<Number>> lumped_mass_matrix_;
444 std::unique_ptr<ScalarVector<Number>> lumped_mass_matrix_inverse_;
446 std::vector<ScalarHostVector<float>> level_lumped_mass_matrix_;
448 std::unique_ptr<SparseMatrix<Number>> betaij_matrix_;
449 std::unique_ptr<SparseMatrix<Number, dim>> cij_matrix_;
450 std::unique_ptr<SparseMatrix<Number>> incidence_matrix_;
452 Number measure_of_omega_;
463 dealii::DoFHandler<dim> &writable_dof_handler()
465 if (this->discretization_->have_discontinuous_ansatz()) {
466 Assert(this->dof_handler_dg_, dealii::ExcInternalError());
467 return *this->dof_handler_dg_;
469 Assert(this->dof_handler_cg_, dealii::ExcInternalError());
470 return *this->dof_handler_cg_;
479 void create_dof_handlers();
487 void renumber_for_simd();
495 void create_constraints_and_sparsity_pattern();
504 void ensure_simd_stride_consistency();
511 void create_partitioner_and_simd_sparsity(
512 const unsigned int problem_dimension,
513 const unsigned int n_precomputed_values);
520 void create_matrices();
527 void create_multigrid_data();
532 template <
typename ITERATOR1,
typename ITERATOR2>
534 const ITERATOR1 &begin,
535 const ITERATOR2 &end,
536 const dealii::Utilities::MPI::Partitioner &partitioner)
const;
542 template <
typename ITERATOR1,
typename ITERATOR2>
544 const ITERATOR1 &begin,
545 const ITERATOR2 &end,
546 const dealii::Utilities::MPI::Partitioner &partitioner)
const;