16 #ifndef dealii__block_sparsity_pattern_h 17 #define dealii__block_sparsity_pattern_h 20 #include <deal.II/base/config.h> 21 #include <deal.II/base/exceptions.h> 22 #include <deal.II/base/table.h> 23 #include <deal.II/base/subscriptor.h> 24 #include <deal.II/base/smartpointer.h> 25 #include <deal.II/lac/sparsity_pattern.h> 26 #include <deal.II/lac/trilinos_sparsity_pattern.h> 27 #include <deal.II/lac/dynamic_sparsity_pattern.h> 28 #include <deal.II/lac/block_indices.h> 30 DEAL_II_NAMESPACE_OPEN
73 template <
typename SparsityPatternType>
105 const size_type n_block_columns);
134 const size_type n_block_columns);
154 SparsityPatternType &
155 block (
const size_type row,
156 const size_type column);
163 const SparsityPatternType &
164 block (
const size_type row,
165 const size_type column)
const;
221 void add (
const size_type i,
const size_type j);
233 template <
typename ForwardIterator>
235 ForwardIterator begin,
237 const bool indices_are_sorted =
false);
243 size_type
n_rows ()
const;
250 size_type
n_cols ()
const;
255 bool exists (
const size_type i,
const size_type j)
const;
261 unsigned int row_length (
const size_type row)
const;
281 void print (std::ostream &out)
const;
302 <<
"The blocks [" << arg1 <<
',' << arg2 <<
"] and [" 303 << arg3 <<
',' << arg4 <<
"] have differing row numbers.");
309 <<
"The blocks [" << arg1 <<
',' << arg2 <<
"] and [" 310 << arg3 <<
',' << arg4 <<
"] have differing column numbers.");
359 template <
typename number>
415 const std::vector<std::vector<unsigned int> > &row_lengths);
422 bool is_compressed ()
const;
428 std::size_t memory_consumption ()
const;
508 const std::vector<size_type> &col_block_sizes);
536 void reinit (
const std::vector<size_type> &row_block_sizes,
537 const std::vector<size_type> &col_block_sizes);
543 void reinit(
const std::vector<IndexSet> &partitioning);
557 const unsigned int index)
const;
568 #ifdef DEAL_II_WITH_TRILINOS 624 const std::vector<size_type> &col_block_sizes);
646 const MPI_Comm &communicator = MPI_COMM_WORLD);
660 const std::vector<IndexSet> &column_parallel_partitioning,
661 const std::vector<IndexSet> &writeable_rows,
662 const MPI_Comm &communicator = MPI_COMM_WORLD);
673 void reinit (
const std::vector<size_type> &row_block_sizes,
674 const std::vector<size_type> &col_block_sizes);
683 void reinit (
const std::vector<Epetra_Map> ¶llel_partitioning) DEAL_II_DEPRECATED;
689 void reinit (
const std::vector<IndexSet> ¶llel_partitioning,
690 const MPI_Comm &communicator = MPI_COMM_WORLD);
697 void reinit (
const std::vector<IndexSet> &row_parallel_partitioning,
698 const std::vector<IndexSet> &column_parallel_partitioning,
699 const MPI_Comm &communicator = MPI_COMM_WORLD);
709 void reinit (
const std::vector<IndexSet> &row_parallel_partitioning,
710 const std::vector<IndexSet> &column_parallel_partitioning,
711 const std::vector<IndexSet> &writeable_rows,
712 const MPI_Comm &communicator = MPI_COMM_WORLD);
730 template <
typename SparsityPatternType>
732 SparsityPatternType &
743 template <
typename SparsityPatternType>
745 const SparsityPatternType &
756 template <
typename SparsityPatternType>
766 template <
typename SparsityPatternType>
776 template <
typename SparsityPatternType>
785 const std::pair<size_type,size_type>
788 sub_objects[row_index.first][col_index.first]->add (row_index.second,
794 template <
typename SparsityPatternType>
795 template <
typename ForwardIterator>
798 ForwardIterator begin,
800 const bool indices_are_sorted)
839 for (ForwardIterator it = begin; it != end; ++it)
843 const std::pair<size_type , size_type>
865 const std::pair<size_type , size_type>
881 template <
typename SparsityPatternType>
890 const std::pair<size_type , size_type>
893 return sub_objects[row_index.first][col_index.first]->exists (row_index.second,
899 template <
typename SparsityPatternType>
905 const std::pair<size_type , size_type>
911 c +=
sub_objects[row_index.first][b]->row_length (row_index.second);
918 template <
typename SparsityPatternType>
928 template <
typename SparsityPatternType>
940 const unsigned int index)
const 943 const std::pair<size_type ,size_type >
950 for (
unsigned int b=0; b<
columns; ++b)
952 unsigned int rowlen =
sub_objects[row_index.first][b]->row_length (row_index.second);
954 return block_columns+
sub_objects[row_index.first][b]->column_number(row_index.second, index-c);
956 block_columns +=
sub_objects[row_index.first][b]->n_cols();
971 n_block_rows, n_block_columns);
975 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
BlockSparsityPatternBase()
static const size_type invalid_entry
static::ExceptionBase & ExcIndexRange(int arg1, int arg2, int arg3)
size_type n_nonzero_elements() const
SparsityPatternType & block(const size_type row, const size_type column)
std::vector< size_type > counter_within_block
~BlockSparsityPatternBase()
void reinit(const size_type n_block_rows, const size_type n_block_columns)
types::global_dof_index size_type
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)
unsigned int global_dof_index
#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
std::vector< std::vector< size_type > > block_column_indices
const BlockIndices & get_column_indices() const
Table< 2, SmartPointer< SparsityPatternType, BlockSparsityPatternBase< SparsityPatternType > > > sub_objects
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)
static::ExceptionBase & ExcInternalError()