16 #ifndef dealii_block_sparse_matrix_h 17 #define dealii_block_sparse_matrix_h 20 #include <deal.II/base/config.h> 22 #include <deal.II/base/table.h> 24 #include <deal.II/lac/block_matrix_base.h> 25 #include <deal.II/lac/block_sparsity_pattern.h> 26 #include <deal.II/lac/block_vector.h> 27 #include <deal.II/lac/exceptions.h> 28 #include <deal.II/lac/sparse_matrix.h> 32 DEAL_II_NAMESPACE_OPEN
51 template <
typename number>
69 using pointer =
typename BaseClass::pointer;
70 using const_pointer =
typename BaseClass::const_pointer;
71 using reference =
typename BaseClass::reference;
72 using const_reference =
typename BaseClass::const_reference;
73 using size_type =
typename BaseClass::size_type;
222 template <
typename block_number>
231 template <
typename block_number,
typename nonblock_number>
234 const Vector<nonblock_number> &src)
const;
240 template <
typename block_number,
typename nonblock_number>
242 vmult(Vector<nonblock_number> & dst,
249 template <
typename nonblock_number>
251 vmult(Vector<nonblock_number> &dst,
const Vector<nonblock_number> &src)
const;
258 template <
typename block_number>
267 template <
typename block_number,
typename nonblock_number>
270 const Vector<nonblock_number> &src)
const;
276 template <
typename block_number,
typename nonblock_number>
278 Tvmult(Vector<nonblock_number> & dst,
285 template <
typename nonblock_number>
287 Tvmult(Vector<nonblock_number> & dst,
288 const Vector<nonblock_number> &src)
const;
302 template <
class BlockVectorType>
305 const BlockVectorType &src,
306 const number omega = 1.)
const;
313 template <
typename number2>
316 const Vector<number2> &src,
317 const number omega = 1.)
const;
346 const unsigned int precision = 3,
347 const bool scientific =
true,
348 const unsigned int width = 0,
349 const char * zero_string =
" ",
350 const double denominator = 1.)
const;
380 template <
typename number>
388 this->
block(r, c) = d;
395 template <
typename number>
396 template <
typename block_number>
406 template <
typename number>
407 template <
typename block_number,
typename nonblock_number>
410 const Vector<nonblock_number> &src)
const 417 template <
typename number>
418 template <
typename block_number,
typename nonblock_number>
428 template <
typename number>
429 template <
typename nonblock_number>
432 const Vector<nonblock_number> &src)
const 439 template <
typename number>
440 template <
typename block_number>
450 template <
typename number>
451 template <
typename block_number,
typename nonblock_number>
454 const Vector<nonblock_number> &src)
const 461 template <
typename number>
462 template <
typename block_number,
typename nonblock_number>
472 template <
typename number>
473 template <
typename nonblock_number>
476 const Vector<nonblock_number> &src)
const 483 template <
typename number>
484 template <
class BlockVectorType>
487 const BlockVectorType &src,
488 const number omega)
const 504 template <
typename number>
505 template <
typename number2>
508 const Vector<number2> &src,
509 const number omega)
const 515 ExcMessage(
"This function only works if the matrix has " 518 ExcMessage(
"This function only works if the matrix has " 527 DEAL_II_NAMESPACE_CLOSE
529 #endif // dealii_block_sparse_matrix_h SmartPointer< const BlockSparsityPattern, BlockSparseMatrix< number > > sparsity_pattern
void precondition_Jacobi(Vector< somenumber > &dst, const Vector< somenumber > &src, const number omega=1.) const
void Tvmult_nonblock_nonblock(VectorType &dst, const VectorType &src) const
void vmult_block_block(BlockVectorType &dst, const BlockVectorType &src) const
void vmult_nonblock_nonblock(VectorType &dst, const VectorType &src) const
virtual ~BlockSparseMatrix() override
static::ExceptionBase & ExcScalarAssignmentOnlyForZeroValue()
std::size_t memory_consumption() const
void precondition_Jacobi(BlockVectorType &dst, const BlockVectorType &src, const number omega=1.) const
size_type n_actually_nonzero_elements(const double threshold=0.0) const
void Tvmult_block_nonblock(BlockVectorType &dst, const VectorType &src) const
unsigned int n_block_cols() const
BlockSparseMatrix & operator=(const BlockSparseMatrix &)
void vmult_block_nonblock(BlockVectorType &dst, const VectorType &src) const
size_type get_row_length(const size_type row) const
typename BlockType::value_type value_type
void Tvmult(BlockVector< block_number > &dst, const BlockVector< block_number > &src) const
static::ExceptionBase & ExcMessage(std::string arg1)
void vmult_nonblock_block(VectorType &dst, const BlockVectorType &src) const
typename BaseClass::BlockType BlockType
#define Assert(cond, exc)
static::ExceptionBase & ExcDimensionMismatch(std::size_t arg1, std::size_t arg2)
#define DeclException0(Exception0)
void vmult(BlockVector< block_number > &dst, const BlockVector< block_number > &src) const
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
size_type n_nonzero_elements() const
static::ExceptionBase & ExcNotQuadratic()
const BlockSparsityPattern & get_sparsity_pattern() const
void Tvmult_nonblock_block(VectorType &dst, const BlockVectorType &src) const
BlockSparseMatrix()=default
void Tvmult_block_block(BlockVectorType &dst, const BlockVectorType &src) const
BlockType & block(const unsigned int row, const unsigned int column)
typename BaseClass::value_type value_type
static::ExceptionBase & ExcBlockDimensionMismatch()
virtual void reinit(const BlockSparsityPattern &sparsity)
unsigned int n_block_rows() const