![]() |
deal.II version GIT relicensing-6834-g5b78e6bcdf 2026-10-01 11:20:01+00:00
|
#include <deal.II/lac/matrix_block.h>
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 MatrixType, 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.
Definition at line 90 of file matrix_block.h.
Public Types | |
| using | size_type = types::global_dof_index |
| using | value_type = typename MatrixType::value_type |
Public Member Functions | |
| MatrixBlock () | |
| MatrixBlock (const MatrixBlock< MatrixType > &M)=default | |
| MatrixBlock< MatrixType > & | operator= (const MatrixBlock< MatrixType > &)=default |
| MatrixBlock (size_type i, size_type j) | |
| void | reinit (const BlockSparsityPattern &sparsity) |
| operator MatrixType & () | |
| operator const MatrixType & () const | |
| void | add (const size_type i, const size_type j, const typename MatrixType::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<typename VectorType > | |
| void | vmult (VectorType &w, const VectorType &v) const |
| template<typename VectorType > | |
| void | vmult_add (VectorType &w, const VectorType &v) const |
| template<typename VectorType > | |
| void | Tvmult (VectorType &w, const VectorType &v) const |
| template<typename VectorType > | |
| void | Tvmult_add (VectorType &w, const VectorType &v) const |
| std::size_t | memory_consumption () const |
| template<class Archive > | |
| void | serialize (Archive &ar, const unsigned int version) |
Querying the observer pointers an object has. | |
| unsigned int | n_subscriptions () const |
| template<typename StreamType > | |
| void | list_subscribers (StreamType &stream) const |
| void | list_subscribers () const |
Static Public Member Functions | |
| static ::ExceptionBase & | ExcBlockIndexMismatch (size_type arg1, size_type arg2) |
| static ::ExceptionBase & | ExcInUse (int arg1, std::string arg2, std::string arg3) |
| static ::ExceptionBase & | ExcNoSubscriber (std::string arg1, std::string arg2) |
Public Attributes | |
| size_type | row |
| size_type | column |
| MatrixType | matrix |
Private Member Functions | |
| template<class OTHER_MatrixType > | |
| friend | void::internal::reinit (MatrixBlock< OTHER_MatrixType > &, const BlockSparsityPattern &) |
EnableObserverPointer functionality | |
Classes derived from EnableObserverPointer provide a facility to subscribe to this object. This is mostly used by the ObserverPointer class. | |
| void | subscribe (std::atomic< bool > *const validity, const std::string &identifier="") const |
| void | unsubscribe (std::atomic< bool > *const validity, const std::string &identifier="") const |
| void | check_no_subscribers () const noexcept |
Private Attributes | |
| BlockIndices | row_indices |
| BlockIndices | column_indices |
| std::atomic< unsigned int > | counter |
| std::map< std::string, unsigned int > | counter_map |
| std::vector< std::atomic< bool > * > | validity_pointers |
| const std::type_info * | object_info |
Static Private Attributes | |
| static std::mutex | mutex |
Friends | |
| template<typename number > | |
| void | internal::reinit (MatrixBlock<::SparseMatrix< number > > &v, const BlockSparsityPattern &p) |
| using MatrixBlock< MatrixType >::size_type = types::global_dof_index |
Declare type for container size.
Definition at line 96 of file matrix_block.h.
| using MatrixBlock< MatrixType >::value_type = typename MatrixType::value_type |
Declare a type for matrix entries.
Definition at line 101 of file matrix_block.h.
|
inline |
Constructor rendering an uninitialized object.
Definition at line 615 of file matrix_block.h.
|
default |
Copy constructor.
|
inline |
Constructor setting block coordinates, but not initializing the matrix.
Definition at line 622 of file matrix_block.h.
|
default |
Assignment operator.
|
inline |
Reinitialize the matrix for a new BlockSparsityPattern. This adjusts the matrix as well as the row_indices and column_indices.
Definition at line 630 of file matrix_block.h.
|
inline |
Definition at line 637 of file matrix_block.h.
|
inline |
Definition at line 644 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 652 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 735 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 673 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 the 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 758 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 696 of file matrix_block.h.
|
inline |
Matrix-vector-multiplication, forwarding to the same function in MatrixType. No index computations are done, thus, the vectors need to have sizes matching matrix.
Definition at line 778 of file matrix_block.h.
|
inline |
Matrix-vector-multiplication, forwarding to the same function in MatrixType. No index computations are done, thus, the vectors need to have sizes matching matrix.
Definition at line 787 of file matrix_block.h.
|
inline |
Matrix-vector-multiplication, forwarding to the same function in MatrixType. No index computations are done, thus, the vectors need to have sizes matching matrix.
Definition at line 796 of file matrix_block.h.
|
inline |
Matrix-vector-multiplication, forwarding to the same function in MatrixType. No index computations are done, thus, the vectors need to have sizes matching matrix.
Definition at line 805 of file matrix_block.h.
|
inline |
The memory used by this object.
Definition at line 813 of file matrix_block.h.
|
private |
|
inlineinherited |
Return the present number of subscriptions to this object. This allows to use this class for reference counted lifetime determination where the last one to unsubscribe also deletes the object.
Definition at line 318 of file enable_observer_pointer.h.
|
inlineinherited |
List the subscribers to the input stream.
Definition at line 335 of file enable_observer_pointer.h.
|
inherited |
List the subscribers to deallog.
Definition at line 200 of file enable_observer_pointer.cc.
|
inlineinherited |
Read or write the data of this object to or from a stream for the purpose of serialization using the BOOST serialization library.
This function does not actually serialize any of the member variables of this class. The reason is that what this class stores is only who subscribes to this object, but who does so at the time of storing the contents of this object does not necessarily have anything to do with who subscribes to the object when it is restored. Consequently, we do not want to overwrite the subscribers at the time of restoring, and then there is no reason to write the subscribers out in the first place.
Definition at line 327 of file enable_observer_pointer.h.
|
privateinherited |
Subscribes a user of the object by storing the pointer validity. The subscriber may be identified by text supplied as identifier.
Definition at line 136 of file enable_observer_pointer.cc.
|
privateinherited |
Unsubscribes a user from the object.
identifier and the validity pointer must be the same as the one supplied to subscribe(). Definition at line 154 of file enable_observer_pointer.cc.
|
privatenoexceptinherited |
Check that there are no objects subscribing to this object. If this check passes then it is safe to destroy the current object. It this check fails then this function will either abort or print an error message to deallog (by using the AssertNothrow mechanism), but will not throw an exception.
Definition at line 58 of file enable_observer_pointer.cc.
|
friend |
| size_type MatrixBlock< MatrixType >::row |
Row coordinate. This is the position of the data member matrix on the global matrix.
Definition at line 285 of file matrix_block.h.
| size_type MatrixBlock< MatrixType >::column |
Column coordinate. This is the position of the data member matrix on the global matrix.
Definition at line 290 of file matrix_block.h.
| MatrixType MatrixBlock< MatrixType >::matrix |
The matrix itself
Definition at line 295 of file matrix_block.h.
|
private |
The row 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 302 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 308 of file matrix_block.h.
|
mutableprivateinherited |
Store the number of objects which subscribed to this object. Initially, this number is zero, and upon destruction it shall be zero again (i.e. all objects which subscribed should have unsubscribed again).
The creator (and owner) of an object is counted in the map below if HE manages to supply identification.
We use the mutable keyword in order to allow subscription to constant objects also.
This counter may be read from and written to concurrently in multithreaded code: hence we use the std::atomic class template.
Definition at line 212 of file enable_observer_pointer.h.
|
mutableprivateinherited |
In this map, we count subscriptions for each different identification string supplied to subscribe().
Definition at line 218 of file enable_observer_pointer.h.
|
mutableprivateinherited |
In this vector, we store pointers to the validity bool in the ObserverPointer objects that subscribe to this class.
Definition at line 224 of file enable_observer_pointer.h.
|
mutableprivateinherited |
Pointer to the typeinfo object of this object, from which we can later deduce the class name. Since this information on the derived class is neither available in the destructor, nor in the constructor, we obtain it in between and store it here.
Definition at line 232 of file enable_observer_pointer.h.
|
staticprivateinherited |
A mutex used to ensure data consistency when accessing the mutable members of this class. This lock is used in the subscribe() and unsubscribe() functions, as well as in list_subscribers().
Definition at line 239 of file enable_observer_pointer.h.