Reference documentation for deal.II version 9.4.0
\(\newcommand{\dealvcentcolon}{\mathrel{\mathop{:}}}\) \(\newcommand{\dealcoloneq}{\dealvcentcolon\mathrel{\mkern-1.2mu}=}\) \(\newcommand{\jump}[1]{\left[\!\left[ #1 \right]\!\right]}\) \(\newcommand{\average}[1]{\left\{\!\left\{ #1 \right\}\!\right\}}\)
Modules | Namespaces | Classes | Typedefs | Functions | Variables | Friends
Collaboration diagram for Basic matrices:

Modules

 Exceptions and assertions
 

Namespaces

namespace  BlockMatrixIterators
 
namespace  ChunkSparseMatrixIterators
 
namespace  std
 STL namespace.
 
namespace  SparseMatrixIterators
 

Classes

class  BlockMatrixIterators::AccessorBase< BlockMatrixType >
 
class  BlockMatrixIterators::Accessor< BlockMatrixType, Constness >
 
class  BlockMatrixIterators::Accessor< BlockMatrixType, false >
 
class  BlockMatrixIterators::Accessor< BlockMatrixType, true >
 
class  BlockMatrixBase< MatrixType >
 
class  BlockSparseMatrix< number >
 
class  BlockSparseMatrixEZ< Number >
 
class  ChunkSparseMatrixIterators::Iterator< number, Constness >
 
class  ChunkSparseMatrixIterators::Accessor< number, Constness >
 
class  ChunkSparseMatrixIterators::Accessor< number, true >
 
class  ChunkSparseMatrixIterators::Accessor< number, false >
 
class  ChunkSparseMatrixIterators::Accessor< number, false >::Reference
 
struct  std::iterator_traits< ::ChunkSparseMatrixIterators::Iterator< number, Constness > >
 
class  ChunkSparseMatrix< number >
 
struct  ChunkSparseMatrix< number >::Traits
 
class  CUDAWrappers::SparseMatrix< Number >
 
class  FullMatrix< number >
 
class  IdentityMatrix
 
class  LAPACKFullMatrix< number >
 
class  PETScWrappers::MPI::BlockSparseMatrix
 
class  PETScWrappers::FullMatrix
 
class  PETScWrappers::MatrixBase
 
class  PETScWrappers::MatrixFree
 
class  PETScWrappers::SparseMatrix
 
class  PETScWrappers::MPI::SparseMatrix
 
class  ScaLAPACKMatrix< NumberType >
 
class  SparseMatrix< number >
 
class  SparseMatrixEZ< number >
 
class  TridiagonalMatrix< number >
 
class  TrilinosWrappers::BlockSparseMatrix
 
class  TrilinosWrappers::SparseMatrix
 

Typedefs

using BlockMatrixIterators::AccessorBase< BlockMatrixType >::size_type = types::global_dof_index
 
using BlockMatrixIterators::AccessorBase< BlockMatrixType >::value_type = typename BlockMatrixType::value_type
 
using BlockMatrixIterators::Accessor< BlockMatrixType, false >::size_type = types::global_dof_index
 
using BlockMatrixIterators::Accessor< BlockMatrixType, false >::MatrixType = BlockMatrixType
 
using BlockMatrixIterators::Accessor< BlockMatrixType, false >::value_type = typename BlockMatrixType::value_type
 
using BlockMatrixIterators::Accessor< BlockMatrixType, true >::size_type = types::global_dof_index
 
using BlockMatrixIterators::Accessor< BlockMatrixType, true >::MatrixType = const BlockMatrixType
 
using BlockMatrixIterators::Accessor< BlockMatrixType, true >::value_type = typename BlockMatrixType::value_type
 
using BlockMatrixBase< MatrixType >::BlockType = MatrixType
 
using BlockMatrixBase< MatrixType >::value_type = typename BlockType::value_type
 
using BlockMatrixBase< MatrixType >::real_type = typename numbers::NumberTraits< value_type >::real_type
 
using BlockMatrixBase< MatrixType >::pointer = value_type *
 
using BlockMatrixBase< MatrixType >::const_pointer = const value_type *
 
using BlockMatrixBase< MatrixType >::reference = value_type &
 
using BlockMatrixBase< MatrixType >::const_reference = const value_type &
 
using BlockMatrixBase< MatrixType >::size_type = types::global_dof_index
 
using BlockMatrixBase< MatrixType >::iterator = MatrixIterator< BlockMatrixIterators::Accessor< BlockMatrixBase, false > >
 
using BlockMatrixBase< MatrixType >::const_iterator = MatrixIterator< BlockMatrixIterators::Accessor< BlockMatrixBase, true > >
 
using BlockSparseMatrix< number >::BaseClass = BlockMatrixBase< SparseMatrix< number > >
 
using BlockSparseMatrix< number >::BlockType = typename BaseClass::BlockType
 
using BlockSparseMatrix< number >::value_type = typename BaseClass::value_type
 
using BlockSparseMatrix< number >::pointer = typename BaseClass::pointer
 
using BlockSparseMatrix< number >::const_pointer = typename BaseClass::const_pointer
 
using BlockSparseMatrix< number >::reference = typename BaseClass::reference
 
using BlockSparseMatrix< number >::const_reference = typename BaseClass::const_reference
 
using BlockSparseMatrix< number >::size_type = typename BaseClass::size_type
 
using BlockSparseMatrix< number >::iterator = typename BaseClass::iterator
 
using BlockSparseMatrix< number >::const_iterator = typename BaseClass::const_iterator
 
using BlockSparseMatrixEZ< Number >::size_type = types::global_dof_index
 
using ChunkSparseMatrixIterators::Accessor< number, true >::MatrixType = const ChunkSparseMatrix< number >
 
using ChunkSparseMatrixIterators::Accessor< number, false >::MatrixType = ChunkSparseMatrix< number >
 
using ChunkSparseMatrixIterators::Iterator< number, Constness >::MatrixType = typename Accessor< number, Constness >::MatrixType
 
using ChunkSparseMatrixIterators::Iterator< number, Constness >::value_type = const Accessor< number, Constness > &
 
using ChunkSparseMatrixIterators::Iterator< number, Constness >::difference_type = types::global_dof_index
 
using std::iterator_traits< ::ChunkSparseMatrixIterators::Iterator< number, Constness > >::iterator_category = forward_iterator_tag
 
using std::iterator_traits< ::ChunkSparseMatrixIterators::Iterator< number, Constness > >::value_type = typename ::ChunkSparseMatrixIterators::Iterator< number, Constness >::value_type
 
using std::iterator_traits< ::ChunkSparseMatrixIterators::Iterator< number, Constness > >::difference_type = typename ::ChunkSparseMatrixIterators::Iterator< number, Constness >::difference_type
 
using ChunkSparseMatrix< number >::size_type = types::global_dof_index
 
using ChunkSparseMatrix< number >::value_type = number
 
using ChunkSparseMatrix< number >::real_type = typename numbers::NumberTraits< number >::real_type
 
using ChunkSparseMatrix< number >::const_iterator = ChunkSparseMatrixIterators::Iterator< number, true >
 
using ChunkSparseMatrix< number >::iterator = ChunkSparseMatrixIterators::Iterator< number, false >
 

Functions

 BlockMatrixIterators::AccessorBase< BlockMatrixType >::AccessorBase ()
 
unsigned int BlockMatrixIterators::AccessorBase< BlockMatrixType >::block_row () const
 
unsigned int BlockMatrixIterators::AccessorBase< BlockMatrixType >::block_column () const
 
 BlockMatrixIterators::Accessor< BlockMatrixType, false >::Accessor (BlockMatrixType *m, const size_type row, const size_type col)
 
size_type BlockMatrixIterators::Accessor< BlockMatrixType, false >::row () const
 
size_type BlockMatrixIterators::Accessor< BlockMatrixType, false >::column () const
 
value_type BlockMatrixIterators::Accessor< BlockMatrixType, false >::value () const
 
void BlockMatrixIterators::Accessor< BlockMatrixType, false >::set_value (value_type newval) const
 
void BlockMatrixIterators::Accessor< BlockMatrixType, false >::advance ()
 
bool BlockMatrixIterators::Accessor< BlockMatrixType, false >::operator== (const Accessor &a) const
 
 BlockMatrixIterators::Accessor< BlockMatrixType, true >::Accessor (const BlockMatrixType *m, const size_type row, const size_type col)
 
 BlockMatrixIterators::Accessor< BlockMatrixType, true >::Accessor (const Accessor< BlockMatrixType, false > &)
 
size_type BlockMatrixIterators::Accessor< BlockMatrixType, true >::row () const
 
size_type BlockMatrixIterators::Accessor< BlockMatrixType, true >::column () const
 
value_type BlockMatrixIterators::Accessor< BlockMatrixType, true >::value () const
 
void BlockMatrixIterators::Accessor< BlockMatrixType, true >::advance ()
 
bool BlockMatrixIterators::Accessor< BlockMatrixType, true >::operator== (const Accessor &a) const
 
 BlockMatrixBase< MatrixType >::BlockMatrixBase ()=default
 
 BlockMatrixBase< MatrixType >::~BlockMatrixBase () override
 
template<class BlockMatrixType >
BlockMatrixBaseBlockMatrixBase< MatrixType >::copy_from (const BlockMatrixType &source)
 
BlockTypeBlockMatrixBase< MatrixType >::block (const unsigned int row, const unsigned int column)
 
const BlockTypeBlockMatrixBase< MatrixType >::block (const unsigned int row, const unsigned int column) const
 
size_type BlockMatrixBase< MatrixType >::m () const
 
size_type BlockMatrixBase< MatrixType >::n () const
 
unsigned int BlockMatrixBase< MatrixType >::n_block_rows () const
 
unsigned int BlockMatrixBase< MatrixType >::n_block_cols () const
 
void BlockMatrixBase< MatrixType >::set (const size_type i, const size_type j, const value_type value)
 
template<typename number >
void BlockMatrixBase< MatrixType >::set (const std::vector< size_type > &indices, const FullMatrix< number > &full_matrix, const bool elide_zero_values=false)
 
template<typename number >
void BlockMatrixBase< MatrixType >::set (const std::vector< size_type > &row_indices, const std::vector< size_type > &col_indices, const FullMatrix< number > &full_matrix, const bool elide_zero_values=false)
 
template<typename number >
void BlockMatrixBase< MatrixType >::set (const size_type row, const std::vector< size_type > &col_indices, const std::vector< number > &values, const bool elide_zero_values=false)
 
template<typename number >
void BlockMatrixBase< MatrixType >::set (const size_type row, const size_type n_cols, const size_type *col_indices, const number *values, const bool elide_zero_values=false)
 
void BlockMatrixBase< MatrixType >::add (const size_type i, const size_type j, const value_type value)
 
template<typename number >
void BlockMatrixBase< MatrixType >::add (const std::vector< size_type > &indices, const FullMatrix< number > &full_matrix, const bool elide_zero_values=true)
 
template<typename number >
void BlockMatrixBase< MatrixType >::add (const std::vector< size_type > &row_indices, const std::vector< size_type > &col_indices, const FullMatrix< number > &full_matrix, const bool elide_zero_values=true)
 
template<typename number >
void BlockMatrixBase< MatrixType >::add (const size_type row, const std::vector< size_type > &col_indices, const std::vector< number > &values, const bool elide_zero_values=true)
 
template<typename number >
void BlockMatrixBase< MatrixType >::add (const size_type row, const size_type n_cols, const size_type *col_indices, const number *values, const bool elide_zero_values=true, const bool col_indices_are_sorted=false)
 
void BlockMatrixBase< MatrixType >::add (const value_type factor, const BlockMatrixBase< MatrixType > &matrix)
 
value_type BlockMatrixBase< MatrixType >::operator() (const size_type i, const size_type j) const
 
value_type BlockMatrixBase< MatrixType >::el (const size_type i, const size_type j) const
 
value_type BlockMatrixBase< MatrixType >::diag_element (const size_type i) const
 
void BlockMatrixBase< MatrixType >::compress (::VectorOperation::values operation)
 
BlockMatrixBaseBlockMatrixBase< MatrixType >::operator*= (const value_type factor)
 
BlockMatrixBaseBlockMatrixBase< MatrixType >::operator/= (const value_type factor)
 
template<class BlockVectorType >
void BlockMatrixBase< MatrixType >::vmult_add (BlockVectorType &dst, const BlockVectorType &src) const
 
template<class BlockVectorType >
void BlockMatrixBase< MatrixType >::Tvmult_add (BlockVectorType &dst, const BlockVectorType &src) const
 
template<class BlockVectorType >
value_type BlockMatrixBase< MatrixType >::matrix_norm_square (const BlockVectorType &v) const
 
real_type BlockMatrixBase< MatrixType >::frobenius_norm () const
 
template<class BlockVectorType >
value_type BlockMatrixBase< MatrixType >::matrix_scalar_product (const BlockVectorType &u, const BlockVectorType &v) const
 
template<class BlockVectorType >
value_type BlockMatrixBase< MatrixType >::residual (BlockVectorType &dst, const BlockVectorType &x, const BlockVectorType &b) const
 
void BlockMatrixBase< MatrixType >::print (std::ostream &out, const bool alternative_output=false) const
 
iterator BlockMatrixBase< MatrixType >::begin ()
 
iterator BlockMatrixBase< MatrixType >::end ()
 
iterator BlockMatrixBase< MatrixType >::begin (const size_type r)
 
iterator BlockMatrixBase< MatrixType >::end (const size_type r)
 
const_iterator BlockMatrixBase< MatrixType >::begin () const
 
const_iterator BlockMatrixBase< MatrixType >::end () const
 
const_iterator BlockMatrixBase< MatrixType >::begin (const size_type r) const
 
const_iterator BlockMatrixBase< MatrixType >::end (const size_type r) const
 
const BlockIndicesBlockMatrixBase< MatrixType >::get_row_indices () const
 
const BlockIndicesBlockMatrixBase< MatrixType >::get_column_indices () const
 
std::size_t BlockMatrixBase< MatrixType >::memory_consumption () const
 
 BlockSparseMatrixEZ< Number >::BlockSparseMatrixEZ ()=default
 
 BlockSparseMatrixEZ< Number >::BlockSparseMatrixEZ (const unsigned int block_rows, const unsigned int block_cols)
 
 BlockSparseMatrixEZ< Number >::BlockSparseMatrixEZ (const BlockSparseMatrixEZ< Number > &)
 
BlockSparseMatrixEZBlockSparseMatrixEZ< Number >::operator= (const BlockSparseMatrixEZ< Number > &)
 
BlockSparseMatrixEZBlockSparseMatrixEZ< Number >::operator= (const double d)
 
void BlockSparseMatrixEZ< Number >::clear ()
 
void BlockSparseMatrixEZ< Number >::reinit (const unsigned int n_block_rows, const unsigned int n_block_cols)
 
void BlockSparseMatrixEZ< Number >::collect_sizes ()
 
SparseMatrixEZ< Number > & BlockSparseMatrixEZ< Number >::block (const unsigned int row, const unsigned int column)
 
const SparseMatrixEZ< Number > & BlockSparseMatrixEZ< Number >::block (const unsigned int row, const unsigned int column) const
 
unsigned int BlockSparseMatrixEZ< Number >::n_block_rows () const
 
unsigned int BlockSparseMatrixEZ< Number >::n_block_cols () const
 
bool BlockSparseMatrixEZ< Number >::empty () const
 
size_type BlockSparseMatrixEZ< Number >::m () const
 
size_type BlockSparseMatrixEZ< Number >::n () const
 
void BlockSparseMatrixEZ< Number >::set (const size_type i, const size_type j, const Number value)
 
void BlockSparseMatrixEZ< Number >::add (const size_type i, const size_type j, const Number value)
 
template<typename somenumber >
void BlockSparseMatrixEZ< Number >::vmult (BlockVector< somenumber > &dst, const BlockVector< somenumber > &src) const
 
template<typename somenumber >
void BlockSparseMatrixEZ< Number >::Tvmult (BlockVector< somenumber > &dst, const BlockVector< somenumber > &src) const
 
template<typename somenumber >
void BlockSparseMatrixEZ< Number >::vmult_add (BlockVector< somenumber > &dst, const BlockVector< somenumber > &src) const
 
template<typename somenumber >
void BlockSparseMatrixEZ< Number >::Tvmult_add (BlockVector< somenumber > &dst, const BlockVector< somenumber > &src) const
 
template<class StreamType >
void BlockSparseMatrixEZ< Number >::print_statistics (StreamType &s, bool full=false)
 
number ChunkSparseMatrixIterators::Accessor< number, Constness >::value () const
 
number & ChunkSparseMatrixIterators::Accessor< number, Constness >::value ()
 
const ChunkSparseMatrix< number > & ChunkSparseMatrixIterators::Accessor< number, Constness >::get_matrix () const
 
 ChunkSparseMatrixIterators::Accessor< number, true >::Accessor (MatrixType *matrix, const unsigned int row)
 
 ChunkSparseMatrixIterators::Accessor< number, true >::Accessor (MatrixType *matrix)
 
 ChunkSparseMatrixIterators::Accessor< number, true >::Accessor (const ChunkSparseMatrixIterators::Accessor< number, false > &a)
 
number ChunkSparseMatrixIterators::Accessor< number, true >::value () const
 
const MatrixTypeChunkSparseMatrixIterators::Accessor< number, true >::get_matrix () const
 
 ChunkSparseMatrixIterators::Accessor< number, false >::Reference::Reference (const Accessor *accessor, const bool dummy)
 
 ChunkSparseMatrixIterators::Accessor< number, false >::Reference::operator number () const
 
const ReferenceChunkSparseMatrixIterators::Accessor< number, false >::Reference::operator= (const number n) const
 
const ReferenceChunkSparseMatrixIterators::Accessor< number, false >::Reference::operator+= (const number n) const
 
const ReferenceChunkSparseMatrixIterators::Accessor< number, false >::Reference::operator-= (const number n) const
 
const ReferenceChunkSparseMatrixIterators::Accessor< number, false >::Reference::operator*= (const number n) const
 
const ReferenceChunkSparseMatrixIterators::Accessor< number, false >::Reference::operator/= (const number n) const
 
 ChunkSparseMatrixIterators::Accessor< number, false >::Accessor (MatrixType *matrix, const unsigned int row)
 
 ChunkSparseMatrixIterators::Accessor< number, false >::Accessor (MatrixType *matrix)
 
Reference ChunkSparseMatrixIterators::Accessor< number, false >::value () const
 
MatrixTypeChunkSparseMatrixIterators::Accessor< number, false >::get_matrix () const
 
 ChunkSparseMatrixIterators::Iterator< number, Constness >::Iterator (MatrixType *matrix, const unsigned int row)
 
 ChunkSparseMatrixIterators::Iterator< number, Constness >::Iterator (MatrixType *matrix)
 
 ChunkSparseMatrixIterators::Iterator< number, Constness >::Iterator (const ChunkSparseMatrixIterators::Iterator< number, false > &i)
 
IteratorChunkSparseMatrixIterators::Iterator< number, Constness >::operator++ ()
 
Iterator ChunkSparseMatrixIterators::Iterator< number, Constness >::operator++ (int)
 
const Accessor< number, Constness > & ChunkSparseMatrixIterators::Iterator< number, Constness >::operator* () const
 
const Accessor< number, Constness > * ChunkSparseMatrixIterators::Iterator< number, Constness >::operator-> () const
 
bool ChunkSparseMatrixIterators::Iterator< number, Constness >::operator== (const Iterator &) const
 
bool ChunkSparseMatrixIterators::Iterator< number, Constness >::operator!= (const Iterator &) const
 
bool ChunkSparseMatrixIterators::Iterator< number, Constness >::operator< (const Iterator &) const
 
bool ChunkSparseMatrixIterators::Iterator< number, Constness >::operator> (const Iterator &) const
 
int ChunkSparseMatrixIterators::Iterator< number, Constness >::operator- (const Iterator &p) const
 
Iterator ChunkSparseMatrixIterators::Iterator< number, Constness >::operator+ (const unsigned int n) const
 

Variables

unsigned int BlockMatrixIterators::AccessorBase< BlockMatrixType >::row_block
 
unsigned int BlockMatrixIterators::AccessorBase< BlockMatrixType >::col_block
 
BlockMatrixType * BlockMatrixIterators::Accessor< BlockMatrixType, false >::matrix
 
BlockMatrixType::BlockType::iterator BlockMatrixIterators::Accessor< BlockMatrixType, false >::base_iterator
 
const BlockMatrixType * BlockMatrixIterators::Accessor< BlockMatrixType, true >::matrix
 
BlockMatrixType::BlockType::const_iterator BlockMatrixIterators::Accessor< BlockMatrixType, true >::base_iterator
 
BlockIndices BlockSparseMatrixEZ< Number >::row_indices
 
BlockIndices BlockSparseMatrixEZ< Number >::column_indices
 
Table< 2, SparseMatrixEZ< Number > > BlockSparseMatrixEZ< Number >::blocks
 
MatrixTypeChunkSparseMatrixIterators::Accessor< number, true >::matrix
 
const AccessorChunkSparseMatrixIterators::Accessor< number, false >::Reference::accessor
 
MatrixTypeChunkSparseMatrixIterators::Accessor< number, false >::matrix
 
Accessor< number, Constness > ChunkSparseMatrixIterators::Iterator< number, Constness >::accessor
 

Friends

template<typename >
class BlockMatrixIterators::AccessorBase< BlockMatrixType >::MatrixIterator
 
template<typename >
class BlockMatrixIterators::Accessor< BlockMatrixType, false >::MatrixIterator
 
class BlockMatrixIterators::Accessor< BlockMatrixType, false >::Accessor< BlockMatrixType, true >
 
template<typename >
class BlockMatrixIterators::Accessor< BlockMatrixType, true >::::MatrixIterator
 
template<typename , bool >
class ChunkSparseMatrixIterators::Accessor< number, true >::Iterator
 
template<typename , bool >
class ChunkSparseMatrixIterators::Accessor< number, false >::Iterator
 

Constructors and initialization

 BlockSparseMatrix< number >::BlockSparseMatrix ()=default
 
 BlockSparseMatrix< number >::BlockSparseMatrix (const BlockSparsityPattern &sparsity)
 
virtual BlockSparseMatrix< number >::~BlockSparseMatrix () override
 
BlockSparseMatrixBlockSparseMatrix< number >::operator= (const BlockSparseMatrix &)
 
BlockSparseMatrixBlockSparseMatrix< number >::operator= (const double d)
 
void BlockSparseMatrix< number >::clear ()
 
virtual void BlockSparseMatrix< number >::reinit (const BlockSparsityPattern &sparsity)
 

Information on the matrix

bool BlockSparseMatrix< number >::empty () const
 
size_type BlockSparseMatrix< number >::get_row_length (const size_type row) const
 
size_type BlockSparseMatrix< number >::n_nonzero_elements () const
 
size_type BlockSparseMatrix< number >::n_actually_nonzero_elements (const double threshold=0.0) const
 
const BlockSparsityPatternBlockSparseMatrix< number >::get_sparsity_pattern () const
 
std::size_t BlockSparseMatrix< number >::memory_consumption () const
 

Multiplications

template<typename block_number >
void BlockSparseMatrix< number >::vmult (BlockVector< block_number > &dst, const BlockVector< block_number > &src) const
 
template<typename block_number , typename nonblock_number >
void BlockSparseMatrix< number >::vmult (BlockVector< block_number > &dst, const Vector< nonblock_number > &src) const
 
template<typename block_number , typename nonblock_number >
void BlockSparseMatrix< number >::vmult (Vector< nonblock_number > &dst, const BlockVector< block_number > &src) const
 
template<typename nonblock_number >
void BlockSparseMatrix< number >::vmult (Vector< nonblock_number > &dst, const Vector< nonblock_number > &src) const
 
template<typename block_number >
void BlockSparseMatrix< number >::Tvmult (BlockVector< block_number > &dst, const BlockVector< block_number > &src) const
 
template<typename block_number , typename nonblock_number >
void BlockSparseMatrix< number >::Tvmult (BlockVector< block_number > &dst, const Vector< nonblock_number > &src) const
 
template<typename block_number , typename nonblock_number >
void BlockSparseMatrix< number >::Tvmult (Vector< nonblock_number > &dst, const BlockVector< block_number > &src) const
 
template<typename nonblock_number >
void BlockSparseMatrix< number >::Tvmult (Vector< nonblock_number > &dst, const Vector< nonblock_number > &src) const
 

Preconditioning methods

template<class BlockVectorType >
void BlockSparseMatrix< number >::precondition_Jacobi (BlockVectorType &dst, const BlockVectorType &src, const number omega=1.) const
 
template<typename number2 >
void BlockSparseMatrix< number >::precondition_Jacobi (Vector< number2 > &dst, const Vector< number2 > &src, const number omega=1.) const
 

Input/Output

void BlockSparseMatrix< number >::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
 

Constructors and initialization.

 ChunkSparseMatrix< number >::ChunkSparseMatrix ()
 
 ChunkSparseMatrix< number >::ChunkSparseMatrix (const ChunkSparseMatrix &)
 
 ChunkSparseMatrix< number >::ChunkSparseMatrix (const ChunkSparsityPattern &sparsity)
 
 ChunkSparseMatrix< number >::ChunkSparseMatrix (const ChunkSparsityPattern &sparsity, const IdentityMatrix &id)
 
virtual ChunkSparseMatrix< number >::~ChunkSparseMatrix () override
 
ChunkSparseMatrix< number > & ChunkSparseMatrix< number >::operator= (const ChunkSparseMatrix< number > &)
 
ChunkSparseMatrix< number > & ChunkSparseMatrix< number >::operator= (const IdentityMatrix &id)
 
ChunkSparseMatrixChunkSparseMatrix< number >::operator= (const double d)
 
virtual void ChunkSparseMatrix< number >::reinit (const ChunkSparsityPattern &sparsity)
 
virtual void ChunkSparseMatrix< number >::clear ()
 

Information on the matrix

bool ChunkSparseMatrix< number >::empty () const
 
size_type ChunkSparseMatrix< number >::m () const
 
size_type ChunkSparseMatrix< number >::n () const
 
size_type ChunkSparseMatrix< number >::n_nonzero_elements () const
 
size_type ChunkSparseMatrix< number >::n_actually_nonzero_elements () const
 
const ChunkSparsityPatternChunkSparseMatrix< number >::get_sparsity_pattern () const
 
std::size_t ChunkSparseMatrix< number >::memory_consumption () const
 

Modifying entries

void ChunkSparseMatrix< number >::set (const size_type i, const size_type j, const number value)
 
void ChunkSparseMatrix< number >::add (const size_type i, const size_type j, const number value)
 
template<typename number2 >
void ChunkSparseMatrix< number >::add (const size_type row, const size_type n_cols, const size_type *col_indices, const number2 *values, const bool elide_zero_values=true, const bool col_indices_are_sorted=false)
 
ChunkSparseMatrixChunkSparseMatrix< number >::operator*= (const number factor)
 
ChunkSparseMatrixChunkSparseMatrix< number >::operator/= (const number factor)
 
void ChunkSparseMatrix< number >::symmetrize ()
 
template<typename somenumber >
ChunkSparseMatrix< number > & ChunkSparseMatrix< number >::copy_from (const ChunkSparseMatrix< somenumber > &source)
 
template<typename ForwardIterator >
void ChunkSparseMatrix< number >::copy_from (const ForwardIterator begin, const ForwardIterator end)
 
template<typename somenumber >
void ChunkSparseMatrix< number >::copy_from (const FullMatrix< somenumber > &matrix)
 
template<typename somenumber >
void ChunkSparseMatrix< number >::add (const number factor, const ChunkSparseMatrix< somenumber > &matrix)
 

Entry Access

number ChunkSparseMatrix< number >::operator() (const size_type i, const size_type j) const
 
number ChunkSparseMatrix< number >::el (const size_type i, const size_type j) const
 
number ChunkSparseMatrix< number >::diag_element (const size_type i) const
 
void ChunkSparseMatrix< number >::extract_row_copy (const size_type row, const size_type array_length, size_type &row_length, size_type *column_indices, number *values) const
 

Matrix vector multiplications

template<class OutVector , class InVector >
void ChunkSparseMatrix< number >::vmult (OutVector &dst, const InVector &src) const
 
template<class OutVector , class InVector >
void ChunkSparseMatrix< number >::Tvmult (OutVector &dst, const InVector &src) const
 
template<class OutVector , class InVector >
void ChunkSparseMatrix< number >::vmult_add (OutVector &dst, const InVector &src) const
 
template<class OutVector , class InVector >
void ChunkSparseMatrix< number >::Tvmult_add (OutVector &dst, const InVector &src) const
 
template<typename somenumber >
somenumber ChunkSparseMatrix< number >::matrix_norm_square (const Vector< somenumber > &v) const
 
template<typename somenumber >
somenumber ChunkSparseMatrix< number >::matrix_scalar_product (const Vector< somenumber > &u, const Vector< somenumber > &v) const
 
template<typename somenumber >
somenumber ChunkSparseMatrix< number >::residual (Vector< somenumber > &dst, const Vector< somenumber > &x, const Vector< somenumber > &b) const
 

Matrix norms

real_type ChunkSparseMatrix< number >::l1_norm () const
 
real_type ChunkSparseMatrix< number >::linfty_norm () const
 
real_type ChunkSparseMatrix< number >::frobenius_norm () const
 

Preconditioning methods

template<typename somenumber >
void ChunkSparseMatrix< number >::precondition_Jacobi (Vector< somenumber > &dst, const Vector< somenumber > &src, const number omega=1.) const
 
template<typename somenumber >
void ChunkSparseMatrix< number >::precondition_SSOR (Vector< somenumber > &dst, const Vector< somenumber > &src, const number om=1.) const
 
template<typename somenumber >
void ChunkSparseMatrix< number >::precondition_SOR (Vector< somenumber > &dst, const Vector< somenumber > &src, const number om=1.) const
 
template<typename somenumber >
void ChunkSparseMatrix< number >::precondition_TSOR (Vector< somenumber > &dst, const Vector< somenumber > &src, const number om=1.) const
 
template<typename somenumber >
void ChunkSparseMatrix< number >::SSOR (Vector< somenumber > &v, const number omega=1.) const
 
template<typename somenumber >
void ChunkSparseMatrix< number >::SOR (Vector< somenumber > &v, const number om=1.) const
 
template<typename somenumber >
void ChunkSparseMatrix< number >::TSOR (Vector< somenumber > &v, const number om=1.) const
 
template<typename somenumber >
void ChunkSparseMatrix< number >::PSOR (Vector< somenumber > &v, const std::vector< size_type > &permutation, const std::vector< size_type > &inverse_permutation, const number om=1.) const
 
template<typename somenumber >
void ChunkSparseMatrix< number >::TPSOR (Vector< somenumber > &v, const std::vector< size_type > &permutation, const std::vector< size_type > &inverse_permutation, const number om=1.) const
 
template<typename somenumber >
void ChunkSparseMatrix< number >::SOR_step (Vector< somenumber > &v, const Vector< somenumber > &b, const number om=1.) const
 
template<typename somenumber >
void ChunkSparseMatrix< number >::TSOR_step (Vector< somenumber > &v, const Vector< somenumber > &b, const number om=1.) const
 
template<typename somenumber >
void ChunkSparseMatrix< number >::SSOR_step (Vector< somenumber > &v, const Vector< somenumber > &b, const number om=1.) const
 

Iterators

const_iterator ChunkSparseMatrix< number >::begin () const
 
const_iterator ChunkSparseMatrix< number >::end () const
 
iterator ChunkSparseMatrix< number >::begin ()
 
iterator ChunkSparseMatrix< number >::end ()
 
const_iterator ChunkSparseMatrix< number >::begin (const unsigned int r) const
 
const_iterator ChunkSparseMatrix< number >::end (const unsigned int r) const
 
iterator ChunkSparseMatrix< number >::begin (const unsigned int r)
 
iterator ChunkSparseMatrix< number >::end (const unsigned int r)
 

Input/Output

void ChunkSparseMatrix< number >::print (std::ostream &out) const
 
void ChunkSparseMatrix< number >::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
 
void ChunkSparseMatrix< number >::print_pattern (std::ostream &out, const double threshold=0.) const
 
void ChunkSparseMatrix< number >::block_write (std::ostream &out) const
 
void ChunkSparseMatrix< number >::block_read (std::istream &in)
 

Detailed Description

These are the actual matrix classes provided by deal.II. It is possible to store values in them and retrieve them. Furthermore, they provide the full interface required by linear solvers (see Solvers).

Among the matrices in this group are full matrices, different sparse matrices, and block matrices. In addition, some of the classes in the interfaces to other linear algebra libraries (for example the PETScWrappers) are matrices.

Most of the deal.II sparse matrix classes are separated from their sparsity patterns, to make storing several matrices with the same sparsity pattern more efficient. See Sparsity for more information.

Typedef Documentation

◆ size_type [1/7]

template<class BlockMatrixType >
using BlockMatrixIterators::AccessorBase< BlockMatrixType >::size_type = types::global_dof_index

Declare type for container size.

Definition at line 67 of file block_matrix_base.h.

◆ value_type [1/8]

template<class BlockMatrixType >
using BlockMatrixIterators::AccessorBase< BlockMatrixType >::value_type = typename BlockMatrixType::value_type

Typedef the value type of the matrix we point into.

Definition at line 72 of file block_matrix_base.h.

◆ size_type [2/7]

template<class BlockMatrixType >
using BlockMatrixIterators::Accessor< BlockMatrixType, false >::size_type = types::global_dof_index

Declare type for container size.

Definition at line 126 of file block_matrix_base.h.

◆ MatrixType [1/5]

template<class BlockMatrixType >
using BlockMatrixIterators::Accessor< BlockMatrixType, false >::MatrixType = BlockMatrixType

Type of the matrix used in this accessor.

Definition at line 131 of file block_matrix_base.h.

◆ value_type [2/8]

template<class BlockMatrixType >
using BlockMatrixIterators::Accessor< BlockMatrixType, false >::value_type = typename BlockMatrixType::value_type

Typedef the value type of the matrix we point into.

Definition at line 136 of file block_matrix_base.h.

◆ size_type [3/7]

template<class BlockMatrixType >
using BlockMatrixIterators::Accessor< BlockMatrixType, true >::size_type = types::global_dof_index

Declare type for container size.

Definition at line 211 of file block_matrix_base.h.

◆ MatrixType [2/5]

template<class BlockMatrixType >
using BlockMatrixIterators::Accessor< BlockMatrixType, true >::MatrixType = const BlockMatrixType

Type of the matrix used in this accessor.

Definition at line 216 of file block_matrix_base.h.

◆ value_type [3/8]

template<class BlockMatrixType >
using BlockMatrixIterators::Accessor< BlockMatrixType, true >::value_type = typename BlockMatrixType::value_type

Typedef the value type of the matrix we point into.

Definition at line 221 of file block_matrix_base.h.

◆ BlockType [1/2]

template<typename MatrixType >
using BlockMatrixBase< MatrixType >::BlockType = MatrixType

Typedef the type of the underlying matrix.

Definition at line 355 of file block_matrix_base.h.

◆ value_type [4/8]

template<typename MatrixType >
using BlockMatrixBase< MatrixType >::value_type = typename BlockType::value_type

Type of matrix entries. These are analogous to alias in the standard library containers.

Definition at line 361 of file block_matrix_base.h.

◆ real_type [1/2]

template<typename MatrixType >
using BlockMatrixBase< MatrixType >::real_type = typename numbers::NumberTraits<value_type>::real_type

Definition at line 362 of file block_matrix_base.h.

◆ pointer [1/2]

template<typename MatrixType >
using BlockMatrixBase< MatrixType >::pointer = value_type *

Definition at line 363 of file block_matrix_base.h.

◆ const_pointer [1/2]

template<typename MatrixType >
using BlockMatrixBase< MatrixType >::const_pointer = const value_type *

Definition at line 364 of file block_matrix_base.h.

◆ reference [1/2]

template<typename MatrixType >
using BlockMatrixBase< MatrixType >::reference = value_type &

Definition at line 365 of file block_matrix_base.h.

◆ const_reference [1/2]

template<typename MatrixType >
using BlockMatrixBase< MatrixType >::const_reference = const value_type &

Definition at line 366 of file block_matrix_base.h.

◆ size_type [4/7]

template<typename MatrixType >
using BlockMatrixBase< MatrixType >::size_type = types::global_dof_index

Definition at line 367 of file block_matrix_base.h.

◆ iterator [1/3]

template<typename MatrixType >
using BlockMatrixBase< MatrixType >::iterator = MatrixIterator<BlockMatrixIterators::Accessor<BlockMatrixBase, false> >

Definition at line 369 of file block_matrix_base.h.

◆ const_iterator [1/3]

template<typename MatrixType >
using BlockMatrixBase< MatrixType >::const_iterator = MatrixIterator<BlockMatrixIterators::Accessor<BlockMatrixBase, true> >

Definition at line 372 of file block_matrix_base.h.

◆ BaseClass

template<typename number >
using BlockSparseMatrix< number >::BaseClass = BlockMatrixBase<SparseMatrix<number> >

Typedef the base class for simpler access to its own alias.

Definition at line 55 of file block_sparse_matrix.h.

◆ BlockType [2/2]

template<typename number >
using BlockSparseMatrix< number >::BlockType = typename BaseClass::BlockType

Typedef the type of the underlying matrix.

Definition at line 60 of file block_sparse_matrix.h.

◆ value_type [5/8]

template<typename number >
using BlockSparseMatrix< number >::value_type = typename BaseClass::value_type

Import the alias from the base class.

Definition at line 65 of file block_sparse_matrix.h.

◆ pointer [2/2]

template<typename number >
using BlockSparseMatrix< number >::pointer = typename BaseClass::pointer

Definition at line 66 of file block_sparse_matrix.h.

◆ const_pointer [2/2]

template<typename number >
using BlockSparseMatrix< number >::const_pointer = typename BaseClass::const_pointer

Definition at line 67 of file block_sparse_matrix.h.

◆ reference [2/2]

template<typename number >
using BlockSparseMatrix< number >::reference = typename BaseClass::reference

Definition at line 68 of file block_sparse_matrix.h.

◆ const_reference [2/2]

template<typename number >
using BlockSparseMatrix< number >::const_reference = typename BaseClass::const_reference

Definition at line 69 of file block_sparse_matrix.h.

◆ size_type [5/7]

template<typename number >
using BlockSparseMatrix< number >::size_type = typename BaseClass::size_type

Definition at line 70 of file block_sparse_matrix.h.

◆ iterator [2/3]

template<typename number >
using BlockSparseMatrix< number >::iterator = typename BaseClass::iterator

Definition at line 71 of file block_sparse_matrix.h.

◆ const_iterator [2/3]

template<typename number >
using BlockSparseMatrix< number >::const_iterator = typename BaseClass::const_iterator

Definition at line 72 of file block_sparse_matrix.h.

◆ size_type [6/7]

template<typename Number >
using BlockSparseMatrixEZ< Number >::size_type = types::global_dof_index

Declare type for container size.

Definition at line 66 of file block_sparse_matrix_ez.h.

◆ MatrixType [3/5]

template<typename number >
using ChunkSparseMatrixIterators::Accessor< number, true >::MatrixType = const ChunkSparseMatrix<number>

Typedef for the type (including constness) of the matrix to be used here.

Definition at line 107 of file chunk_sparse_matrix.h.

◆ MatrixType [4/5]

template<typename number >
using ChunkSparseMatrixIterators::Accessor< number, false >::MatrixType = ChunkSparseMatrix<number>

Typedef for the type (including constness) of the matrix to be used here.

Definition at line 243 of file chunk_sparse_matrix.h.

◆ MatrixType [5/5]

template<typename number , bool Constness>
using ChunkSparseMatrixIterators::Iterator< number, Constness >::MatrixType = typename Accessor<number, Constness>::MatrixType

Typedef for the matrix type (including constness) we are to operate on.

Definition at line 303 of file chunk_sparse_matrix.h.

◆ value_type [6/8]

template<typename number , bool Constness>
using ChunkSparseMatrixIterators::Iterator< number, Constness >::value_type = const Accessor<number, Constness> &

An alias for the type you get when you dereference an iterator of the current kind.

Definition at line 309 of file chunk_sparse_matrix.h.

◆ difference_type [1/2]

template<typename number , bool Constness>
using ChunkSparseMatrixIterators::Iterator< number, Constness >::difference_type = types::global_dof_index

A type that denotes what data types is used to express the difference between two iterators.

Definition at line 315 of file chunk_sparse_matrix.h.

◆ iterator_category

template<typename number , bool Constness>
using std::iterator_traits< ::ChunkSparseMatrixIterators::Iterator< number, Constness > >::iterator_category = forward_iterator_tag

Definition at line 419 of file chunk_sparse_matrix.h.

◆ value_type [7/8]

template<typename number , bool Constness>
using std::iterator_traits< ::ChunkSparseMatrixIterators::Iterator< number, Constness > >::value_type = typename ::ChunkSparseMatrixIterators:: Iterator<number, Constness>::value_type

Definition at line 420 of file chunk_sparse_matrix.h.

◆ difference_type [2/2]

template<typename number , bool Constness>
using std::iterator_traits< ::ChunkSparseMatrixIterators::Iterator< number, Constness > >::difference_type = typename ::ChunkSparseMatrixIterators:: Iterator<number, Constness>::difference_type

Definition at line 422 of file chunk_sparse_matrix.h.

◆ size_type [7/7]

template<typename number >
using ChunkSparseMatrix< number >::size_type = types::global_dof_index

Declare the type for container size.

Definition at line 454 of file chunk_sparse_matrix.h.

◆ value_type [8/8]

template<typename number >
using ChunkSparseMatrix< number >::value_type = number

Type of matrix entries. This alias is analogous to value_type in the standard library containers.

Definition at line 460 of file chunk_sparse_matrix.h.

◆ real_type [2/2]

template<typename number >
using ChunkSparseMatrix< number >::real_type = typename numbers::NumberTraits<number>::real_type

Declare a type that has holds real-valued numbers with the same precision as the template argument to this class. If the template argument of this class is a real data type, then real_type equals the template argument. If the template argument is a std::complex type then real_type equals the type underlying the complex numbers.

This alias is used to represent the return type of norms.

Definition at line 471 of file chunk_sparse_matrix.h.

◆ const_iterator [3/3]

template<typename number >
using ChunkSparseMatrix< number >::const_iterator = ChunkSparseMatrixIterators::Iterator<number, true>

Typedef of an iterator class walking over all the nonzero entries of this matrix. This iterator cannot change the values of the matrix.

Definition at line 477 of file chunk_sparse_matrix.h.

◆ iterator [3/3]

template<typename number >
using ChunkSparseMatrix< number >::iterator = ChunkSparseMatrixIterators::Iterator<number, false>

Typedef of an iterator class walking over all the nonzero entries of this matrix. This iterator can change the values of the matrix, but of course can't change the sparsity pattern as this is fixed once a sparse matrix is attached to it.

Definition at line 485 of file chunk_sparse_matrix.h.

Function Documentation

◆ AccessorBase()

template<class BlockMatrixType >
BlockMatrixIterators::AccessorBase< BlockMatrixType >::AccessorBase ( )

Initialize data fields to default values.

◆ block_row()

template<class BlockMatrixType >
unsigned int BlockMatrixIterators::AccessorBase< BlockMatrixType >::block_row ( ) const

Block row of the element represented by this object.

◆ block_column()

template<class BlockMatrixType >
unsigned int BlockMatrixIterators::AccessorBase< BlockMatrixType >::block_column ( ) const

Block column of the element represented by this object.

◆ Accessor() [1/8]

template<class BlockMatrixType >
BlockMatrixIterators::Accessor< BlockMatrixType, false >::Accessor ( BlockMatrixType *  m,
const size_type  row,
const size_type  col 
)

Constructor. Since we use accessors only for read access, a const matrix pointer is sufficient.

Place the iterator at the beginning of the given row of the matrix, or create the end pointer if row equals the total number of rows in the matrix.

◆ row() [1/2]

template<class BlockMatrixType >
size_type BlockMatrixIterators::Accessor< BlockMatrixType, false >::row ( ) const

Row number of the element represented by this object.

◆ column() [1/2]

template<class BlockMatrixType >
size_type BlockMatrixIterators::Accessor< BlockMatrixType, false >::column ( ) const

Column number of the element represented by this object.

◆ value() [1/6]

template<class BlockMatrixType >
value_type BlockMatrixIterators::Accessor< BlockMatrixType, false >::value ( ) const

Value of the entry at the current position.

◆ set_value()

template<class BlockMatrixType >
void BlockMatrixIterators::Accessor< BlockMatrixType, false >::set_value ( value_type  newval) const

Set new value.

◆ advance() [1/2]

template<class BlockMatrixType >
void BlockMatrixIterators::Accessor< BlockMatrixType, false >::advance ( )
protected

Move ahead one element.

◆ operator==() [1/3]

template<class BlockMatrixType >
bool BlockMatrixIterators::Accessor< BlockMatrixType, false >::operator== ( const Accessor< BlockMatrixType, false > &  a) const
protected

Compare this accessor with another one for equality.

◆ Accessor() [2/8]

template<class BlockMatrixType >
BlockMatrixIterators::Accessor< BlockMatrixType, true >::Accessor ( const BlockMatrixType *  m,
const size_type  row,
const size_type  col 
)

Constructor. Since we use accessors only for read access, a const matrix pointer is sufficient.

Place the iterator at the beginning of the given row of the matrix, or create the end pointer if row equals the total number of rows in the matrix.

◆ Accessor() [3/8]

template<class BlockMatrixType >
BlockMatrixIterators::Accessor< BlockMatrixType, true >::Accessor ( const Accessor< BlockMatrixType, false > &  )

Initialize const accessor from non const accessor.

◆ row() [2/2]

template<class BlockMatrixType >
size_type BlockMatrixIterators::Accessor< BlockMatrixType, true >::row ( ) const

Row number of the element represented by this object.

◆ column() [2/2]

template<class BlockMatrixType >
size_type BlockMatrixIterators::Accessor< BlockMatrixType, true >::column ( ) const

Column number of the element represented by this object.

◆ value() [2/6]

template<class BlockMatrixType >
value_type BlockMatrixIterators::Accessor< BlockMatrixType, true >::value ( ) const

Value of the entry at the current position.

◆ advance() [2/2]

template<class BlockMatrixType >
void BlockMatrixIterators::Accessor< BlockMatrixType, true >::advance ( )
protected

Move ahead one element.

◆ operator==() [2/3]

template<class BlockMatrixType >
bool BlockMatrixIterators::Accessor< BlockMatrixType, true >::operator== ( const Accessor< BlockMatrixType, true > &  a) const
protected

Compare this accessor with another one for equality.

◆ BlockMatrixBase()

template<typename MatrixType >
BlockMatrixBase< MatrixType >::BlockMatrixBase ( )
default

Default constructor.

◆ ~BlockMatrixBase()

template<typename MatrixType >
BlockMatrixBase< MatrixType >::~BlockMatrixBase ( )
override

Destructor.

◆ copy_from() [1/4]

template<typename MatrixType >
template<class BlockMatrixType >
BlockMatrixBase & BlockMatrixBase< MatrixType >::copy_from ( const BlockMatrixType &  source)

Copy the matrix given as argument into the current object.

Copying matrices is an expensive operation that we do not want to happen by accident through compiler generated code for operator=. (This would happen, for example, if one accidentally declared a function argument of the current type by value rather than by reference.) The functionality of copying matrices is implemented in this member function instead. All copy operations of objects of this type therefore require an explicit function call.

The source matrix may be a matrix of arbitrary type, as long as its data type is convertible to the data type of this matrix.

The function returns a reference to this.

◆ block() [1/4]

template<typename MatrixType >
BlockType & BlockMatrixBase< MatrixType >::block ( const unsigned int  row,
const unsigned int  column 
)

Access the block with the given coordinates.

◆ block() [2/4]

template<typename MatrixType >
const BlockType & BlockMatrixBase< MatrixType >::block ( const unsigned int  row,
const unsigned int  column 
) const

Access the block with the given coordinates. Version for constant objects.

◆ m() [1/3]

template<typename MatrixType >
size_type BlockMatrixBase< MatrixType >::m ( ) const

Return the dimension of the codomain (or range) space. Note that the matrix is of dimension \(m \times n\).

◆ n() [1/3]

template<typename MatrixType >
size_type BlockMatrixBase< MatrixType >::n ( ) const

Return the dimension of the domain space. Note that the matrix is of dimension \(m \times n\).

◆ n_block_rows() [1/2]

template<typename MatrixType >
unsigned int BlockMatrixBase< MatrixType >::n_block_rows ( ) const

Return the number of blocks in a column. Returns zero if no sparsity pattern is presently associated to this matrix.

◆ n_block_cols() [1/2]

template<typename MatrixType >
unsigned int BlockMatrixBase< MatrixType >::n_block_cols ( ) const

Return the number of blocks in a row. Returns zero if no sparsity pattern is presently associated to this matrix.

◆ set() [1/7]

template<typename MatrixType >
void BlockMatrixBase< MatrixType >::set ( const size_type  i,
const size_type  j,
const value_type  value 
)

Set the element (i,j) to value. Throws an error if the entry does not exist or if value is not a finite number. Still, it is allowed to store zero values in non-existent fields.

◆ set() [2/7]

template<typename MatrixType >
template<typename number >
void BlockMatrixBase< MatrixType >::set ( const std::vector< size_type > &  indices,
const FullMatrix< number > &  full_matrix,
const bool  elide_zero_values = false 
)

Set all elements given in a FullMatrix into the sparse matrix locations given by indices. In other words, this function writes the elements in full_matrix into the calling matrix, using the local-to-global indexing specified by indices for both the rows and the columns of the matrix. This function assumes a quadratic sparse matrix and a quadratic full_matrix, the usual situation in FE calculations.

The optional parameter elide_zero_values can be used to specify whether zero values should be set anyway or they should be filtered away (and not change the previous content in the respective element if it exists). The default value is false, i.e., even zero values are treated.

◆ set() [3/7]

template<typename MatrixType >
template<typename number >
void BlockMatrixBase< MatrixType >::set ( const std::vector< size_type > &  row_indices,
const std::vector< size_type > &  col_indices,
const FullMatrix< number > &  full_matrix,
const bool  elide_zero_values = false 
)

Same function as before, but now including the possibility to use rectangular full_matrices and different local-to-global indexing on rows and columns, respectively.

◆ set() [4/7]

template<typename MatrixType >
template<typename number >
void BlockMatrixBase< MatrixType >::set ( const size_type  row,
const std::vector< size_type > &  col_indices,
const std::vector< number > &  values,
const bool  elide_zero_values = false 
)

Set several elements in the specified row of the matrix with column indices as given by col_indices to the respective value.

The optional parameter elide_zero_values can be used to specify whether zero values should be set anyway or they should be filtered away (and not change the previous content in the respective element if it exists). The default value is false, i.e., even zero values are treated.

◆ set() [5/7]

template<typename MatrixType >
template<typename number >
void BlockMatrixBase< MatrixType >::set ( const size_type  row,
const size_type  n_cols,
const size_type col_indices,
const number *  values,
const bool  elide_zero_values = false 
)

Set several elements to values given by values in a given row in columns given by col_indices into the sparse matrix.

The optional parameter elide_zero_values can be used to specify whether zero values should be inserted anyway or they should be filtered away. The default value is false, i.e., even zero values are inserted/replaced.

◆ add() [1/10]

template<typename MatrixType >
void BlockMatrixBase< MatrixType >::add ( const size_type  i,
const size_type  j,
const value_type  value 
)

Add value to the element (i,j). Throws an error if the entry does not exist or if value is not a finite number. Still, it is allowed to store zero values in non-existent fields.

◆ add() [2/10]

template<typename MatrixType >
template<typename number >
void BlockMatrixBase< MatrixType >::add ( const std::vector< size_type > &  indices,
const FullMatrix< number > &  full_matrix,
const bool  elide_zero_values = true 
)

Add all elements given in a FullMatrix<double> into sparse matrix locations given by indices. In other words, this function adds the elements in full_matrix to the respective entries in calling matrix, using the local-to-global indexing specified by indices for both the rows and the columns of the matrix. This function assumes a quadratic sparse matrix and a quadratic full_matrix, the usual situation in FE calculations.

The optional parameter elide_zero_values can be used to specify whether zero values should be added anyway or these should be filtered away and only non-zero data is added. The default value is true, i.e., zero values won't be added into the matrix.

◆ add() [3/10]

template<typename MatrixType >
template<typename number >
void BlockMatrixBase< MatrixType >::add ( const std::vector< size_type > &  row_indices,
const std::vector< size_type > &  col_indices,
const FullMatrix< number > &  full_matrix,
const bool  elide_zero_values = true 
)

Same function as before, but now including the possibility to use rectangular full_matrices and different local-to-global indexing on rows and columns, respectively.

◆ add() [4/10]

template<typename MatrixType >
template<typename number >
void BlockMatrixBase< MatrixType >::add ( const size_type  row,
const std::vector< size_type > &  col_indices,
const std::vector< number > &  values,
const bool  elide_zero_values = true 
)

Set several elements in the specified row of the matrix with column indices as given by col_indices to the respective value.

The optional parameter elide_zero_values can be used to specify whether zero values should be added anyway or these should be filtered away and only non-zero data is added. The default value is true, i.e., zero values won't be added into the matrix.

◆ add() [5/10]

template<typename MatrixType >
template<typename number >
void BlockMatrixBase< MatrixType >::add ( const size_type  row,
const size_type  n_cols,
const size_type col_indices,
const number *  values,
const bool  elide_zero_values = true,
const bool  col_indices_are_sorted = false 
)

Add an array of values given by values in the given global matrix row at columns specified by col_indices in the sparse matrix.

The optional parameter elide_zero_values can be used to specify whether zero values should be added anyway or these should be filtered away and only non-zero data is added. The default value is true, i.e., zero values won't be added into the matrix.

◆ add() [6/10]

template<typename MatrixType >
void BlockMatrixBase< MatrixType >::add ( const value_type  factor,
const BlockMatrixBase< MatrixType > &  matrix 
)

Add matrix scaled by factor to this matrix, i.e. the matrix factor*matrix is added to this. If the sparsity pattern of the calling matrix does not contain all the elements in the sparsity pattern of the input matrix, this function will throw an exception.

Depending on MatrixType, however, additional restrictions might arise. Some sparse matrix formats require matrix to be based on the same sparsity pattern as the calling matrix.

◆ operator()() [1/2]

template<typename MatrixType >
value_type BlockMatrixBase< MatrixType >::operator() ( const size_type  i,
const size_type  j 
) const

Return the value of the entry (i,j). This may be an expensive operation and you should always take care where to call this function. In order to avoid abuse, this function throws an exception if the wanted element does not exist in the matrix.

◆ el() [1/2]

template<typename MatrixType >
value_type BlockMatrixBase< MatrixType >::el ( const size_type  i,
const size_type  j 
) const

This function is mostly like operator()() in that it returns the value of the matrix entry (i,j). The only difference is that if this entry does not exist in the sparsity pattern, then instead of raising an exception, zero is returned. While this may be convenient in some cases, note that it is simple to write algorithms that are slow compared to an optimal solution, since the sparsity of the matrix is not used.

◆ diag_element() [1/2]

template<typename MatrixType >
value_type BlockMatrixBase< MatrixType >::diag_element ( const size_type  i) const

Return the main diagonal element in the ith row. This function throws an error if the matrix is not quadratic and also if the diagonal blocks of the matrix are not quadratic.

This function is considerably faster than the operator()(), since for quadratic matrices, the diagonal entry may be the first to be stored in each row and access therefore does not involve searching for the right column number.

◆ compress()

template<typename MatrixType >
void BlockMatrixBase< MatrixType >::compress ( ::VectorOperation::values  operation)

Call the compress() function on all the subblocks of the matrix.

See Compressing distributed objects for more information.

◆ operator*=() [1/3]

template<typename MatrixType >
BlockMatrixBase & BlockMatrixBase< MatrixType >::operator*= ( const value_type  factor)

Multiply the entire matrix by a fixed factor.

◆ operator/=() [1/3]

template<typename MatrixType >
BlockMatrixBase & BlockMatrixBase< MatrixType >::operator/= ( const value_type  factor)

Divide the entire matrix by a fixed factor.

◆ vmult_add() [1/3]

template<typename MatrixType >
template<class BlockVectorType >
void BlockMatrixBase< MatrixType >::vmult_add ( BlockVectorType &  dst,
const BlockVectorType &  src 
) const

Adding Matrix-vector multiplication. Add \(M*src\) on \(dst\) with \(M\) being this matrix.

◆ Tvmult_add() [1/3]

template<typename MatrixType >
template<class BlockVectorType >
void BlockMatrixBase< MatrixType >::Tvmult_add ( BlockVectorType &  dst,
const BlockVectorType &  src 
) const

Adding Matrix-vector multiplication. Add MTsrc to dst with M being this matrix. This function does the same as vmult_add() but takes the transposed matrix.

◆ matrix_norm_square() [1/2]

template<typename MatrixType >
template<class BlockVectorType >
value_type BlockMatrixBase< MatrixType >::matrix_norm_square ( const BlockVectorType &  v) const

Return the norm of the vector v with respect to the norm induced by this matrix, i.e. vTMv). This is useful, e.g. in the finite element context, where the LT-norm of a function equals the matrix norm with respect to the mass matrix of the vector representing the nodal values of the finite element function. Note that even though the function's name might suggest something different, for historic reasons not the norm but its square is returned, as defined above by the scalar product.

Obviously, the matrix needs to be square for this operation.

◆ frobenius_norm() [1/2]

template<typename MatrixType >
real_type BlockMatrixBase< MatrixType >::frobenius_norm ( ) const

Return the frobenius norm of the matrix, i.e. the square root of the sum of squares of all entries in the matrix.

◆ matrix_scalar_product() [1/2]

template<typename MatrixType >
template<class BlockVectorType >
value_type BlockMatrixBase< MatrixType >::matrix_scalar_product ( const BlockVectorType &  u,
const BlockVectorType &  v 
) const

Compute the matrix scalar product \(\left(u,Mv\right)\).

◆ residual() [1/2]

template<typename MatrixType >
template<class BlockVectorType >
value_type BlockMatrixBase< MatrixType >::residual ( BlockVectorType &  dst,
const BlockVectorType &  x,
const BlockVectorType &  b 
) const

Compute the residual r=b-Ax. Write the residual into dst.

◆ print() [1/2]

template<typename MatrixType >
void BlockMatrixBase< MatrixType >::print ( std::ostream &  out,
const bool  alternative_output = false 
) const

Print the matrix to the given stream, using the format (line,col) value, i.e. one nonzero entry of the matrix per line. The optional flag outputs the sparsity pattern in a different style according to the underlying sparse matrix type.

◆ begin() [1/8]

template<typename MatrixType >
iterator BlockMatrixBase< MatrixType >::begin ( )

Iterator starting at the first entry.

◆ end() [1/8]

template<typename MatrixType >
iterator BlockMatrixBase< MatrixType >::end ( )

Final iterator.

◆ begin() [2/8]

template<typename MatrixType >
iterator BlockMatrixBase< MatrixType >::begin ( const size_type  r)

Iterator starting at the first entry of row r.

◆ end() [2/8]

template<typename MatrixType >
iterator BlockMatrixBase< MatrixType >::end ( const size_type  r)

Final iterator of row r.

◆ begin() [3/8]

template<typename MatrixType >
const_iterator BlockMatrixBase< MatrixType >::begin ( ) const

Iterator starting at the first entry.

◆ end() [3/8]

template<typename MatrixType >
const_iterator BlockMatrixBase< MatrixType >::end ( ) const

Final iterator.

◆ begin() [4/8]

template<typename MatrixType >
const_iterator BlockMatrixBase< MatrixType >::begin ( const size_type  r) const

Iterator starting at the first entry of row r.

◆ end() [4/8]

template<typename MatrixType >
const_iterator BlockMatrixBase< MatrixType >::end ( const size_type  r) const

Final iterator of row r.

◆ get_row_indices()

template<typename MatrixType >
const BlockIndices & BlockMatrixBase< MatrixType >::get_row_indices ( ) const

Return a reference to the underlying BlockIndices data of the rows.

◆ get_column_indices()

template<typename MatrixType >
const BlockIndices & BlockMatrixBase< MatrixType >::get_column_indices ( ) const

Return a reference to the underlying BlockIndices data of the columns.

◆ memory_consumption() [1/3]

template<typename MatrixType >
std::size_t BlockMatrixBase< MatrixType >::memory_consumption ( ) const

Determine an estimate for the memory consumption (in bytes) of this object. Note that only the memory reserved on the current processor is returned in case this is called in an MPI-based program.

◆ BlockSparseMatrix() [1/2]

template<typename number >
BlockSparseMatrix< number >::BlockSparseMatrix ( )
default

Constructor; initializes the matrix to be empty, without any structure, i.e. the matrix is not usable at all. This constructor is therefore only useful for matrices which are members of a class. All other matrices should be created at a point in the data flow where all necessary information is available.

You have to initialize the matrix before usage with reinit(BlockSparsityPattern). The number of blocks per row and column are then determined by that function.

◆ BlockSparseMatrix() [2/2]

template<typename number >
BlockSparseMatrix< number >::BlockSparseMatrix ( const BlockSparsityPattern sparsity)

Constructor. Takes the given matrix sparsity structure to represent the sparsity pattern of this matrix. You can change the sparsity pattern later on by calling the reinit() function.

This constructor initializes all sub-matrices with the sub-sparsity pattern within the argument.

You have to make sure that the lifetime of the sparsity structure is at least as long as that of this matrix or as long as reinit() is not called with a new sparsity structure.

◆ ~BlockSparseMatrix()

template<typename number >
virtual BlockSparseMatrix< number >::~BlockSparseMatrix ( )
overridevirtual

Destructor.

◆ operator=() [1/8]

template<typename number >
BlockSparseMatrix & BlockSparseMatrix< number >::operator= ( const BlockSparseMatrix< number > &  )

Pseudo copy operator only copying empty objects. The sizes of the block matrices need to be the same.

◆ operator=() [2/8]

template<typename number >
BlockSparseMatrix< number > & BlockSparseMatrix< number >::operator= ( const double  d)
inline

This operator assigns a scalar to a matrix. Since this does usually not make much sense (should we set all matrix entries to this value? Only the nonzero entries of the sparsity pattern?), this operation is only allowed if the actual value to be assigned is zero. This operator only exists to allow for the obvious notation matrix=0, which sets all elements of the matrix to zero, but keep the sparsity pattern previously used.

Definition at line 379 of file block_sparse_matrix.h.

◆ clear() [1/3]

template<typename number >
void BlockSparseMatrix< number >::clear ( )

Release all memory and return to a state just like after having called the default constructor. It also forgets the sparsity pattern it was previously tied to.

This calls SparseMatrix::clear on all sub-matrices and then resets this object to have no blocks at all.

◆ reinit() [1/3]

template<typename number >
virtual void BlockSparseMatrix< number >::reinit ( const BlockSparsityPattern sparsity)
virtual

Reinitialize the sparse matrix with the given sparsity pattern. The latter tells the matrix how many nonzero elements there need to be reserved.

Basically, this function only calls SparseMatrix::reinit() of the sub- matrices with the block sparsity patterns of the parameter.

You have to make sure that the lifetime of the sparsity structure is at least as long as that of this matrix or as long as reinit(const SparsityPattern &) is not called with a new sparsity structure.

The elements of the matrix are set to zero by this function.

◆ empty() [1/3]

template<typename number >
bool BlockSparseMatrix< number >::empty ( ) const

Return whether the object is empty. It is empty if either both dimensions are zero or no BlockSparsityPattern is associated.

◆ get_row_length()

template<typename number >
size_type BlockSparseMatrix< number >::get_row_length ( const size_type  row) const

Return the number of entries in a specific row.

◆ n_nonzero_elements() [1/2]

template<typename number >
size_type BlockSparseMatrix< number >::n_nonzero_elements ( ) const

Return the number of nonzero elements of this matrix. Actually, it returns the number of entries in the sparsity pattern; if any of the entries should happen to be zero, it is counted anyway.

◆ n_actually_nonzero_elements() [1/2]

template<typename number >
size_type BlockSparseMatrix< number >::n_actually_nonzero_elements ( const double  threshold = 0.0) const

Return the number of actually nonzero elements. Just counts the number of actually nonzero elements (with absolute value larger than threshold) of all the blocks.

◆ get_sparsity_pattern() [1/2]

template<typename number >
const BlockSparsityPattern & BlockSparseMatrix< number >::get_sparsity_pattern ( ) const

Return a (constant) reference to the underlying sparsity pattern of this matrix.

Though the return value is declared const, you should be aware that it may change if you call any nonconstant function of objects which operate on it.

◆ memory_consumption() [2/3]

template<typename number >
std::size_t BlockSparseMatrix< number >::memory_consumption ( ) const

Determine an estimate for the memory consumption (in bytes) of this object.

◆ vmult() [1/6]

template<typename number >
template<typename block_number >
void BlockSparseMatrix< number >::vmult ( BlockVector< block_number > &  dst,
const BlockVector< block_number > &  src 
) const
inline

Matrix-vector multiplication: let \(dst = M*src\) with \(M\) being this matrix.

Definition at line 395 of file block_sparse_matrix.h.

◆ vmult() [2/6]

template<typename number >
template<typename block_number , typename nonblock_number >
void BlockSparseMatrix< number >::vmult ( BlockVector< block_number > &  dst,
const Vector< nonblock_number > &  src 
) const
inline

Matrix-vector multiplication. Just like the previous function, but only applicable if the matrix has only one block column.

Definition at line 406 of file block_sparse_matrix.h.

◆ vmult() [3/6]

template<typename number >
template<typename block_number , typename nonblock_number >
void BlockSparseMatrix< number >::vmult ( Vector< nonblock_number > &  dst,
const BlockVector< block_number > &  src 
) const
inline

Matrix-vector multiplication. Just like the previous function, but only applicable if the matrix has only one block row.

Definition at line 417 of file block_sparse_matrix.h.

◆ vmult() [4/6]

template<typename number >
template<typename nonblock_number >
void BlockSparseMatrix< number >::vmult ( Vector< nonblock_number > &  dst,
const Vector< nonblock_number > &  src 
) const
inline

Matrix-vector multiplication. Just like the previous function, but only applicable if the matrix has only one block.

Definition at line 428 of file block_sparse_matrix.h.

◆ Tvmult() [1/6]

template<typename number >
template<typename block_number >
void BlockSparseMatrix< number >::Tvmult ( BlockVector< block_number > &  dst,
const BlockVector< block_number > &  src 
) const
inline

Matrix-vector multiplication: let \(dst = M^T*src\) with \(M\) being this matrix. This function does the same as vmult() but takes the transposed matrix.

Definition at line 439 of file block_sparse_matrix.h.

◆ Tvmult() [2/6]

template<typename number >
template<typename block_number , typename nonblock_number >
void BlockSparseMatrix< number >::Tvmult ( BlockVector< block_number > &  dst,
const Vector< nonblock_number > &  src 
) const
inline

Matrix-vector multiplication. Just like the previous function, but only applicable if the matrix has only one block row.

Definition at line 450 of file block_sparse_matrix.h.

◆ Tvmult() [3/6]

template<typename number >
template<typename block_number , typename nonblock_number >
void BlockSparseMatrix< number >::Tvmult ( Vector< nonblock_number > &  dst,
const BlockVector< block_number > &  src 
) const
inline

Matrix-vector multiplication. Just like the previous function, but only applicable if the matrix has only one block column.

Definition at line 461 of file block_sparse_matrix.h.

◆ Tvmult() [4/6]

template<typename number >
template<typename nonblock_number >
void BlockSparseMatrix< number >::Tvmult ( Vector< nonblock_number > &  dst,
const Vector< nonblock_number > &  src 
) const
inline

Matrix-vector multiplication. Just like the previous function, but only applicable if the matrix has only one block.

Definition at line 472 of file block_sparse_matrix.h.

◆ precondition_Jacobi() [1/3]

template<typename number >
template<class BlockVectorType >
void BlockSparseMatrix< number >::precondition_Jacobi ( BlockVectorType &  dst,
const BlockVectorType &  src,
const number  omega = 1. 
) const
inline

Apply the Jacobi preconditioner, which multiplies every element of the src vector by the inverse of the respective diagonal element and multiplies the result with the relaxation parameter omega.

All diagonal blocks must be square matrices for this operation.

Definition at line 483 of file block_sparse_matrix.h.

◆ precondition_Jacobi() [2/3]

template<typename number >
template<typename number2 >
void BlockSparseMatrix< number >::precondition_Jacobi ( Vector< number2 > &  dst,
const Vector< number2 > &  src,
const number  omega = 1. 
) const
inline

Apply the Jacobi preconditioner to a simple vector.

The matrix must be a single square block for this.

Definition at line 504 of file block_sparse_matrix.h.

◆ print_formatted() [1/2]

template<typename number >
void BlockSparseMatrix< number >::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

Print the matrix in the usual format, i.e. as a matrix and not as a list of nonzero elements. For better readability, elements not in the matrix are displayed as empty space, while matrix elements which are explicitly set to zero are displayed as such.

The parameters allow for a flexible setting of the output format: precision and scientific are used to determine the number format, where scientific = false means fixed point notation. A zero entry for width makes the function compute a width, but it may be changed to a positive value, if output is crude.

Additionally, a character for an empty value may be specified.

Finally, the whole matrix can be multiplied with a common denominator to produce more readable output, even integers.

Attention
This function may produce large amounts of output if applied to a large matrix!

◆ BlockSparseMatrixEZ() [1/3]

template<typename Number >
BlockSparseMatrixEZ< Number >::BlockSparseMatrixEZ ( )
default

Default constructor. The result is an empty object with zero dimensions.

◆ BlockSparseMatrixEZ() [2/3]

template<typename Number >
BlockSparseMatrixEZ< Number >::BlockSparseMatrixEZ ( const unsigned int  block_rows,
const unsigned int  block_cols 
)

Constructor setting up an object with given number of block rows and columns. The blocks themselves still have zero dimension.

◆ BlockSparseMatrixEZ() [3/3]

template<typename Number >
BlockSparseMatrixEZ< Number >::BlockSparseMatrixEZ ( const BlockSparseMatrixEZ< Number > &  )

Copy constructor. This is needed for some container classes. It creates an object of the same number of block rows and columns. Since it calls the copy constructor of SparseMatrixEZ, the block s must be empty.

◆ operator=() [3/8]

template<typename Number >
BlockSparseMatrixEZ & BlockSparseMatrixEZ< Number >::operator= ( const BlockSparseMatrixEZ< Number > &  )

Copy operator. Like the copy constructor, this may be called for objects with empty blocks only.

◆ operator=() [4/8]

template<typename Number >
BlockSparseMatrixEZ & BlockSparseMatrixEZ< Number >::operator= ( const double  d)

This operator assigns a scalar to a matrix. Since this does usually not make much sense (should we set all matrix entries to this value? Only the nonzero entries of the sparsity pattern?), this operation is only allowed if the actual value to be assigned is zero. This operator only exists to allow for the obvious notation matrix=0, which sets all elements of the matrix to zero, but keep the sparsity pattern previously used.

◆ clear() [2/3]

template<typename Number >
void BlockSparseMatrixEZ< Number >::clear ( )

Set matrix to zero dimensions and release memory.

◆ reinit() [2/3]

template<typename Number >
void BlockSparseMatrixEZ< Number >::reinit ( const unsigned int  n_block_rows,
const unsigned int  n_block_cols 
)

Initialize to given block numbers. After this operation, the matrix will have the block dimensions provided. Each block will have zero dimensions and must be initialized subsequently. After setting the sizes of the blocks, collect_sizes() must be called to update internal data structures.

◆ collect_sizes()

template<typename Number >
void BlockSparseMatrixEZ< Number >::collect_sizes ( )

This function collects the sizes of the sub-objects and stores them in internal arrays, in order to be able to relay global indices into the matrix to indices into the subobjects. You must call this function each time after you have changed the size of the sub-objects.

◆ block() [3/4]

template<typename Number >
SparseMatrixEZ< Number > & BlockSparseMatrixEZ< Number >::block ( const unsigned int  row,
const unsigned int  column 
)
inline

Access the block with the given coordinates.

Definition at line 290 of file block_sparse_matrix_ez.h.

◆ block() [4/4]

template<typename Number >
const SparseMatrixEZ< Number > & BlockSparseMatrixEZ< Number >::block ( const unsigned int  row,
const unsigned int  column 
) const
inline

Access the block with the given coordinates. Version for constant objects.

Definition at line 303 of file block_sparse_matrix_ez.h.

◆ n_block_rows() [2/2]

template<typename Number >
unsigned int BlockSparseMatrixEZ< Number >::n_block_rows
inline

Return the number of blocks in a column.

Definition at line 272 of file block_sparse_matrix_ez.h.

◆ n_block_cols() [2/2]

template<typename Number >
unsigned int BlockSparseMatrixEZ< Number >::n_block_cols
inline

Return the number of blocks in a row.

Definition at line 281 of file block_sparse_matrix_ez.h.

◆ empty() [2/3]

template<typename Number >
bool BlockSparseMatrixEZ< Number >::empty ( ) const

Return whether the object is empty. It is empty if no memory is allocated, which is the same as that both dimensions are zero. This function is just the concatenation of the respective call to all sub- matrices.

◆ m() [2/3]

template<typename Number >
BlockSparseMatrixEZ< Number >::size_type BlockSparseMatrixEZ< Number >::m
inline

Return number of rows of this matrix, which equals the dimension of the codomain (or range) space. It is the sum of the number of rows over the sub-matrix blocks of this matrix. Recall that the matrix is of size m() times n().

Definition at line 316 of file block_sparse_matrix_ez.h.

◆ n() [2/3]

template<typename Number >
BlockSparseMatrixEZ< Number >::size_type BlockSparseMatrixEZ< Number >::n
inline

Return number of columns of this matrix, which equals the dimension of the domain space. It is the sum of the number of columns over the sub- matrix blocks of this matrix. Recall that the matrix is of size m() times n().

Definition at line 325 of file block_sparse_matrix_ez.h.

◆ set() [6/7]

template<typename Number >
void BlockSparseMatrixEZ< Number >::set ( const size_type  i,
const size_type  j,
const Number  value 
)
inline

Set the element (i,j) to value. Throws an error if the entry does not exist or if value is not a finite number. Still, it is allowed to store zero values in non-existent fields.

Definition at line 334 of file block_sparse_matrix_ez.h.

◆ add() [7/10]

template<typename Number >
void BlockSparseMatrixEZ< Number >::add ( const size_type  i,
const size_type  j,
const Number  value 
)
inline

Add value to the element (i,j). Throws an error if the entry does not exist or if value is not a finite number. Still, it is allowed to store zero values in non-existent fields.

Definition at line 352 of file block_sparse_matrix_ez.h.

◆ vmult() [5/6]

template<typename Number >
template<typename somenumber >
void BlockSparseMatrixEZ< Number >::vmult ( BlockVector< somenumber > &  dst,
const BlockVector< somenumber > &  src 
) const

Matrix-vector multiplication: let \(dst = M*src\) with \(M\) being this matrix.

Definition at line 370 of file block_sparse_matrix_ez.h.

◆ Tvmult() [5/6]

template<typename Number >
template<typename somenumber >
void BlockSparseMatrixEZ< Number >::Tvmult ( BlockVector< somenumber > &  dst,
const BlockVector< somenumber > &  src 
) const

Matrix-vector multiplication: let \(dst = M^T*src\) with \(M\) being this matrix. This function does the same as vmult() but takes the transposed matrix.

Definition at line 408 of file block_sparse_matrix_ez.h.

◆ vmult_add() [2/3]

template<typename Number >
template<typename somenumber >
void BlockSparseMatrixEZ< Number >::vmult_add ( BlockVector< somenumber > &  dst,
const BlockVector< somenumber > &  src 
) const

Adding Matrix-vector multiplication. Add \(M*src\) on \(dst\) with \(M\) being this matrix.

Definition at line 390 of file block_sparse_matrix_ez.h.

◆ Tvmult_add() [2/3]

template<typename Number >
template<typename somenumber >
void BlockSparseMatrixEZ< Number >::Tvmult_add ( BlockVector< somenumber > &  dst,
const BlockVector< somenumber > &  src 
) const

Adding Matrix-vector multiplication. Add \(M^T*src\) to \(dst\) with \(M\) being this matrix. This function does the same as vmult_add() but takes the transposed matrix.

Definition at line 428 of file block_sparse_matrix_ez.h.

◆ print_statistics()

template<typename number >
template<class StreamType >
void BlockSparseMatrixEZ< number >::print_statistics ( StreamType &  s,
bool  full = false 
)
inline

Print statistics. If full is true, prints a histogram of all existing row lengths and allocated row lengths. Otherwise, just the relation of allocated and used entries is shown.

Definition at line 446 of file block_sparse_matrix_ez.h.

◆ value() [3/6]

template<typename number , bool Constness>
number ChunkSparseMatrixIterators::Accessor< number, Constness >::value ( ) const

Value of this matrix entry.

◆ value() [4/6]

template<typename number , bool Constness>
number & ChunkSparseMatrixIterators::Accessor< number, Constness >::value ( )

Value of this matrix entry.

◆ get_matrix() [1/3]

template<typename number , bool Constness>
const ChunkSparseMatrix< number > & ChunkSparseMatrixIterators::Accessor< number, Constness >::get_matrix ( ) const

Return a reference to the matrix into which this accessor points. Note that in the present case, this is a constant reference.

◆ Accessor() [4/8]

template<typename number >
ChunkSparseMatrixIterators::Accessor< number, true >::Accessor ( MatrixType matrix,
const unsigned int  row 
)

Constructor.

◆ Accessor() [5/8]

template<typename number >
ChunkSparseMatrixIterators::Accessor< number, true >::Accessor ( MatrixType matrix)

Constructor. Construct the end accessor for the given matrix.

◆ Accessor() [6/8]

template<typename number >
ChunkSparseMatrixIterators::Accessor< number, true >::Accessor ( const ChunkSparseMatrixIterators::Accessor< number, false > &  a)

Copy constructor to get from a non-const accessor to a const accessor.

◆ value() [5/6]

template<typename number >
number ChunkSparseMatrixIterators::Accessor< number, true >::value ( ) const

Value of this matrix entry.

◆ get_matrix() [2/3]

template<typename number >
const MatrixType & ChunkSparseMatrixIterators::Accessor< number, true >::get_matrix ( ) const

Return a reference to the matrix into which this accessor points. Note that in the present case, this is a constant reference.

◆ Reference()

template<typename number >
ChunkSparseMatrixIterators::Accessor< number, false >::Reference::Reference ( const Accessor< number, false > *  accessor,
const bool  dummy 
)

Constructor. For the second argument, see the general class documentation.

◆ operator number()

template<typename number >
ChunkSparseMatrixIterators::Accessor< number, false >::Reference::operator number ( ) const

Conversion operator to the data type of the matrix.

◆ operator=() [5/8]

template<typename number >
const Reference & ChunkSparseMatrixIterators::Accessor< number, false >::Reference::operator= ( const number  n) const

Set the element of the matrix we presently point to to n.

◆ operator+=()

template<typename number >
const Reference & ChunkSparseMatrixIterators::Accessor< number, false >::Reference::operator+= ( const number  n) const

Add n to the element of the matrix we presently point to.

◆ operator-=()

template<typename number >
const Reference & ChunkSparseMatrixIterators::Accessor< number, false >::Reference::operator-= ( const number  n) const

Subtract n from the element of the matrix we presently point to.

◆ operator*=() [2/3]

template<typename number >
const Reference & ChunkSparseMatrixIterators::Accessor< number, false >::Reference::operator*= ( const number  n) const

Multiply the element of the matrix we presently point to by n.

◆ operator/=() [2/3]

template<typename number >
const Reference & ChunkSparseMatrixIterators::Accessor< number, false >::Reference::operator/= ( const number  n) const

Divide the element of the matrix we presently point to by n.

◆ Accessor() [7/8]

template<typename number >
ChunkSparseMatrixIterators::Accessor< number, false >::Accessor ( MatrixType matrix,
const unsigned int  row 
)

Constructor.

◆ Accessor() [8/8]

template<typename number >
ChunkSparseMatrixIterators::Accessor< number, false >::Accessor ( MatrixType matrix)

Constructor. Construct the end accessor for the given matrix.

◆ value() [6/6]

template<typename number >
Reference ChunkSparseMatrixIterators::Accessor< number, false >::value ( ) const

Value of this matrix entry, returned as a read- and writable reference.

◆ get_matrix() [3/3]

template<typename number >
MatrixType & ChunkSparseMatrixIterators::Accessor< number, false >::get_matrix ( ) const

Return a reference to the matrix into which this accessor points. Note that in the present case, this is a non-constant reference.

◆ Iterator() [1/3]

template<typename number , bool Constness>
ChunkSparseMatrixIterators::Iterator< number, Constness >::Iterator ( MatrixType matrix,
const unsigned int  row 
)

Constructor. Create an iterator into the matrix matrix for the given row and the index within it.

◆ Iterator() [2/3]

template<typename number , bool Constness>
ChunkSparseMatrixIterators::Iterator< number, Constness >::Iterator ( MatrixType matrix)

Constructor. Create the end iterator for the given matrix.

◆ Iterator() [3/3]

template<typename number , bool Constness>
ChunkSparseMatrixIterators::Iterator< number, Constness >::Iterator ( const ChunkSparseMatrixIterators::Iterator< number, false > &  i)

Conversion constructor to get from a non-const iterator to a const iterator.

◆ operator++() [1/2]

template<typename number , bool Constness>
Iterator & ChunkSparseMatrixIterators::Iterator< number, Constness >::operator++ ( )

Prefix increment.

◆ operator++() [2/2]

template<typename number , bool Constness>
Iterator ChunkSparseMatrixIterators::Iterator< number, Constness >::operator++ ( int  )

Postfix increment.

◆ operator*()

template<typename number , bool Constness>
const Accessor< number, Constness > & ChunkSparseMatrixIterators::Iterator< number, Constness >::operator* ( ) const

Dereferencing operator.

◆ operator->()

template<typename number , bool Constness>
const Accessor< number, Constness > * ChunkSparseMatrixIterators::Iterator< number, Constness >::operator-> ( ) const

Dereferencing operator.

◆ operator==() [3/3]

template<typename number , bool Constness>
bool ChunkSparseMatrixIterators::Iterator< number, Constness >::operator== ( const Iterator< number, Constness > &  ) const

Comparison. True, if both iterators point to the same matrix position.

◆ operator!=()

template<typename number , bool Constness>
bool ChunkSparseMatrixIterators::Iterator< number, Constness >::operator!= ( const Iterator< number, Constness > &  ) const

Inverse of ==.

◆ operator<()

template<typename number , bool Constness>
bool ChunkSparseMatrixIterators::Iterator< number, Constness >::operator< ( const Iterator< number, Constness > &  ) const

Comparison operator. Result is true if either the first row number is smaller or if the row numbers are equal and the first index is smaller.

This function is only valid if both iterators point into the same matrix.

◆ operator>()

template<typename number , bool Constness>
bool ChunkSparseMatrixIterators::Iterator< number, Constness >::operator> ( const Iterator< number, Constness > &  ) const

Comparison operator. Works in the same way as above operator, just the other way round.

◆ operator-()

template<typename number , bool Constness>
int ChunkSparseMatrixIterators::Iterator< number, Constness >::operator- ( const Iterator< number, Constness > &  p) const

Return the distance between the current iterator and the argument. The distance is given by how many times one has to apply operator++ to the current iterator to get the argument (for a positive return value), or operator-- (for a negative return value).

◆ operator+()

template<typename number , bool Constness>
Iterator ChunkSparseMatrixIterators::Iterator< number, Constness >::operator+ ( const unsigned int  n) const

Return an iterator that is n ahead of the current one.

◆ ChunkSparseMatrix() [1/4]

template<typename number >
ChunkSparseMatrix< number >::ChunkSparseMatrix ( )

Constructor; initializes the matrix to be empty, without any structure, i.e. the matrix is not usable at all. This constructor is therefore only useful for matrices which are members of a class. All other matrices should be created at a point in the data flow where all necessary information is available.

You have to initialize the matrix before usage with reinit(const ChunkSparsityPattern&).

◆ ChunkSparseMatrix() [2/4]

template<typename number >
ChunkSparseMatrix< number >::ChunkSparseMatrix ( const ChunkSparseMatrix< number > &  )

Copy constructor. This constructor is only allowed to be called if the matrix to be copied is empty. This is for the same reason as for the ChunkSparsityPattern, see there for the details.

If you really want to copy a whole matrix, you can do so by using the copy_from() function.

◆ ChunkSparseMatrix() [3/4]

template<typename number >
ChunkSparseMatrix< number >::ChunkSparseMatrix ( const ChunkSparsityPattern sparsity)
explicit

Constructor. Takes the given matrix sparsity structure to represent the sparsity pattern of this matrix. You can change the sparsity pattern later on by calling the reinit(const ChunkSparsityPattern&) function.

You have to make sure that the lifetime of the sparsity structure is at least as long as that of this matrix or as long as reinit(const ChunkSparsityPattern&) is not called with a new sparsity pattern.

The constructor is marked explicit so as to disallow that someone passes a sparsity pattern in place of a sparse matrix to some function, where an empty matrix would be generated then.

◆ ChunkSparseMatrix() [4/4]

template<typename number >
ChunkSparseMatrix< number >::ChunkSparseMatrix ( const ChunkSparsityPattern sparsity,
const IdentityMatrix id 
)

Copy constructor: initialize the matrix with the identity matrix. This constructor will throw an exception if the sizes of the sparsity pattern and the identity matrix do not coincide, or if the sparsity pattern does not provide for nonzero entries on the entire diagonal.

◆ ~ChunkSparseMatrix()

template<typename number >
virtual ChunkSparseMatrix< number >::~ChunkSparseMatrix ( )
overridevirtual

Destructor. Free all memory, but do not release the memory of the sparsity structure.

◆ operator=() [6/8]

template<typename number >
ChunkSparseMatrix< number > & ChunkSparseMatrix< number >::operator= ( const ChunkSparseMatrix< number > &  )

Copy operator. Since copying entire sparse matrices is a very expensive operation, we disallow doing so except for the special case of empty matrices of size zero. This doesn't seem particularly useful, but is exactly what one needs if one wanted to have a std::vector<ChunkSparseMatrix<double> >: in that case, one can create a vector (which needs the ability to copy objects) of empty matrices that are then later filled with something useful.

◆ operator=() [7/8]

template<typename number >
ChunkSparseMatrix< number > & ChunkSparseMatrix< number >::operator= ( const IdentityMatrix id)

Copy operator: initialize the matrix with the identity matrix. This operator will throw an exception if the sizes of the sparsity pattern and the identity matrix do not coincide, or if the sparsity pattern does not provide for nonzero entries on the entire diagonal.

◆ operator=() [8/8]

template<typename number >
ChunkSparseMatrix & ChunkSparseMatrix< number >::operator= ( const double  d)

This operator assigns a scalar to a matrix. Since this does usually not make much sense (should we set all matrix entries to this value? Only the nonzero entries of the sparsity pattern?), this operation is only allowed if the actual value to be assigned is zero. This operator only exists to allow for the obvious notation matrix=0, which sets all elements of the matrix to zero, but keep the sparsity pattern previously used.

◆ reinit() [3/3]

template<typename number >
virtual void ChunkSparseMatrix< number >::reinit ( const ChunkSparsityPattern sparsity)
virtual

Reinitialize the sparse matrix with the given sparsity pattern. The latter tells the matrix how many nonzero elements there need to be reserved.

Regarding memory allocation, the same applies as said above.

You have to make sure that the lifetime of the sparsity structure is at least as long as that of this matrix or as long as reinit(const ChunkSparsityPattern &) is not called with a new sparsity structure.

The elements of the matrix are set to zero by this function.

◆ clear() [3/3]

template<typename number >
virtual void ChunkSparseMatrix< number >::clear ( )
virtual

Release all memory and return to a state just like after having called the default constructor. It also forgets the sparsity pattern it was previously tied to.

◆ empty() [3/3]

template<typename number >
bool ChunkSparseMatrix< number >::empty ( ) const

Return whether the object is empty. It is empty if either both dimensions are zero or no ChunkSparsityPattern is associated.

◆ m() [3/3]

template<typename number >
size_type ChunkSparseMatrix< number >::m ( ) const

Return the dimension of the codomain (or range) space. Note that the matrix is of dimension \(m \times n\).

◆ n() [3/3]

template<typename number >
size_type ChunkSparseMatrix< number >::n ( ) const

Return the dimension of the domain space. Note that the matrix is of dimension \(m \times n\).

◆ n_nonzero_elements() [2/2]

template<typename number >
size_type ChunkSparseMatrix< number >::n_nonzero_elements ( ) const

Return the number of nonzero elements of this matrix. Actually, it returns the number of entries in the sparsity pattern; if any of the entries should happen to be zero, it is counted anyway.

◆ n_actually_nonzero_elements() [2/2]

template<typename number >
size_type ChunkSparseMatrix< number >::n_actually_nonzero_elements ( ) const

Return the number of actually nonzero elements of this matrix.

Note, that this function does (in contrary to n_nonzero_elements()) not count all entries of the sparsity pattern but only the ones that are nonzero.

◆ get_sparsity_pattern() [2/2]

template<typename number >
const ChunkSparsityPattern & ChunkSparseMatrix< number >::get_sparsity_pattern ( ) const

Return a (constant) reference to the underlying sparsity pattern of this matrix.

Though the return value is declared const, you should be aware that it may change if you call any nonconstant function of objects which operate on it.

◆ memory_consumption() [3/3]

template<typename number >
std::size_t ChunkSparseMatrix< number >::memory_consumption ( ) const

Determine an estimate for the memory consumption (in bytes) of this object. See MemoryConsumption.

◆ set() [7/7]

template<typename number >
void ChunkSparseMatrix< number >::set ( const size_type  i,
const size_type  j,
const number  value 
)

Set the element (i,j) to value. Throws an error if the entry does not exist or if value is not a finite number. Still, it is allowed to store zero values in non-existent fields.

◆ add() [8/10]

template<typename number >
void ChunkSparseMatrix< number >::add ( const size_type  i,
const size_type  j,
const number  value 
)

Add value to the element (i,j). Throws an error if the entry does not exist or if value is not a finite number. Still, it is allowed to store zero values in non-existent fields.

◆ add() [9/10]

template<typename number >
template<typename number2 >
void ChunkSparseMatrix< number >::add ( const size_type  row,
const size_type  n_cols,
const size_type col_indices,
const number2 *  values,
const bool  elide_zero_values = true,
const bool  col_indices_are_sorted = false 
)

Add an array of values given by values in the given global matrix row at columns specified by col_indices in the sparse matrix.

The optional parameter elide_zero_values can be used to specify whether zero values should be added anyway or these should be filtered away and only non-zero data is added. The default value is true, i.e., zero values won't be added into the matrix.

◆ operator*=() [3/3]

template<typename number >
ChunkSparseMatrix & ChunkSparseMatrix< number >::operator*= ( const number  factor)

Multiply the entire matrix by a fixed factor.

◆ operator/=() [3/3]

template<typename number >
ChunkSparseMatrix & ChunkSparseMatrix< number >::operator/= ( const number  factor)

Divide the entire matrix by a fixed factor.

◆ symmetrize()

template<typename number >
void ChunkSparseMatrix< number >::symmetrize ( )

Symmetrize the matrix by forming the mean value between the existing matrix and its transpose, \(A = \frac 12(A+A^T)\).

This operation assumes that the underlying sparsity pattern represents a symmetric object. If this is not the case, then the result of this operation will not be a symmetric matrix, since it only explicitly symmetrizes by looping over the lower left triangular part for efficiency reasons; if there are entries in the upper right triangle, then these elements are missed in the symmetrization. Symmetrization of the sparsity pattern can be obtain by ChunkSparsityPattern::symmetrize().

◆ copy_from() [2/4]

template<typename number >
template<typename somenumber >
ChunkSparseMatrix< number > & ChunkSparseMatrix< number >::copy_from ( const ChunkSparseMatrix< somenumber > &  source)

Copy the matrix given as argument into the current object.

Copying matrices is an expensive operation that we do not want to happen by accident through compiler generated code for operator=. (This would happen, for example, if one accidentally declared a function argument of the current type by value rather than by reference.) The functionality of copying matrices is implemented in this member function instead. All copy operations of objects of this type therefore require an explicit function call.

The source matrix may be a matrix of arbitrary type, as long as its data type is convertible to the data type of this matrix.

The function returns a reference to *this.

◆ copy_from() [3/4]

template<typename number >
template<typename ForwardIterator >
void ChunkSparseMatrix< number >::copy_from ( const ForwardIterator  begin,
const ForwardIterator  end 
)

This function is complete analogous to the ChunkSparsityPattern::copy_from() function in that it allows to initialize a whole matrix in one step. See there for more information on argument types and their meaning. You can also find a small example on how to use this function there.

The only difference to the cited function is that the objects which the inner iterator points to need to be of type std::pair<unsigned int, value, where value needs to be convertible to the element type of this class, as specified by the number template argument.

Previous content of the matrix is overwritten. Note that the entries specified by the input parameters need not necessarily cover all elements of the matrix. Elements not covered remain untouched.

◆ copy_from() [4/4]

template<typename number >
template<typename somenumber >
void ChunkSparseMatrix< number >::copy_from ( const FullMatrix< somenumber > &  matrix)

Copy the nonzero entries of a full matrix into this object. Previous content is deleted. Note that the underlying sparsity pattern must be appropriate to hold the nonzero entries of the full matrix.

◆ add() [10/10]

template<typename number >
template<typename somenumber >
void ChunkSparseMatrix< number >::add ( const number  factor,
const ChunkSparseMatrix< somenumber > &  matrix 
)

Add matrix scaled by factor to this matrix, i.e. the matrix factor*matrix is added to this. This function throws an error if the sparsity patterns of the two involved matrices do not point to the same object, since in this case the operation is cheaper.

The source matrix may be a sparse matrix over an arbitrary underlying scalar type, as long as its data type is convertible to the data type of this matrix.

◆ operator()() [2/2]

template<typename number >
number ChunkSparseMatrix< number >::operator() ( const size_type  i,
const size_type  j 
) const

Return the value of the entry (i,j). This may be an expensive operation and you should always take care where to call this function. In order to avoid abuse, this function throws an exception if the required element does not exist in the matrix.

In case you want a function that returns zero instead (for entries that are not in the sparsity pattern of the matrix), use the el() function.

If you are looping over all elements, consider using one of the iterator classes instead, since they are tailored better to a sparse matrix structure.

◆ el() [2/2]

template<typename number >
number ChunkSparseMatrix< number >::el ( const size_type  i,
const size_type  j 
) const

This function is mostly like operator()() in that it returns the value of the matrix entry (i,j). The only difference is that if this entry does not exist in the sparsity pattern, then instead of raising an exception, zero is returned. While this may be convenient in some cases, note that it is simple to write algorithms that are slow compared to an optimal solution, since the sparsity of the matrix is not used.

If you are looping over all elements, consider using one of the iterator classes instead, since they are tailored better to a sparse matrix structure.

◆ diag_element() [2/2]

template<typename number >
number ChunkSparseMatrix< number >::diag_element ( const size_type  i) const

Return the main diagonal element in the ith row. This function throws an error if the matrix is not quadratic.

This function is considerably faster than the operator()(), since for quadratic matrices, the diagonal entry may be the first to be stored in each row and access therefore does not involve searching for the right column number.

◆ extract_row_copy()

template<typename number >
void ChunkSparseMatrix< number >::extract_row_copy ( const size_type  row,
const size_type  array_length,
size_type row_length,
size_type column_indices,
number *  values 
) const

Extracts a copy of the values and indices in the given matrix row.

The user is expected to pass the length of the arrays column_indices and values, which gives a means for checking that we do not write to unallocated memory. This method is motivated by a similar method in Trilinos row matrices and gives faster access to entries in the matrix as compared to iterators which are quite slow for this matrix type.

◆ vmult() [6/6]

template<typename number >
template<class OutVector , class InVector >
void ChunkSparseMatrix< number >::vmult ( OutVector &  dst,
const InVector &  src 
) const

Matrix-vector multiplication: let dst = M*src with M being this matrix.

Note that while this function can operate on all vectors that offer iterator classes, it is only really effective for objects of type Vector. For all classes for which iterating over elements, or random member access is expensive, this function is not efficient. In particular, if you want to multiply with BlockVector objects, you should consider using a BlockChunkSparseMatrix as well.

Source and destination must not be the same vector.

◆ Tvmult() [6/6]

template<typename number >
template<class OutVector , class InVector >
void ChunkSparseMatrix< number >::Tvmult ( OutVector &  dst,
const InVector &  src 
) const

Matrix-vector multiplication: let dst = MT*src with M being this matrix. This function does the same as vmult() but takes the transposed matrix.

Note that while this function can operate on all vectors that offer iterator classes, it is only really effective for objects of type Vector. For all classes for which iterating over elements, or random member access is expensive, this function is not efficient. In particular, if you want to multiply with BlockVector objects, you should consider using a BlockChunkSparseMatrix as well.

Source and destination must not be the same vector.

◆ vmult_add() [3/3]

template<typename number >
template<class OutVector , class InVector >
void ChunkSparseMatrix< number >::vmult_add ( OutVector &  dst,
const InVector &  src 
) const

Adding Matrix-vector multiplication. Add M*src on dst with M being this matrix.

Note that while this function can operate on all vectors that offer iterator classes, it is only really effective for objects of type Vector. For all classes for which iterating over elements, or random member access is expensive, this function is not efficient. In particular, if you want to multiply with BlockVector objects, you should consider using a BlockChunkSparseMatrix as well.

Source and destination must not be the same vector.

◆ Tvmult_add() [3/3]

template<typename number >
template<class OutVector , class InVector >
void ChunkSparseMatrix< number >::Tvmult_add ( OutVector &  dst,
const InVector &  src 
) const

Adding Matrix-vector multiplication. Add MT*src to dst with M being this matrix. This function does the same as vmult_add() but takes the transposed matrix.

Note that while this function can operate on all vectors that offer iterator classes, it is only really effective for objects of type Vector. For all classes for which iterating over elements, or random member access is expensive, this function is not efficient. In particular, if you want to multiply with BlockVector objects, you should consider using a BlockChunkSparseMatrix as well.

Source and destination must not be the same vector.

◆ matrix_norm_square() [2/2]

template<typename number >
template<typename somenumber >
somenumber ChunkSparseMatrix< number >::matrix_norm_square ( const Vector< somenumber > &  v) const

Return the square of the norm of the vector \(v\) with respect to the norm induced by this matrix, i.e. \(\left(v,Mv\right)\). This is useful, e.g. in the finite element context, where the \(L_2\) norm of a function equals the matrix norm with respect to the mass matrix of the vector representing the nodal values of the finite element function.

Obviously, the matrix needs to be quadratic for this operation, and for the result to actually be a norm it also needs to be either real symmetric or complex hermitian.

The underlying template types of both this matrix and the given vector should either both be real or complex-valued, but not mixed, for this function to make sense.

◆ matrix_scalar_product() [2/2]

template<typename number >
template<typename somenumber >
somenumber ChunkSparseMatrix< number >::matrix_scalar_product ( const Vector< somenumber > &  u,
const Vector< somenumber > &  v 
) const

Compute the matrix scalar product \(\left(u,Mv\right)\).

◆ residual() [2/2]

template<typename number >
template<typename somenumber >
somenumber ChunkSparseMatrix< number >::residual ( Vector< somenumber > &  dst,
const Vector< somenumber > &  x,
const Vector< somenumber > &  b 
) const

Compute the residual of an equation Mx=b, where the residual is defined to be r=b-Mx. Write the residual into dst. The l2 norm of the residual vector is returned.

Source x and destination dst must not be the same vector.

◆ l1_norm()

template<typename number >
real_type ChunkSparseMatrix< number >::l1_norm ( ) const

Return the l1-norm of the matrix, that is \(|M|_1=max_{all columns j}\sum_{all rows i} |M_ij|\), (max. sum of columns). This is the natural matrix norm that is compatible to the l1-norm for vectors, i.e. \(|Mv|_1\leq |M|_1 |v|_1\). (cf. Haemmerlin-Hoffmann : Numerische Mathematik)

◆ linfty_norm()

template<typename number >
real_type ChunkSparseMatrix< number >::linfty_norm ( ) const

Return the linfty-norm of the matrix, that is \(|M|_infty=max_{all rows i}\sum_{all columns j} |M_ij|\), (max. sum of rows). This is the natural matrix norm that is compatible to the linfty-norm of vectors, i.e. \(|Mv|_infty \leq |M|_infty |v|_infty\). (cf. Haemmerlin-Hoffmann : Numerische Mathematik)

◆ frobenius_norm() [2/2]

template<typename number >
real_type ChunkSparseMatrix< number >::frobenius_norm ( ) const

Return the frobenius norm of the matrix, i.e. the square root of the sum of squares of all entries in the matrix.

◆ precondition_Jacobi() [3/3]

template<typename number >
template<typename somenumber >
void ChunkSparseMatrix< number >::precondition_Jacobi ( Vector< somenumber > &  dst,
const Vector< somenumber > &  src,
const number  omega = 1. 
) const

Apply the Jacobi preconditioner, which multiplies every element of the src vector by the inverse of the respective diagonal element and multiplies the result with the relaxation factor omega.

◆ precondition_SSOR()

template<typename number >
template<typename somenumber >
void ChunkSparseMatrix< number >::precondition_SSOR ( Vector< somenumber > &  dst,
const Vector< somenumber > &  src,
const number  om = 1. 
) const

Apply SSOR preconditioning to src.

◆ precondition_SOR()

template<typename number >
template<typename somenumber >
void ChunkSparseMatrix< number >::precondition_SOR ( Vector< somenumber > &  dst,
const Vector< somenumber > &  src,
const number  om = 1. 
) const

Apply SOR preconditioning matrix to src.

◆ precondition_TSOR()

template<typename number >
template<typename somenumber >
void ChunkSparseMatrix< number >::precondition_TSOR ( Vector< somenumber > &  dst,
const Vector< somenumber > &  src,
const number  om = 1. 
) const

Apply transpose SOR preconditioning matrix to src.

◆ SSOR()

template<typename number >
template<typename somenumber >
void ChunkSparseMatrix< number >::SSOR ( Vector< somenumber > &  v,
const number  omega = 1. 
) const

Perform SSOR preconditioning in-place. Apply the preconditioner matrix without copying to a second vector. omega is the relaxation parameter.

◆ SOR()

template<typename number >
template<typename somenumber >
void ChunkSparseMatrix< number >::SOR ( Vector< somenumber > &  v,
const number  om = 1. 
) const

Perform an SOR preconditioning in-place. omega is the relaxation parameter.

◆ TSOR()

template<typename number >
template<typename somenumber >
void ChunkSparseMatrix< number >::TSOR ( Vector< somenumber > &  v,
const number  om = 1. 
) const

Perform a transpose SOR preconditioning in-place. omega is the relaxation parameter.

◆ PSOR()

template<typename number >
template<typename somenumber >
void ChunkSparseMatrix< number >::PSOR ( Vector< somenumber > &  v,
const std::vector< size_type > &  permutation,
const std::vector< size_type > &  inverse_permutation,
const number  om = 1. 
) const

Perform a permuted SOR preconditioning in-place.

The standard SOR method is applied in the order prescribed by permutation, that is, first the row permutation[0], then permutation[1] and so on. For efficiency reasons, the permutation as well as its inverse are required.

omega is the relaxation parameter.

◆ TPSOR()

template<typename number >
template<typename somenumber >
void ChunkSparseMatrix< number >::TPSOR ( Vector< somenumber > &  v,
const std::vector< size_type > &  permutation,
const std::vector< size_type > &  inverse_permutation,
const number  om = 1. 
) const

Perform a transposed permuted SOR preconditioning in-place.

The transposed SOR method is applied in the order prescribed by permutation, that is, first the row permutation[m()-1], then permutation[m()-2] and so on. For efficiency reasons, the permutation as well as its inverse are required.

omega is the relaxation parameter.

◆ SOR_step()

template<typename number >
template<typename somenumber >
void ChunkSparseMatrix< number >::SOR_step ( Vector< somenumber > &  v,
const Vector< somenumber > &  b,
const number  om = 1. 
) const

Do one SOR step on v. Performs a direct SOR step with right hand side b.

◆ TSOR_step()

template<typename number >
template<typename somenumber >
void ChunkSparseMatrix< number >::TSOR_step ( Vector< somenumber > &  v,
const Vector< somenumber > &  b,
const number  om = 1. 
) const

Do one adjoint SOR step on v. Performs a direct TSOR step with right hand side b.

◆ SSOR_step()

template<typename number >
template<typename somenumber >
void ChunkSparseMatrix< number >::SSOR_step ( Vector< somenumber > &  v,
const Vector< somenumber > &  b,
const number  om = 1. 
) const

Do one SSOR step on v. Performs a direct SSOR step with right hand side b by performing TSOR after SOR.

◆ begin() [5/8]

template<typename number >
const_iterator ChunkSparseMatrix< number >::begin ( ) const

Iterator starting at first entry of the matrix. This is the version for constant matrices.

Note that due to the layout in ChunkSparseMatrix, iterating over matrix entries is considerably slower than for a sparse matrix, as the iterator is travels row-by-row, whereas data is stored in chunks of several rows and columns.

◆ end() [5/8]

template<typename number >
const_iterator ChunkSparseMatrix< number >::end ( ) const

Final iterator. This is the version for constant matrices.

Note that due to the layout in ChunkSparseMatrix, iterating over matrix entries is considerably slower than for a sparse matrix, as the iterator is travels row-by-row, whereas data is stored in chunks of several rows and columns.

◆ begin() [6/8]

template<typename number >
iterator ChunkSparseMatrix< number >::begin ( )

Iterator starting at the first entry of the matrix. This is the version for non-constant matrices.

Note that due to the layout in ChunkSparseMatrix, iterating over matrix entries is considerably slower than for a sparse matrix, as the iterator is travels row-by-row, whereas data is stored in chunks of several rows and columns.

◆ end() [6/8]

template<typename number >
iterator ChunkSparseMatrix< number >::end ( )

Final iterator. This is the version for non-constant matrices.

Note that due to the layout in ChunkSparseMatrix, iterating over matrix entries is considerably slower than for a sparse matrix, as the iterator is travels row-by-row, whereas data is stored in chunks of several rows and columns.

◆ begin() [7/8]

template<typename number >
const_iterator ChunkSparseMatrix< number >::begin ( const unsigned int  r) const

Iterator starting at the first entry of row r. This is the version for constant matrices.

Note that if the given row is empty, i.e. does not contain any nonzero entries, then the iterator returned by this function equals end(r). Note also that the iterator may not be dereferenceable in that case.

Note that due to the layout in ChunkSparseMatrix, iterating over matrix entries is considerably slower than for a sparse matrix, as the iterator is travels row-by-row, whereas data is stored in chunks of several rows and columns.

◆ end() [7/8]

template<typename number >
const_iterator ChunkSparseMatrix< number >::end ( const unsigned int  r) const

Final iterator of row r. It points to the first element past the end of line r, or past the end of the entire sparsity pattern. This is the version for constant matrices.

Note that the end iterator is not necessarily dereferenceable. This is in particular the case if it is the end iterator for the last row of a matrix.

Note that due to the layout in ChunkSparseMatrix, iterating over matrix entries is considerably slower than for a sparse matrix, as the iterator is travels row-by-row, whereas data is stored in chunks of several rows and columns.

◆ begin() [8/8]

template<typename number >
iterator ChunkSparseMatrix< number >::begin ( const unsigned int  r)

Iterator starting at the first entry of row r. This is the version for non-constant matrices.

Note that if the given row is empty, i.e. does not contain any nonzero entries, then the iterator returned by this function equals end(r). Note also that the iterator may not be dereferenceable in that case.

Note that due to the layout in ChunkSparseMatrix, iterating over matrix entries is considerably slower than for a sparse matrix, as the iterator is travels row-by-row, whereas data is stored in chunks of several rows and columns.

◆ end() [8/8]

template<typename number >
iterator ChunkSparseMatrix< number >::end ( const unsigned int  r)

Final iterator of row r. It points to the first element past the end of line r, or past the end of the entire sparsity pattern. This is the version for non-constant matrices.

Note that the end iterator is not necessarily dereferenceable. This is in particular the case if it is the end iterator for the last row of a matrix.

Note that due to the layout in ChunkSparseMatrix, iterating over matrix entries is considerably slower than for a sparse matrix, as the iterator is travels row-by-row, whereas data is stored in chunks of several rows and columns.

◆ print() [2/2]

template<typename number >
void ChunkSparseMatrix< number >::print ( std::ostream &  out) const

Print the matrix to the given stream, using the format (line,col) value, i.e. one nonzero entry of the matrix per line.

◆ print_formatted() [2/2]

template<typename number >
void ChunkSparseMatrix< number >::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

Print the matrix in the usual format, i.e. as a matrix and not as a list of nonzero elements. For better readability, elements not in the matrix are displayed as empty space, while matrix elements which are explicitly set to zero are displayed as such.

The parameters allow for a flexible setting of the output format: precision and scientific are used to determine the number format, where scientific = false means fixed point notation. A zero entry for width makes the function compute a width, but it may be changed to a positive value, if output is crude.

Additionally, a character for an empty value may be specified.

Finally, the whole matrix can be multiplied with a common denominator to produce more readable output, even integers.

Attention
This function may produce large amounts of output if applied to a large matrix!

◆ print_pattern()

template<typename number >
void ChunkSparseMatrix< number >::print_pattern ( std::ostream &  out,
const double  threshold = 0. 
) const

Print the actual pattern of the matrix. For each entry with an absolute value larger than threshold, a '*' is printed, a ':' for every value smaller and a '.' for every entry not allocated.

◆ block_write()

template<typename number >
void ChunkSparseMatrix< number >::block_write ( std::ostream &  out) const

Write the data of this object en bloc to a file. This is done in a binary mode, so the output is neither readable by humans nor (probably) by other computers using a different operating system or number format.

The purpose of this function is that you can swap out matrices and sparsity pattern if you are short of memory, want to communicate between different programs, or allow objects to be persistent across different runs of the program.

◆ block_read()

template<typename number >
void ChunkSparseMatrix< number >::block_read ( std::istream &  in)

Read data that has previously been written by block_write() from a file. This is done using the inverse operations to the above function, so it is reasonably fast because the bitstream is not interpreted except for a few numbers up front.

The object is resized on this operation, and all previous contents are lost. Note, however, that no checks are performed whether new data and the underlying ChunkSparsityPattern object fit together. It is your responsibility to make sure that the sparsity pattern and the data to be read match.

A primitive form of error checking is performed which will recognize the bluntest attempts to interpret some data as a matrix stored bitwise to a file that wasn't actually created that way, but not more.

Variable Documentation

◆ row_block

template<class BlockMatrixType >
unsigned int BlockMatrixIterators::AccessorBase< BlockMatrixType >::row_block
protected

Block row into which we presently point.

Definition at line 95 of file block_matrix_base.h.

◆ col_block

template<class BlockMatrixType >
unsigned int BlockMatrixIterators::AccessorBase< BlockMatrixType >::col_block
protected

Block column into which we presently point.

Definition at line 100 of file block_matrix_base.h.

◆ matrix [1/4]

template<class BlockMatrixType >
BlockMatrixType* BlockMatrixIterators::Accessor< BlockMatrixType, false >::matrix
protected

The matrix accessed.

Definition at line 176 of file block_matrix_base.h.

◆ base_iterator [1/2]

template<class BlockMatrixType >
BlockMatrixType::BlockType::iterator BlockMatrixIterators::Accessor< BlockMatrixType, false >::base_iterator
protected

Iterator of the underlying matrix class.

Definition at line 181 of file block_matrix_base.h.

◆ matrix [2/4]

template<class BlockMatrixType >
const BlockMatrixType* BlockMatrixIterators::Accessor< BlockMatrixType, true >::matrix
protected

The matrix accessed.

Definition at line 262 of file block_matrix_base.h.

◆ base_iterator [2/2]

template<class BlockMatrixType >
BlockMatrixType::BlockType::const_iterator BlockMatrixIterators::Accessor< BlockMatrixType, true >::base_iterator
protected

Iterator of the underlying matrix class.

Definition at line 267 of file block_matrix_base.h.

◆ row_indices

template<typename Number >
BlockIndices BlockSparseMatrixEZ< Number >::row_indices
private

Object storing and managing the transformation of row indices to indices of the sub-objects.

Definition at line 252 of file block_sparse_matrix_ez.h.

◆ column_indices

template<typename Number >
BlockIndices BlockSparseMatrixEZ< Number >::column_indices
private

Object storing and managing the transformation of column indices to indices of the sub-objects.

Definition at line 258 of file block_sparse_matrix_ez.h.

◆ blocks

template<typename Number >
Table<2, SparseMatrixEZ<Number> > BlockSparseMatrixEZ< Number >::blocks
private

The actual matrices

Definition at line 263 of file block_sparse_matrix_ez.h.

◆ matrix [3/4]

template<typename number >
MatrixType* ChunkSparseMatrixIterators::Accessor< number, true >::matrix
private

Pointer to the matrix we use.

Definition at line 141 of file chunk_sparse_matrix.h.

◆ accessor [1/2]

template<typename number >
const Accessor* ChunkSparseMatrixIterators::Accessor< number, false >::Reference::accessor
private

Pointer to the accessor that denotes which element we presently point to.

Definition at line 235 of file chunk_sparse_matrix.h.

◆ matrix [4/4]

template<typename number >
MatrixType* ChunkSparseMatrixIterators::Accessor< number, false >::matrix
private

Pointer to the matrix we use.

Definition at line 272 of file chunk_sparse_matrix.h.

◆ accessor [2/2]

template<typename number , bool Constness>
Accessor<number, Constness> ChunkSparseMatrixIterators::Iterator< number, Constness >::accessor
private

Store an object of the accessor class.

Definition at line 406 of file chunk_sparse_matrix.h.

Friends

◆ MatrixIterator [1/2]

template<class BlockMatrixType >
template<typename >
friend class MatrixIterator
friend

Definition at line 104 of file block_matrix_base.h.

◆ MatrixIterator [2/2]

template<class BlockMatrixType >
template<typename >
friend class MatrixIterator
friend

Definition at line 196 of file block_matrix_base.h.

◆ Accessor< BlockMatrixType, true >

template<class BlockMatrixType >
friend class Accessor< BlockMatrixType, true >
friend

Definition at line 196 of file block_matrix_base.h.

◆ ::MatrixIterator

template<class BlockMatrixType >
template<typename >
friend class ::MatrixIterator
friend

Definition at line 283 of file block_matrix_base.h.

◆ Iterator [1/2]

template<typename number >
template<typename , bool >
friend class Iterator
friend

Definition at line 150 of file chunk_sparse_matrix.h.

◆ Iterator [2/2]

template<typename number >
template<typename , bool >
friend class Iterator
friend

Definition at line 281 of file chunk_sparse_matrix.h.