![]() |
Reference documentation for deal.II version 8.1.0
|
#include <matrix_block.h>
Public Types | |
typedef types::global_dof_index | size_type |
Public Member Functions | |
MatrixBlock () | |
MatrixBlock (const MatrixBlock< MATRIX > &M) | |
MatrixBlock (size_type i, size_type j) | |
void | reinit (const BlockSparsityPattern &sparsity) |
operator MATRIX & () | |
operator const MATRIX & () const | |
void | add (const size_type i, const size_type j, const typename MATRIX::value_type value) |
template<typename number > | |
void | add (const std::vector< size_type > &indices, const FullMatrix< number > &full_matrix, const bool elide_zero_values=true) |
template<typename number > | |
void | 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 | add (const size_type row_index, const std::vector< size_type > &col_indices, const std::vector< number > &values, const bool elide_zero_values=true) |
template<typename number > | |
void | 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) |
template<class VECTOR > | |
void | vmult (VECTOR &w, const VECTOR &v) const |
template<class VECTOR > | |
void | vmult_add (VECTOR &w, const VECTOR &v) const |
template<class VECTOR > | |
void | Tvmult (VECTOR &w, const VECTOR &v) const |
template<class VECTOR > | |
void | Tvmult_add (VECTOR &w, const VECTOR &v) const |
std::size_t | memory_consumption () const |
DeclException2 (ExcBlockIndexMismatch, size_type, size_type,<< "Block index "<< arg1<< " does not match "<< arg2) | |
![]() | |
Subscriptor () | |
Subscriptor (const Subscriptor &) | |
virtual | ~Subscriptor () |
Subscriptor & | operator= (const Subscriptor &) |
void | subscribe (const char *identifier=0) const |
void | unsubscribe (const char *identifier=0) const |
unsigned int | n_subscriptions () const |
void | list_subscribers () const |
DeclException3 (ExcInUse, int, char *, std::string &,<< "Object of class "<< arg2<< " is still used by "<< arg1<< " other objects.\n"<< "(Additional information: "<< arg3<< ")\n"<< "Note the entry in the Frequently Asked Questions of "<< "deal.II (linked to from http://www.dealii.org/) for "<< "more information on what this error means.") | |
DeclException2 (ExcNoSubscriber, char *, char *,<< "No subscriber with identifier \""<< arg2<< "\" did subscribe to this object of class "<< arg1) | |
template<class Archive > | |
void | serialize (Archive &ar, const unsigned int version) |
Public Attributes | |
size_type | row |
size_type | column |
MATRIX | matrix |
Private Attributes | |
BlockIndices | row_indices |
BlockIndices | column_indices |
Friends | |
void | internal::reinit (MatrixBlock< MATRIX > &, const BlockSparsityPattern &) |
A wrapper around a matrix object, storing the coordinates in a block matrix as well.
This class is an alternative to BlockMatrixBase, if you only want to generate a single block of the system, not the whole system. Using the add() functions of this class, it is possible to use the standard assembling functions used for block matrices, but only enter in one of the blocks and still avoiding the index computations involved.
The reason for this class is, that we may need a different number of matrices for different blocks in a block system. For example, a preconditioner for the Oseen system can be built as a block system, where the pressure block is of the form M-1FA-1 with M the pressure mass matrix, A the pressure Laplacian and F the advection diffusion operator applied to the pressure space. Since only a single matrix is needed for the other blocks, using BlockSparseMatrix or similar would be a waste of memory.
While the add() functions make a MatrixBlock appear like a block matrix for assembling, the functions vmult(), Tvmult(), vmult_add(), and Tvmult_add() make it behave like a MATRIX, when it comes to applying it to a vector. This behavior allows us to store MatrixBlock objects in vectors, for instance in MGLevelObject without extracting the matrix first.
MatrixBlock comes handy when using BlockMatrixArray. Once the MatrixBlock has been properly initalized and filled, it can be used in the simplest case as:
Here, we have not gained very much, except that we do not need to set up empty blocks in the block system.
Definition at line 34 of file matrix_block.h.
typedef types::global_dof_index MatrixBlock< MATRIX >::size_type |
Declare type for container size.
Definition at line 112 of file matrix_block.h.
|
inline |
Constructor rendering an uninitialized object.
Definition at line 713 of file matrix_block.h.
|
inline |
Copy constructor.
Definition at line 722 of file matrix_block.h.
|
inline |
Constructor setting block coordinates, but not initializing the matrix.
Definition at line 735 of file matrix_block.h.
|
inline |
Reinitialize the matrix for a new BlockSparsityPattern. This adjusts the matrix as well as the row_indices and column_indices.
Definition at line 744 of file matrix_block.h.
|
inline |
Add value
to the element (i,j). Throws an error if the entry does not exist or if it is in a different block.
Definition at line 768 of file matrix_block.h.
|
inline |
Add all elements in a FullMatrix into sparse matrix locations given by indices
. This function assumes a quadratic sparse matrix and a quadratic full_matrix. The global locations are translated into locations in this block and ExcBlockIndexMismatch is thrown, if the global index does not point into the block referred to by row and column.
elide_zero_values
is currently ignored.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.
Definition at line 853 of file matrix_block.h.
|
inline |
Add all elements in a FullMatrix into global locations given by row_indices
and col_indices
, respectively. The global locations are translated into locations in this block and ExcBlockIndexMismatch is thrown, if the global index does not point into the block referred to by row and column.
elide_zero_values
is currently ignored.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.
Definition at line 792 of file matrix_block.h.
|
inline |
Set several elements in the specified row of the matrix with column indices as given by col_indices
to the respective value. This is the function doing thye actual work for the ones adding full matrices. The global locations row_index
and col_indices
are translated into locations in this block and ExcBlockIndexMismatch is thrown, if the global index does not point into the block referred to by row and column.
elide_zero_values
is currently ignored.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.
Definition at line 874 of file matrix_block.h.
|
inline |
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.
Definition at line 813 of file matrix_block.h.
|
inline |
Matrix-vector-multiplication, forwarding to the same function in MATRIX. No index computations are done, thus, the vectors need to have sizes matching matrix.
Definition at line 892 of file matrix_block.h.
|
inline |
Matrix-vector-multiplication, forwarding to the same function in MATRIX. No index computations are done, thus, the vectors need to have sizes matching matrix.
Definition at line 902 of file matrix_block.h.
|
inline |
Matrix-vector-multiplication, forwarding to the same function in MATRIX. No index computations are done, thus, the vectors need to have sizes matching matrix.
Definition at line 912 of file matrix_block.h.
|
inline |
Matrix-vector-multiplication, forwarding to the same function in MATRIX. No index computations are done, thus, the vectors need to have sizes matching matrix.
Definition at line 922 of file matrix_block.h.
|
inline |
The memory used by this object.
Definition at line 931 of file matrix_block.h.
MatrixBlock< MATRIX >::DeclException2 | ( | ExcBlockIndexMismatch | , |
size_type | , | ||
size_type | , | ||
<< "Block index "<< arg1<< " does not match "<< | arg2 | ||
) |
The block number computed from an index by using BlockIndices does not match the block coordinates stored in this object.
size_type MatrixBlock< MATRIX >::row |
Row coordinate. This is the position of the data member matrix on the global matrix.
Definition at line 359 of file matrix_block.h.
size_type MatrixBlock< MATRIX >::column |
Column coordinate. This is the position of the data member matrix on the global matrix.
Definition at line 366 of file matrix_block.h.
MATRIX MatrixBlock< MATRIX >::matrix |
The matrix itself
Definition at line 371 of file matrix_block.h.
|
private |
The rwo BlockIndices of the whole system. Using row(), this allows us to find the index of the first row degree of freedom for this block.
Definition at line 380 of file matrix_block.h.
|
private |
The column BlockIndices of the whole system. Using column(), this allows us to find the index of the first column degree of freedom for this block.
Definition at line 389 of file matrix_block.h.