Public Member Functions | |
BlockDiagonalMatrix (const MATRIX &M, const unsigned int n_blocks) | |
template<typename number1 , typename number2 > | |
void | vmult (BlockVector< number1 > &dst, const BlockVector< number2 > &src) const |
template<typename number1 , typename number2 > | |
void | Tvmult (BlockVector< number1 > &dst, const BlockVector< number2 > &src) const |
Private Attributes | |
unsigned int | num_blocks |
SmartPointer< const MATRIX > | matrix |
This matrix implements an m
by m
block matrix. Each diagonal block consists of the same (non-block) matrix, while off-diagonal blocks are void.
One special application is a one by one block matrix, allowing to apply the vmult
of the original matrix (or preconditioner) to a block vector.
BlockDiagonalMatrix< MATRIX >::BlockDiagonalMatrix | ( | const MATRIX & | M, | |
const unsigned int | n_blocks | |||
) | [inline] |
Constructor for an n_blocks
by n_blocks
matrix with diagonal blocks M
.
void BlockDiagonalMatrix< MATRIX >::vmult | ( | BlockVector< number1 > & | dst, | |
const BlockVector< number2 > & | src | |||
) | const [inline] |
Matrix-vector-multiplication.
References Assert, BlockVectorBase< Vector< Number > >::block(), BlockDiagonalMatrix< MATRIX >::matrix, BlockVectorBase< Vector< Number > >::n_blocks(), and BlockDiagonalMatrix< MATRIX >::num_blocks.
void BlockDiagonalMatrix< MATRIX >::Tvmult | ( | BlockVector< number1 > & | dst, | |
const BlockVector< number2 > & | src | |||
) | const [inline] |
Transposed matrix-vector-multiplication.
References Assert, BlockVectorBase< Vector< Number > >::block(), BlockDiagonalMatrix< MATRIX >::matrix, BlockVectorBase< Vector< Number > >::n_blocks(), and BlockDiagonalMatrix< MATRIX >::num_blocks.
unsigned int BlockDiagonalMatrix< MATRIX >::num_blocks [private] |
Number of blocks.
Referenced by BlockDiagonalMatrix< MATRIX >::Tvmult(), and BlockDiagonalMatrix< MATRIX >::vmult().
SmartPointer<const MATRIX> BlockDiagonalMatrix< MATRIX >::matrix [private] |
Diagonal entry.
Referenced by BlockDiagonalMatrix< MATRIX >::Tvmult(), and BlockDiagonalMatrix< MATRIX >::vmult().