16 #ifndef dealii_block_sparsity_pattern_h 17 #define dealii_block_sparsity_pattern_h 20 #include <deal.II/base/config.h> 22 #include <deal.II/base/exceptions.h> 23 #include <deal.II/base/smartpointer.h> 24 #include <deal.II/base/subscriptor.h> 25 #include <deal.II/base/table.h> 27 #include <deal.II/lac/block_indices.h> 28 #include <deal.II/lac/dynamic_sparsity_pattern.h> 29 #include <deal.II/lac/sparsity_pattern.h> 30 #include <deal.II/lac/trilinos_sparsity_pattern.h> 32 DEAL_II_NAMESPACE_OPEN
35 template <
typename number>
76 template <
typename SparsityPatternType>
159 SparsityPatternType &
167 const SparsityPatternType &
242 template <
typename ForwardIterator>
245 ForwardIterator begin,
247 const bool indices_are_sorted =
false);
297 print(std::ostream &out)
const;
322 <<
"The blocks [" << arg1 <<
',' << arg2 <<
"] and [" << arg3
323 <<
',' << arg4 <<
"] have differing row numbers.");
332 <<
"The blocks [" << arg1 <<
',' << arg2 <<
"] and [" << arg3
333 <<
',' << arg4 <<
"] have differing column numbers.");
384 template <
typename number>
439 const std::vector<std::vector<unsigned int>> &row_lengths);
447 is_compressed()
const;
454 memory_consumption()
const;
535 const std::vector<size_type> &col_block_sizes);
564 reinit(
const std::vector<size_type> &row_block_sizes,
565 const std::vector<size_type> &col_block_sizes);
572 reinit(
const std::vector<IndexSet> &partitioning);
587 column_number(
const size_type row,
const unsigned int index)
const;
598 #ifdef DEAL_II_WITH_TRILINOS 651 const std::vector<size_type> &col_block_sizes);
673 BlockSparsityPattern(
const std::vector<IndexSet> ¶llel_partitioning,
674 const MPI_Comm &communicator = MPI_COMM_WORLD);
687 BlockSparsityPattern(
688 const std::vector<IndexSet> &row_parallel_partitioning,
689 const std::vector<IndexSet> &column_parallel_partitioning,
690 const std::vector<IndexSet> &writeable_rows,
691 const MPI_Comm & communicator = MPI_COMM_WORLD);
703 reinit(
const std::vector<size_type> &row_block_sizes,
704 const std::vector<size_type> &col_block_sizes);
715 reinit(
const std::vector<Epetra_Map> ¶llel_partitioning);
722 reinit(
const std::vector<IndexSet> ¶llel_partitioning,
723 const MPI_Comm & communicator = MPI_COMM_WORLD);
731 reinit(
const std::vector<IndexSet> &row_parallel_partitioning,
732 const std::vector<IndexSet> &column_parallel_partitioning,
733 const MPI_Comm & communicator = MPI_COMM_WORLD);
744 reinit(
const std::vector<IndexSet> &row_parallel_partitioning,
745 const std::vector<IndexSet> &column_parallel_partitioning,
746 const std::vector<IndexSet> &writeable_rows,
747 const MPI_Comm & communicator = MPI_COMM_WORLD);
765 template <
typename SparsityPatternType>
766 inline SparsityPatternType &
777 template <
typename SparsityPatternType>
778 inline const SparsityPatternType &
790 template <
typename SparsityPatternType>
799 template <
typename SparsityPatternType>
808 template <
typename SparsityPatternType>
816 const std::pair<size_type, size_type> row_index =
820 sub_objects[row_index.first][col_index.first]->add(row_index.second,
826 template <
typename SparsityPatternType>
827 template <
typename ForwardIterator>
831 ForwardIterator begin,
833 const bool indices_are_sorted)
872 for (ForwardIterator it = begin; it != end; ++it)
876 const std::pair<size_type, size_type> col_index =
898 const std::pair<size_type, size_type> row_index =
904 sub_objects[row_index.first][block_col]->add_entries(
915 template <
typename SparsityPatternType>
923 const std::pair<size_type, size_type> row_index =
927 return sub_objects[row_index.first][col_index.first]->exists(
928 row_index.second, col_index.second);
933 template <
typename SparsityPatternType>
938 const std::pair<size_type, size_type> row_index =
944 c +=
sub_objects[row_index.first][b]->row_length(row_index.second);
951 template <
typename SparsityPatternType>
960 template <
typename SparsityPatternType>
970 const unsigned int index)
const 973 const std::pair<size_type, size_type> row_index =
980 for (
unsigned int b = 0; b <
columns; ++b)
982 unsigned int rowlen =
983 sub_objects[row_index.first][b]->row_length(row_index.second);
984 if (index < c + rowlen)
985 return block_columns +
986 sub_objects[row_index.first][b]->column_number(row_index.second,
989 block_columns +=
sub_objects[row_index.first][b]->n_cols();
1006 DEAL_II_NAMESPACE_CLOSE
const BlockIndices & get_row_indices() const
static::ExceptionBase & ExcIncompatibleRowNumbers(int arg1, int arg2, int arg3, int arg4)
size_type n_block_cols() const
BlockIndices column_indices
void print(std::ostream &out) const
std::vector< std::vector< size_type > > block_column_indices
std::vector< size_type > counter_within_block
BlockSparsityPatternBase()
static const size_type invalid_entry
static::ExceptionBase & ExcIndexRange(int arg1, int arg2, int arg3)
size_type n_nonzero_elements() const
unsigned long long int global_dof_index
SparsityPatternType & block(const size_type row, const size_type column)
void reinit(const size_type n_block_rows, const size_type n_block_columns)
bool exists(const size_type i, const size_type j) const
void reinit(const size_type n_block_rows, const size_type n_block_columns)
unsigned int row_length(const size_type row) const
static const size_type invalid_entry
void add(const size_type i, const size_type j)
#define Assert(cond, exc)
void add_entries(const size_type row, ForwardIterator begin, ForwardIterator end, const bool indices_are_sorted=false)
BlockSparsityPatternBase & operator=(const BlockSparsityPatternBase &)
size_type n_block_rows() const
static::ExceptionBase & ExcIncompatibleColNumbers(int arg1, int arg2, int arg3, int arg4)
size_type max_entries_per_row() const
std::pair< unsigned int, size_type > global_to_local(const size_type i) const
~BlockSparsityPatternBase() override
Table< 2, SmartPointer< SparsityPatternType, BlockSparsityPatternBase< SparsityPatternType > > > sub_objects
const BlockIndices & get_column_indices() const
void print_gnuplot(std::ostream &out) const
size_type column_number(const size_type row, const unsigned int index) const
#define DeclException4(Exception4, type1, type2, type3, type4, outsequence)
types::global_dof_index size_type
static::ExceptionBase & ExcInternalError()