17#ifndef dealii_matrix_free_dof_info_h
18#define dealii_matrix_free_dof_info_h
44 namespace MatrixFreeFunctions
49 template <
typename,
typename>
50 struct FPArrayComparator;
62template <
int,
int,
bool>
69 namespace MatrixFreeFunctions
81 template <
typename Number>
93 template <
typename number2>
96 const std::vector<std::pair<types::global_dof_index, number2>>
99 std::vector<std::pair<types::global_dof_index, double>>
104 std::map<std::vector<Number>,
189 const
unsigned int fe_degree) const;
212 const
unsigned int cell_batch,
213 const
bool with_constraints = true) const;
224 template <typename number>
227 const
std::vector<
types::global_dof_index> &local_indices_resolved,
228 const
std::vector<
types::global_dof_index> &local_indices,
229 const
bool cell_has_hanging_nodes,
231 const
unsigned int cell_number,
233 bool & cell_at_boundary);
243 const
std::vector<
std::vector<
unsigned int>> &lexicographic_mapping,
244 const
unsigned int cell_number,
258 const
bool use_vector_data_exchanger_full);
268 const
std::vector<
unsigned int> & renumbering,
269 const
std::vector<
unsigned int> & constraint_pool_row_index,
270 const
std::vector<
unsigned char> &irregular_cells);
278 const
std::vector<
unsigned char> &irregular_cells);
284 template <
int length>
296 const
std::vector<
unsigned int> &renumbering,
307 const
unsigned int n_owned_cells,
308 const
unsigned int n_lanes,
311 const
bool fill_cell_centric,
313 const
bool use_vector_data_exchanger_full);
322 std::array<
std::vector<
std::pair<
unsigned int,
unsigned int>>, 3>
323 &cell_indices_contiguous_sm);
337 std::vector<
types::global_dof_index> &renumbering);
348 template <
int length>
364 template <typename StreamType>
373 template <typename Number>
375 print(const
std::vector<Number> & constraint_pool_data,
376 const
std::vector<
unsigned int> &constraint_pool_row_index,
377 std::ostream & out) const;
525 std::vector<std::pair<unsigned int, unsigned int>>
row_starts;
565 std::vector<std::pair<unsigned short, unsigned short>>
591 std::array<std::vector<std::pair<unsigned int, unsigned int>>, 3>
807 const unsigned int fe_degree)
const
812 for (
unsigned int i = 0; i < n_indices; ++i)
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
std::uint8_t compressed_constraint_kind
static const unsigned int invalid_unsigned_int
unsigned int global_dof_index
std::vector< types::global_dof_index > constraint_indices
std::map< std::vector< Number >, types::global_dof_index, FPArrayComparator< Number, VectorizedArray< Number > > > constraints
std::vector< std::pair< types::global_dof_index, double > > constraint_entries
std::pair< std::vector< Number >, types::global_dof_index > next_constraint
unsigned short insert_entries(const std::vector< std::pair< types::global_dof_index, number2 > > &entries)
void print(const std::vector< Number > &constraint_pool_data, const std::vector< unsigned int > &constraint_pool_row_index, std::ostream &out) const
@ dof_access_face_exterior
@ dof_access_face_interior
void reorder_cells(const TaskInfo &task_info, const std::vector< unsigned int > &renumbering, const std::vector< unsigned int > &constraint_pool_row_index, const std::vector< unsigned char > &irregular_cells)
std::vector< std::pair< unsigned short, unsigned short > > constraint_indicator
std::vector< unsigned int > cell_loop_pre_list_index
std::vector< std::pair< unsigned int, unsigned int > > row_starts
unsigned int n_base_elements
std::vector< std::vector< unsigned int > > component_dof_indices_offset
std::vector< std::vector< bool > > hanging_node_constraint_masks_comp
unsigned int global_base_element_offset
unsigned int max_fe_index
void get_dof_indices_on_cell_batch(std::vector< unsigned int > &local_indices, const unsigned int cell_batch, const bool with_constraints=true) const
unsigned int fe_index_from_degree(const unsigned int first_selected_component, const unsigned int fe_degree) const
void compute_cell_index_compression(const std::vector< unsigned char > &irregular_cells)
void compute_face_index_compression(const std::vector< FaceToCellTopology< length > > &faces)
std::vector< unsigned int > cell_loop_post_list_index
std::vector< unsigned int > dofs_per_cell
void compute_dof_renumbering(std::vector< types::global_dof_index > &renumbering)
unsigned int vectorization_length
static const unsigned int chunk_size_zero_vector
std::shared_ptr< const internal::MatrixFreeFunctions::VectorDataExchange::Base > vector_exchanger
@ interleaved_contiguous_strided
@ interleaved_contiguous_mixed_strides
std::vector< std::vector< unsigned int > > fe_index_conversion
void compute_tight_partitioners(const Table< 2, ShapeInfo< double > > &shape_info, const unsigned int n_owned_cells, const unsigned int n_lanes, const std::vector< FaceToCellTopology< 1 > > &inner_faces, const std::vector< FaceToCellTopology< 1 > > &ghosted_faces, const bool fill_cell_centric, const MPI_Comm &communicator_sm, const bool use_vector_data_exchanger_full)
std::vector< unsigned int > dof_indices
std::vector< std::pair< unsigned int, unsigned int > > vector_zero_range_list
std::shared_ptr< const Utilities::MPI::Partitioner > vector_partitioner
std::vector< compressed_constraint_kind > hanging_node_constraint_masks
std::array< std::vector< unsigned int >, 3 > dof_indices_interleave_strides
std::array< std::vector< std::pair< unsigned int, unsigned int > >, 3 > dof_indices_contiguous_sm
std::vector< unsigned int > row_starts_plain_indices
std::vector< unsigned int > dofs_per_face
std::size_t memory_consumption() const
std::vector< unsigned int > component_to_base_index
void compute_vector_zero_access_pattern(const TaskInfo &task_info, const std::vector< FaceToCellTopology< length > > &faces)
std::vector< unsigned int > n_components
void print_memory_consumption(StreamType &out, const TaskInfo &size_info) const
void assign_ghosts(const std::vector< unsigned int > &boundary_cells, const MPI_Comm &communicator_sm, const bool use_vector_data_exchanger_full)
std::vector< std::pair< unsigned int, unsigned int > > cell_loop_pre_list
std::vector< types::global_dof_index > ghost_dofs
void read_dof_indices(const std::vector< types::global_dof_index > &local_indices_resolved, const std::vector< types::global_dof_index > &local_indices, const bool cell_has_hanging_nodes, const ::AffineConstraints< number > &constraints, const unsigned int cell_number, ConstraintValues< double > &constraint_values, bool &cell_at_boundary)
std::array< std::vector< unsigned int >, 3 > dof_indices_contiguous
bool process_hanging_node_constraints(const HangingNodes< dim > &hanging_nodes, const std::vector< std::vector< unsigned int > > &lexicographic_mapping, const unsigned int cell_number, const TriaIterator< DoFCellAccessor< dim, dim, false > > &cell, std::vector< types::global_dof_index > &dof_indices)
DoFInfo(const DoFInfo &)=default
std::vector< unsigned int > cell_active_fe_index
std::array< std::shared_ptr< const internal::MatrixFreeFunctions::VectorDataExchange::Base >, 5 > vector_exchanger_face_variants
std::vector< unsigned int > plain_dof_indices
std::array< std::vector< unsigned char >, 3 > n_vectorization_lanes_filled
std::vector< unsigned int > start_components
std::vector< unsigned int > dof_indices_interleaved
std::vector< unsigned int > constrained_dofs
std::array< std::vector< IndexStorageVariants >, 3 > index_storage_variants
void make_connectivity_graph(const TaskInfo &task_info, const std::vector< unsigned int > &renumbering, DynamicSparsityPattern &connectivity) const
std::vector< unsigned int > vector_zero_range_list_index
void compute_shared_memory_contiguous_indices(std::array< std::vector< std::pair< unsigned int, unsigned int > >, 3 > &cell_indices_contiguous_sm)
std::vector< std::pair< unsigned int, unsigned int > > cell_loop_post_list
DoFInfo(DoFInfo &&) noexcept=default