24 template <
class SparsityPatternBase>
32 template <
class SparsityPatternBase>
39 reinit(n_block_rows, n_block_columns);
44 template <
class SparsityPatternBase>
54 "This constructor can only be called if the provided argument " 55 "is the sparsity pattern for an empty matrix. This constructor can " 56 "not be used to copy-construct a non-empty sparsity pattern."));
61 template <
class SparsityPatternBase>
75 template <
class SparsityPatternBase>
95 columns = n_block_columns;
108 template <
class SparsityPatternBase>
127 template <
class SparsityPatternBase>
131 std::vector<size_type> row_sizes(
rows);
132 std::vector<size_type> col_sizes(
columns);
166 template <
class SparsityPatternBase>
177 template <
class SparsityPatternBase>
190 template <
class SparsityPatternBase>
201 if (this_row > max_entries)
202 max_entries = this_row;
209 template <
class SparsityPatternBase>
223 template <
class SparsityPatternBase>
237 template <
class SparsityPatternBase>
250 template <
class SparsityPatternBase>
269 out <<
']' << std::endl;
271 k +=
block(ib, 0).n_rows();
298 out <<
']' << std::endl;
300 k +=
block(ib, 0).n_rows();
306 template <
class SparsityPatternBase>
309 std::ostream &out)
const 322 out << l + j <<
" " << -static_cast<signed int>(i + k)
327 k +=
block(ib, 0).n_rows();
343 const std::vector<std::vector<unsigned int>> &row_lengths)
354 if (row_lengths[j].size() == 1)
361 row_lengths[j].
end(),
435 const std::vector<size_type> &col_indices)
439 for (
size_type i = 0; i < row_indices.size(); ++i)
440 for (
size_type j = 0; j < col_indices.size(); ++j)
441 this->
block(i, j).
reinit(row_indices[i], col_indices[j]);
447 const std::vector<IndexSet> &partitioning)
451 for (
size_type i = 0; i < partitioning.size(); ++i)
452 for (
size_type j = 0; j < partitioning.size(); ++j)
454 partitioning[j].size(),
464 reinit(row_indices, col_indices);
470 const std::vector<size_type> &row_block_sizes,
471 const std::vector<size_type> &col_block_sizes)
474 row_block_sizes.size(), col_block_sizes.size());
475 for (
size_type i = 0; i < row_block_sizes.size(); ++i)
476 for (
size_type j = 0; j < col_block_sizes.size(); ++j)
477 this->
block(i, j).
reinit(row_block_sizes[i], col_block_sizes[j]);
485 partitioning.size());
486 for (
size_type i = 0; i < partitioning.size(); ++i)
487 for (
size_type j = 0; j < partitioning.size(); ++j)
489 partitioning[j].size(),
508 #ifdef DEAL_II_WITH_TRILINOS 520 const std::vector<size_type> &col_indices)
524 for (
size_type i = 0; i < row_indices.size(); ++i)
525 for (
size_type j = 0; j < col_indices.size(); ++j)
526 this->
block(i, j).
reinit(row_indices[i], col_indices[j]);
533 const std::vector<IndexSet> ¶llel_partitioning,
534 const MPI_Comm & communicator)
536 parallel_partitioning.size())
538 for (
size_type i = 0; i < parallel_partitioning.size(); ++i)
539 for (
size_type j = 0; j < parallel_partitioning.size(); ++j)
541 parallel_partitioning[j],
549 const std::vector<IndexSet> &row_parallel_partitioning,
550 const std::vector<IndexSet> &col_parallel_partitioning,
551 const std::vector<IndexSet> &writable_rows,
552 const MPI_Comm & communicator)
554 row_parallel_partitioning.size(),
555 col_parallel_partitioning.size())
557 for (
size_type i = 0; i < row_parallel_partitioning.size(); ++i)
558 for (
size_type j = 0; j < col_parallel_partitioning.size(); ++j)
559 this->
block(i, j).
reinit(row_parallel_partitioning[i],
560 col_parallel_partitioning[j],
570 const std::vector<size_type> &col_block_sizes)
573 row_block_sizes.size(), col_block_sizes.size());
574 for (
size_type i = 0; i < row_block_sizes.size(); ++i)
575 for (
size_type j = 0; j < col_block_sizes.size(); ++j)
576 this->
block(i, j).
reinit(row_block_sizes[i], col_block_sizes[j]);
584 const std::vector<IndexSet> ¶llel_partitioning,
585 const MPI_Comm & communicator)
588 parallel_partitioning.size(), parallel_partitioning.size());
589 for (
size_type i = 0; i < parallel_partitioning.size(); ++i)
590 for (
size_type j = 0; j < parallel_partitioning.size(); ++j)
592 parallel_partitioning[j],
601 const std::vector<IndexSet> &row_parallel_partitioning,
602 const std::vector<IndexSet> &col_parallel_partitioning,
603 const MPI_Comm & communicator)
606 row_parallel_partitioning.size(), col_parallel_partitioning.size());
607 for (
size_type i = 0; i < row_parallel_partitioning.size(); ++i)
608 for (
size_type j = 0; j < col_parallel_partitioning.size(); ++j)
609 this->
block(i, j).
reinit(row_parallel_partitioning[i],
610 col_parallel_partitioning[j],
619 const std::vector<IndexSet> &row_parallel_partitioning,
620 const std::vector<IndexSet> &col_parallel_partitioning,
621 const std::vector<IndexSet> &writable_rows,
622 const MPI_Comm & communicator)
624 AssertDimension(writable_rows.size(), row_parallel_partitioning.size());
626 row_parallel_partitioning.size(), col_parallel_partitioning.size());
627 for (
size_type i = 0; i < row_parallel_partitioning.size(); ++i)
628 for (
size_type j = 0; j < col_parallel_partitioning.size(); ++j)
629 this->
block(i, j).
reinit(row_parallel_partitioning[i],
630 col_parallel_partitioning[j],
642 #ifdef DEAL_II_WITH_TRILINOS
static ::ExceptionBase & ExcIncompatibleRowNumbers(int arg1, int arg2, int arg3, int arg4)
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)
void reinit(const std::vector< size_type > &row_block_sizes, const std::vector< size_type > &col_block_sizes)
BlockSparsityPatternBase()
size_type n_block_cols() const
size_type n_block_rows() const
size_type block_size(const unsigned int i) const
SparsityPatternType & block(const size_type row, const size_type column)
void reinit(const size_type n_block_rows, const size_type n_block_columns)
void reinit(const size_type n_block_rows, const size_type n_block_columns)
virtual void reinit(const size_type m, const size_type n, const ArrayView< const unsigned int > &row_lengths) override
static ::ExceptionBase & ExcMessage(std::string arg1)
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())
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
void reinit(const unsigned int n_blocks, const size_type n_elements_per_block)
const IndexSet & row_index_set() const
#define DEAL_II_NAMESPACE_CLOSE
VectorType::value_type * end(VectorType &V)
BlockSparsityPatternBase & operator=(const BlockSparsityPatternBase &)
BlockDynamicSparsityPattern()=default
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)
SymmetricTensor< 2, dim, Number > b(const Tensor< 2, dim, Number > &F)
~BlockSparsityPatternBase() override
bool exists(const size_type i, const size_type j) const
Table< 2, SmartPointer< SparsityPatternType, BlockSparsityPatternBase< SparsityPatternType > > > sub_objects
BlockSparsityPattern()=default
#define DEAL_II_NAMESPACE_OPEN
VectorType::value_type * begin(VectorType &V)
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
BlockSparsityPattern()=default
std::enable_if< std::is_fundamental< T >::value, std::size_t >::type memory_consumption(const T &t)
Tensor< 2, dim, Number > l(const Tensor< 2, dim, Number > &F, const Tensor< 2, dim, Number > &dF_dt)
static ::ExceptionBase & ExcInternalError()