13#ifndef dealii_block_sparse_matrix_h
14#define dealii_block_sparse_matrix_h
46template <
typename number>
217 template <
typename block_number>
226 template <
typename block_number,
typename nonblock_number>
235 template <
typename block_number,
typename nonblock_number>
244 template <
typename nonblock_number>
253 template <
typename block_number>
262 template <
typename block_number,
typename nonblock_number>
271 template <
typename block_number,
typename nonblock_number>
280 template <
typename nonblock_number>
297 template <
typename BlockVectorType>
300 const BlockVectorType &src,
301 const number omega = 1.)
const;
308 template <
typename number2>
312 const number omega = 1.)
const;
343 const unsigned int precision = 3,
344 const bool scientific =
true,
345 const unsigned int width = 0,
346 const char *zero_string =
" ",
347 const double denominator = 1.,
348 const char *separator =
" ")
const;
378template <
typename number>
386 this->
block(r, c) = d;
393template <
typename number>
394template <
typename block_number>
404template <
typename number>
405template <
typename block_number,
typename nonblock_number>
415template <
typename number>
416template <
typename block_number,
typename nonblock_number>
426template <
typename number>
427template <
typename nonblock_number>
437template <
typename number>
438template <
typename block_number>
448template <
typename number>
449template <
typename block_number,
typename nonblock_number>
459template <
typename number>
460template <
typename block_number,
typename nonblock_number>
470template <
typename number>
471template <
typename nonblock_number>
481template <
typename number>
482template <
typename BlockVectorType>
485 const BlockVectorType &src,
486 const number omega)
const
489 Assert(dst.n_blocks() == this->n_block_rows(),
491 Assert(src.n_blocks() == this->n_block_cols(),
497 this->
block(i, i).precondition_Jacobi(dst.block(i), src.block(i), omega);
502template <
typename number>
503template <
typename number2>
507 const number omega)
const
513 ExcMessage(
"This function only works if the matrix has "
516 ExcMessage(
"This function only works if the matrix has "
521 this->
block(0, 0).precondition_Jacobi(dst, src, omega);
void Tvmult_nonblock_nonblock(VectorType &dst, const VectorType &src) const
void vmult_nonblock_nonblock(VectorType &dst, const VectorType &src) const
SparseMatrix< number > BlockType
void Tvmult_block_block(BlockVectorType &dst, const BlockVectorType &src) const
const value_type & const_reference
void Tvmult_nonblock_block(VectorType &dst, const BlockVectorType &src) const
unsigned int n_block_rows() const
void vmult_block_block(BlockVectorType &dst, const BlockVectorType &src) const
MatrixIterator< BlockMatrixIterators::Accessor< BlockMatrixBase, false > > iterator
types::global_dof_index size_type
typename BlockType::value_type value_type
void vmult_nonblock_block(VectorType &dst, const BlockVectorType &src) const
BlockMatrixBase()=default
unsigned int n_block_cols() const
const value_type * const_pointer
BlockType & block(const unsigned int row, const unsigned int column)
MatrixIterator< BlockMatrixIterators::Accessor< BlockMatrixBase, true > > const_iterator
void vmult_block_nonblock(BlockVectorType &dst, const VectorType &src) const
void Tvmult_block_nonblock(BlockVectorType &dst, const VectorType &src) const
BlockSparseMatrix(const BlockSparsityPattern &sparsity)
typename BaseClass::value_type value_type
typename BaseClass::iterator iterator
typename BaseClass::const_pointer const_pointer
BlockSparseMatrix()=default
virtual void reinit(const BlockSparsityPattern &sparsity)
size_type n_nonzero_elements() const
void precondition_Jacobi(Vector< number2 > &dst, const Vector< number2 > &src, const number omega=1.) const
std::size_t memory_consumption() const
void vmult(BlockVector< block_number > &dst, const Vector< nonblock_number > &src) const
void Tvmult(Vector< nonblock_number > &dst, const Vector< nonblock_number > &src) const
virtual ~BlockSparseMatrix() override
typename BaseClass::pointer pointer
BlockSparseMatrix & operator=(const BlockSparseMatrix &)
void print_formatted(std::ostream &out, const unsigned int precision=3, const bool scientific=true, const unsigned int width=0, const char *zero_string=" ", const double denominator=1., const char *separator=" ") const
typename BaseClass::const_reference const_reference
size_type n_actually_nonzero_elements(const double threshold=0.0) const
void Tvmult(Vector< nonblock_number > &dst, const BlockVector< block_number > &src) const
typename BaseClass::size_type size_type
void vmult(Vector< nonblock_number > &dst, const BlockVector< block_number > &src) const
BlockMatrixBase< SparseMatrix< number > > BaseClass
void vmult(Vector< nonblock_number > &dst, const Vector< nonblock_number > &src) const
ObserverPointer< const BlockSparsityPattern, BlockSparseMatrix< double > > sparsity_pattern
typename BaseClass::const_iterator const_iterator
void Tvmult(BlockVector< block_number > &dst, const BlockVector< block_number > &src) const
void Tvmult(BlockVector< block_number > &dst, const Vector< nonblock_number > &src) const
void vmult(BlockVector< block_number > &dst, const BlockVector< block_number > &src) const
typename BaseClass::BlockType BlockType
typename BaseClass::reference reference
size_type get_row_length(const size_type row) const
void precondition_Jacobi(BlockVectorType &dst, const BlockVectorType &src, const number omega=1.) const
BlockSparseMatrix & operator=(const double d)
const BlockSparsityPattern & get_sparsity_pattern() const
#define DEAL_II_NAMESPACE_OPEN
#define DEAL_II_NAMESPACE_CLOSE
#define DeclException0(Exception0)
static ::ExceptionBase & ExcScalarAssignmentOnlyForZeroValue()
#define Assert(cond, exc)
static ::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
static ::ExceptionBase & ExcBlockDimensionMismatch()
static ::ExceptionBase & ExcNotQuadratic()
static ::ExceptionBase & ExcMessage(std::string arg1)