17 #include <deal.II/base/vector_slice.h> 18 #include <deal.II/base/memory_consumption.h> 19 #include <deal.II/lac/block_sparsity_pattern.h> 21 DEAL_II_NAMESPACE_OPEN
24 template <
class SparsityPatternBase>
33 template <
class SparsityPatternBase>
41 reinit (n_block_rows, n_block_columns);
46 template <
class SparsityPatternBase>
53 Assert(s.
rows==0, ExcInvalidConstructorCall());
62 template <
class SparsityPatternBase>
71 template <
class SparsityPatternBase>
91 columns = n_block_columns;
98 SparsityPatternBase *p =
new SparsityPatternBase;
104 template <
class SparsityPatternBase>
123 template <
class SparsityPatternBase>
127 std::vector<size_type > row_sizes (
rows);
128 std::vector<size_type > col_sizes (
columns);
140 ExcIncompatibleRowNumbers (r,0,r,c));
153 ExcIncompatibleRowNumbers (0,c,r,c));
162 template <
class SparsityPatternBase>
173 template <
class SparsityPatternBase>
186 template <
class SparsityPatternBase>
197 if (this_row > max_entries)
198 max_entries = this_row;
205 template <
class SparsityPatternBase>
219 template <
class SparsityPatternBase>
233 template <
class SparsityPatternBase>
246 template <
class SparsityPatternBase>
259 const SparsityPatternBase &b =
block(ib,jb);
265 out <<
']' << std::endl;
267 k +=
block(ib,0).n_rows();
292 out <<
']' << std::endl;
294 k +=
block(ib,0).n_rows();
299 template <
class SparsityPatternBase>
311 const SparsityPatternBase &b =
block(ib,jb);
314 out << l+j <<
" " << -static_cast<signed int>(i+k) << std::endl;
318 k +=
block(ib,0).n_rows();
341 const std::vector<std::vector<unsigned int> > &row_lengths)
352 if (row_lengths[j].size()==1)
358 block_rows(row_lengths[j], start, length);
436 const std::vector<size_type> &col_indices)
441 for (
size_type i=0; i<row_indices.size(); ++i)
442 for (
size_type j=0; j<col_indices.size(); ++j)
443 this->
block(i,j).
reinit(row_indices[i],col_indices[j]);
454 for (
size_type i=0; i<partitioning.size(); ++i)
455 for (
size_type j=0; j<partitioning.size(); ++j)
457 partitioning[j].size(),
467 reinit(row_indices, col_indices);
473 const std::vector<size_type> &row_block_sizes,
474 const std::vector<size_type> &col_block_sizes)
477 reinit(row_block_sizes.size(), col_block_sizes.size());
478 for (
size_type i=0; i<row_block_sizes.size(); ++i)
479 for (
size_type j=0; j<col_block_sizes.size(); ++j)
480 this->
block(i,j).
reinit(row_block_sizes[i],col_block_sizes[j]);
486 const std::vector< IndexSet > &partitioning)
489 reinit(partitioning.size(), partitioning.size());
490 for (
size_type i=0; i<partitioning.size(); ++i)
491 for (
size_type j=0; j<partitioning.size(); ++j)
493 partitioning[j].size(),
513 #ifdef DEAL_II_WITH_TRILINOS 534 const std::vector<size_type> &col_indices)
539 for (
size_type i=0; i<row_indices.size(); ++i)
540 for (
size_type j=0; j<col_indices.size(); ++j)
541 this->
block(i,j).
reinit(row_indices[i],col_indices[j]);
551 (parallel_partitioning.size(),
552 parallel_partitioning.size())
554 for (
size_type i=0; i<parallel_partitioning.size(); ++i)
555 for (
size_type j=0; j<parallel_partitioning.size(); ++j)
557 parallel_partitioning[j]);
565 const MPI_Comm &communicator)
568 (parallel_partitioning.size(),
569 parallel_partitioning.size())
571 for (
size_type i=0; i<parallel_partitioning.size(); ++i)
572 for (
size_type j=0; j<parallel_partitioning.size(); ++j)
574 parallel_partitioning[j],
583 const std::vector<IndexSet> &col_parallel_partitioning,
584 const std::vector<IndexSet> &writable_rows,
585 const MPI_Comm &communicator)
588 (row_parallel_partitioning.size(),
589 col_parallel_partitioning.size())
591 for (
size_type i=0; i<row_parallel_partitioning.size(); ++i)
592 for (
size_type j=0; j<col_parallel_partitioning.size(); ++j)
593 this->
block(i,j).
reinit(row_parallel_partitioning[i],
594 col_parallel_partitioning[j],
604 const std::vector<size_type> &col_block_sizes)
607 reinit(row_block_sizes.size(), col_block_sizes.size());
608 for (
size_type i=0; i<row_block_sizes.size(); ++i)
609 for (
size_type j=0; j<col_block_sizes.size(); ++j)
610 this->
block(i,j).
reinit(row_block_sizes[i],col_block_sizes[j]);
620 reinit(parallel_partitioning.size(),
621 parallel_partitioning.size());
622 for (
size_type i=0; i<parallel_partitioning.size(); ++i)
623 for (
size_type j=0; j<parallel_partitioning.size(); ++j)
625 parallel_partitioning[j]);
633 const MPI_Comm &communicator)
636 reinit(parallel_partitioning.size(),
637 parallel_partitioning.size());
638 for (
size_type i=0; i<parallel_partitioning.size(); ++i)
639 for (
size_type j=0; j<parallel_partitioning.size(); ++j)
641 parallel_partitioning[j],
650 const std::vector<IndexSet> &col_parallel_partitioning,
651 const MPI_Comm &communicator)
654 reinit(row_parallel_partitioning.size(),
655 col_parallel_partitioning.size());
656 for (
size_type i=0; i<row_parallel_partitioning.size(); ++i)
657 for (
size_type j=0; j<col_parallel_partitioning.size(); ++j)
658 this->
block(i,j).
reinit(row_parallel_partitioning[i],
659 col_parallel_partitioning[j],
668 const std::vector<IndexSet> &col_parallel_partitioning,
669 const std::vector<IndexSet> &writable_rows,
670 const MPI_Comm &communicator)
672 AssertDimension(writable_rows.size(), row_parallel_partitioning.size());
674 reinit(row_parallel_partitioning.size(),
675 col_parallel_partitioning.size());
676 for (
size_type i=0; i<row_parallel_partitioning.size(); ++i)
677 for (
size_type j=0; j<col_parallel_partitioning.size(); ++j)
678 this->
block(i,j).
reinit(row_parallel_partitioning[i],
679 col_parallel_partitioning[j],
691 #ifdef DEAL_II_WITH_TRILINOS 695 DEAL_II_NAMESPACE_CLOSE
void reinit(const std::vector< size_type > &row_block_sizes, const std::vector< size_type > &col_block_sizes)
BlockIndices column_indices
#define AssertDimension(dim1, dim2)
BlockSparsityPatternBase()
size_type n_block_cols() const
size_type n_block_rows() const
Auxiliary class aiding in the handling of block structures like in BlockVector or FESystem...
size_type block_size(const unsigned int i) const
SparsityPatternType & block(const size_type row, const size_type column)
~BlockSparsityPatternBase()
void reinit(const size_type n_block_rows, const size_type n_block_columns)
types::global_dof_index size_type
void reinit(const size_type n_block_rows, const size_type n_block_columns)
std::size_t memory_consumption() const
void print(std::ostream &out) const
void reinit(const TableIndices< N > &new_size, const bool omit_default_initialization=false)
size_type max_entries_per_row() const
#define Assert(cond, exc)
void reinit(const size_type m, const size_type n, const IndexSet &rowset=IndexSet())
void reinit(const unsigned int n_blocks, const size_type n_elements_per_block)
const IndexSet & row_index_set() const
BlockSparsityPatternBase & operator=(const BlockSparsityPatternBase &)
size_type local_to_global(const unsigned int block, const size_type index) const
size_type n_nonzero_elements() const
void copy_from(const size_type n_rows, const size_type n_cols, const ForwardIterator begin, const ForwardIterator end)
BlockDynamicSparsityPattern()
void reinit(const size_type m, const size_type n, const unsigned int max_per_row)
std_cxx11::enable_if< std_cxx11::is_fundamental< T >::value, std::size_t >::type memory_consumption(const T &t)
Table< 2, SmartPointer< SparsityPatternType, BlockSparsityPatternBase< SparsityPatternType > > > sub_objects
void print_gnuplot(std::ostream &out) const
bool is_element(const size_type index) const
void copy_from(const BlockDynamicSparsityPattern &dsp)
bool exists(const size_type i, const size_type j) const
unsigned int size() const
bool is_compressed() const