23template <
typename SparsityPatternType>
31template <
typename SparsityPatternType>
42template <
typename SparsityPatternType>
49 "This constructor can only be called if the provided argument "
50 "is the sparsity pattern for an empty matrix. This constructor can "
51 "not be used to copy-construct a non-empty sparsity pattern."));
56template <
typename SparsityPatternType>
70 sub_objects[i][j] = std::make_unique<SparsityPatternType>();
74template <
typename SparsityPatternType>
93template <
typename SparsityPatternType>
107template <
typename SparsityPatternType>
121template <
typename SparsityPatternType>
166template <
typename SparsityPatternType>
177template <
typename SparsityPatternType>
190template <
typename SparsityPatternType>
201 if (this_row > max_entries)
202 max_entries = this_row;
209template <
typename SparsityPatternType>
222template <
typename SparsityPatternType>
235 const SparsityPatternType &b =
block(ib, jb);
236 for (
size_type j = 0; j < b.n_cols(); ++j)
241 out <<
']' << std::endl;
243 k +=
block(ib, 0).n_rows();
254 for (size_type ib = 0; ib < n_block_rows(); ++ib)
256 for (size_type i = 0; i < block(ib, 0).n_rows(); ++i)
260 for (size_type jb = 0; jb < n_block_cols(); ++jb)
263 if (b.row_index_set().size() == 0 ||
264 b.row_index_set().is_element(i))
265 for (size_type j = 0; j < b.n_cols(); ++j)
270 out <<
']' << std::endl;
272 k += block(ib, 0).n_rows();
279template <
typename SparsityPatternType>
282 std::ostream &out)
const
292 const SparsityPatternType &b =
block(ib, jb);
293 for (
size_type j = 0; j < b.n_cols(); ++j)
295 out << l + j <<
" " << -
static_cast<signed int>(i + k)
300 k += block(ib, 0).n_rows();
306template <
typename SparsityPatternType>
309 std::ostream &out)
const
311 const unsigned int m = this->
n_rows();
312 const unsigned int n = this->
n_cols();
314 <<
"<svg xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\" viewBox=\"0 0 "
315 << n + 2 <<
" " << m + 2
317 "<style type=\"text/css\" >\n"
325 << n + 2 <<
"\" height=\"" << m + 2
326 <<
"\" fill=\"rgb(128, 128, 128)\"/>\n"
327 " <rect x=\"1\" y=\"1\" width=\""
328 << n + 0.1 <<
"\" height=\"" << m + 0.1
329 <<
"\" fill=\"rgb(255, 255, 255)\"/>\n\n";
331 for (
unsigned int block_i = 0; block_i <
n_block_rows(); ++block_i)
332 for (
unsigned int block_j = 0; block_j <
n_block_cols(); ++block_j)
333 for (
const auto &entry :
block(block_i, block_j))
335 out <<
" <rect class=\"pixel\" x=\""
338 <<
row_indices.local_to_global(block_i, entry.row()) + 1
339 <<
"\" width=\".9\" height=\".9\"/>\n";
342 out <<
"</svg>" << std::endl;
347template <
typename SparsityPatternType>
376 const std::vector<std::vector<unsigned int>> &row_lengths)
387 if (row_lengths[j].size() == 1)
393 Assert(row_lengths[j].begin() + start + length <=
394 row_lengths[j].end(),
451 const std::vector<size_type> &col_indices)
456 for (
size_type j = 0; j < col_indices.size(); ++j)
464 const std::vector<IndexSet> &partitioning)
468 for (
size_type i = 0; i < partitioning.size(); ++i)
469 for (
size_type j = 0; j < partitioning.size(); ++j)
471 partitioning[j].size(),
489 const std::vector<size_type> &row_block_sizes,
490 const std::vector<size_type> &col_block_sizes)
493 row_block_sizes.size(), col_block_sizes.size());
494 for (
size_type i = 0; i < row_block_sizes.size(); ++i)
495 for (
size_type j = 0; j < col_block_sizes.size(); ++j)
496 this->
block(i, j).
reinit(row_block_sizes[i], col_block_sizes[j]);
506 partitioning.size());
507 for (
size_type i = 0; i < partitioning.size(); ++i)
508 for (
size_type j = 0; j < partitioning.size(); ++j)
510 partitioning[j].size(),
531#ifdef DEAL_II_WITH_TRILINOS
543 const std::vector<size_type> &col_indices)
548 for (
size_type j = 0; j < col_indices.size(); ++j)
556 const std::vector<IndexSet> ¶llel_partitioning,
559 parallel_partitioning.size())
561 for (
size_type i = 0; i < parallel_partitioning.size(); ++i)
562 for (
size_type j = 0; j < parallel_partitioning.size(); ++j)
564 parallel_partitioning[j],
572 const std::vector<IndexSet> &row_parallel_partitioning,
573 const std::vector<IndexSet> &col_parallel_partitioning,
574 const std::vector<IndexSet> &writable_rows,
577 row_parallel_partitioning.size(),
578 col_parallel_partitioning.size())
580 for (
size_type i = 0; i < row_parallel_partitioning.size(); ++i)
581 for (
size_type j = 0; j < col_parallel_partitioning.size(); ++j)
582 this->
block(i, j).
reinit(row_parallel_partitioning[i],
583 col_parallel_partitioning[j],
593 const std::vector<size_type> &col_block_sizes)
596 row_block_sizes.size(), col_block_sizes.size());
597 for (
size_type i = 0; i < row_block_sizes.size(); ++i)
598 for (
size_type j = 0; j < col_block_sizes.size(); ++j)
599 this->
block(i, j).
reinit(row_block_sizes[i], col_block_sizes[j]);
607 const std::vector<IndexSet> ¶llel_partitioning,
611 parallel_partitioning.size(), parallel_partitioning.size());
612 for (
size_type i = 0; i < parallel_partitioning.size(); ++i)
613 for (
size_type j = 0; j < parallel_partitioning.size(); ++j)
615 parallel_partitioning[j],
624 const std::vector<IndexSet> &row_parallel_partitioning,
625 const std::vector<IndexSet> &col_parallel_partitioning,
629 row_parallel_partitioning.size(), col_parallel_partitioning.size());
630 for (
size_type i = 0; i < row_parallel_partitioning.size(); ++i)
631 for (
size_type j = 0; j < col_parallel_partitioning.size(); ++j)
632 this->
block(i, j).
reinit(row_parallel_partitioning[i],
633 col_parallel_partitioning[j],
642 const std::vector<IndexSet> &row_parallel_partitioning,
643 const std::vector<IndexSet> &col_parallel_partitioning,
644 const std::vector<IndexSet> &writable_rows,
647 AssertDimension(writable_rows.size(), row_parallel_partitioning.size());
649 row_parallel_partitioning.size(), col_parallel_partitioning.size());
650 for (
size_type i = 0; i < row_parallel_partitioning.size(); ++i)
651 for (
size_type j = 0; j < col_parallel_partitioning.size(); ++j)
652 this->
block(i, j).
reinit(row_parallel_partitioning[i],
653 col_parallel_partitioning[j],
665#ifdef DEAL_II_WITH_TRILINOS
void reinit(const std::vector< size_type > &row_block_sizes, const std::vector< size_type > &col_block_sizes)
BlockDynamicSparsityPattern()=default
size_type block_size(const unsigned int i) const
unsigned int size() const
void print_gnuplot(std::ostream &out) const
std::vector< size_type > counter_within_block
size_type n_block_rows() const
BlockSparsityPatternBase()
Table< 2, std::unique_ptr< SparsityPatternType > > sub_objects
SparsityPatternType & block(const size_type row, const size_type column)
types::global_dof_index size_type
std::vector< std::vector< size_type > > block_column_indices
size_type n_nonzero_elements() const
void print(std::ostream &out) const
std::size_t memory_consumption() const
void print_svg(std::ostream &out) const
size_type max_entries_per_row() const
size_type compute_n_rows() const
void reinit(const size_type n_block_rows, const size_type n_block_columns)
size_type n_block_cols() const
BlockIndices column_indices
BlockSparsityPatternBase & operator=(const BlockSparsityPatternBase &)
size_type compute_n_cols() const
void copy_from(const BlockDynamicSparsityPattern &dsp)
void reinit(const size_type n_block_rows, const size_type n_block_columns)
BlockSparsityPattern()=default
bool is_compressed() const
void reinit(const size_type m, const size_type n, const IndexSet &rowset=IndexSet())
virtual void resize(const size_type rows, const size_type cols)
void reinit(const size_type m, const size_type n, const ArrayView< const unsigned int > &row_lengths)
void copy_from(const size_type n_rows, const size_type n_cols, const ForwardIterator begin, const ForwardIterator end)
BlockSparsityPattern()=default
void reinit(const std::vector< size_type > &row_block_sizes, const std::vector< size_type > &col_block_sizes)
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
static ::ExceptionBase & ExcIncompatibleRowNumbers(int arg1, int arg2, int arg3, int arg4)
#define Assert(cond, exc)
#define AssertDimension(dim1, dim2)
static ::ExceptionBase & ExcInternalError()
static ::ExceptionBase & ExcMessage(std::string arg1)
std::enable_if_t< std::is_fundamental_v< T >, std::size_t > memory_consumption(const T &t)