dune-istl
2.3.1
|
A block-diagonal matrix. More...
#include <dune/istl/bdmatrix.hh>
Public Types | |
enum | { blocklevel = B::blocklevel+1 } |
increment block level counter More... | |
typedef B::field_type | field_type |
export the type representing the field | |
typedef B | block_type |
export the type representing the components | |
typedef A | allocator_type |
export the allocator type | |
typedef A::size_type | size_type |
implement row_type with compressed vector | |
enum | BuildStage { notbuilt = 0, notAllocated = 0, building = 1, rowSizesBuilt = 2, built = 3 } |
enum | { blocklevel = B::blocklevel+1 } |
increment block level counter More... | |
enum | BuildMode { row_wise, random, implicit, unknown } |
we support two modes More... | |
typedef CompressedBlockVectorWindow< B, A > | row_type |
implement row_type with compressed vector | |
typedef ::Dune::CompressionStatistics < size_type > | CompressionStatistics |
The type for the statistics object returned by compress() | |
typedef RealRowIterator< row_type > | iterator |
The iterator over the (mutable matrix rows. | |
typedef RealRowIterator< row_type > | Iterator |
typedef Iterator | RowIterator |
rename the iterators for easier access | |
typedef row_type::Iterator | ColIterator |
Iterator for the entries of each row. | |
typedef RealRowIterator< const row_type > | const_iterator |
The const iterator over the matrix rows. | |
typedef RealRowIterator< const row_type > | ConstIterator |
typedef ConstIterator | ConstRowIterator |
rename the const row iterator for easier access | |
typedef row_type::ConstIterator | ConstColIterator |
Const iterator to the entries of a row. |
Public Member Functions | |
BDMatrix () | |
Default constructor. | |
BDMatrix (int size) | |
BDMatrix & | operator= (const BDMatrix &other) |
assignment | |
BDMatrix & | operator= (const field_type &k) |
assignment from scalar | |
void | invert () |
Inverts the matrix. | |
row_type & | operator[] (size_type i) |
random access to the rows | |
const row_type & | operator[] (size_type i) const |
same for read only access | |
Iterator | begin () |
Get iterator to first row. | |
ConstIterator | begin () const |
Get const iterator to first row. | |
Iterator | end () |
Get iterator to one beyond last row. | |
ConstIterator | end () const |
Get const iterator to one beyond last row. | |
Iterator | beforeEnd () |
ConstIterator | beforeEnd () const |
Iterator | beforeBegin () |
ConstIterator | beforeBegin () const |
void | setBuildMode (BuildMode bm) |
Sets the build mode of the matrix. | |
void | setSize (size_type rows, size_type columns, size_type nnz=0) |
Set the size of the matrix. | |
void | setImplicitBuildModeParameters (size_type _avg, double _overflow) |
Set parameters needed for creation in implicit build mode. | |
CreateIterator | createbegin () |
get initial create iterator | |
CreateIterator | createend () |
get create iterator pointing to one after the last block | |
size_type | getrowsize (size_type i) const |
get current number of indices in row i | |
void | incrementrowsize (size_type i, size_type s=1) |
increment size of row i by s (1 by default) | |
template<typename It > | |
void | setIndices (size_type row, It begin, It end) |
Set all column indices for row from the given iterator range. | |
B & | entry (size_type row, size_type col) |
Returns reference to entry (row,col) of the matrix. | |
CompressionStatistics | compress () |
Finishes the buildstage in implicit mode. | |
BCRSMatrix & | operator*= (const field_type &k) |
vector space multiplication with scalar | |
BCRSMatrix & | operator/= (const field_type &k) |
vector space division by scalar | |
BCRSMatrix & | operator+= (const BCRSMatrix &b) |
Add the entries of another matrix to this one. | |
BCRSMatrix & | operator-= (const BCRSMatrix &b) |
Substract the entries of another matrix to this one. | |
BCRSMatrix & | axpy (field_type alpha, const BCRSMatrix &b) |
Add the scaled entries of another matrix to this one. | |
template<class X , class Y > | |
void | mv (const X &x, Y &y) const |
y = A x | |
template<class X , class Y > | |
void | umv (const X &x, Y &y) const |
y += A x | |
template<class X , class Y > | |
void | mmv (const X &x, Y &y) const |
y -= A x | |
template<class X , class Y > | |
void | usmv (const field_type &alpha, const X &x, Y &y) const |
y += alpha A x | |
template<class X , class Y > | |
void | mtv (const X &x, Y &y) const |
y = A^T x | |
template<class X , class Y > | |
void | umtv (const X &x, Y &y) const |
y += A^T x | |
template<class X , class Y > | |
void | mmtv (const X &x, Y &y) const |
y -= A^T x | |
template<class X , class Y > | |
void | usmtv (const field_type &alpha, const X &x, Y &y) const |
y += alpha A^T x | |
template<class X , class Y > | |
void | umhv (const X &x, Y &y) const |
y += A^H x | |
template<class X , class Y > | |
void | mmhv (const X &x, Y &y) const |
y -= A^H x | |
template<class X , class Y > | |
void | usmhv (const field_type &alpha, const X &x, Y &y) const |
y += alpha A^H x | |
FieldTraits< field_type > ::real_type | frobenius_norm2 () const |
square of frobenius norm, need for block recursion | |
FieldTraits< field_type > ::real_type | frobenius_norm () const |
frobenius norm: sqrt(sum over squared values of entries) | |
FieldTraits< field_type > ::real_type | infinity_norm () const |
infinity norm (row sum norm, how to generalize for blocks?) | |
FieldTraits< field_type > ::real_type | infinity_norm_real () const |
simplified infinity norm (uses Manhattan norm for complex values) | |
size_type | N () const |
number of rows (counted in blocks) | |
size_type | M () const |
number of columns (counted in blocks) | |
size_type | nonzeroes () const |
number of blocks that are stored (the number of blocks that possibly are nonzero) | |
BuildStage | buildStage () const |
The current build stage of the matrix. | |
BuildMode | buildMode () const |
The currently selected build mode of the matrix. | |
bool | exists (size_type i, size_type j) const |
return true if (i,j) is in pattern |
A block-diagonal matrix.
typedef A Dune::BDMatrix< B, A >::allocator_type |
export the allocator type
typedef B Dune::BDMatrix< B, A >::block_type |
export the type representing the components
|
inherited |
Iterator for the entries of each row.
|
inherited |
The type for the statistics object returned by compress()
|
inherited |
The const iterator over the matrix rows.
|
inherited |
Const iterator to the entries of a row.
|
inherited |
|
inherited |
rename the const row iterator for easier access
typedef B::field_type Dune::BDMatrix< B, A >::field_type |
export the type representing the field
|
inherited |
The iterator over the (mutable matrix rows.
|
inherited |
|
inherited |
implement row_type with compressed vector
|
inherited |
rename the iterators for easier access
typedef A::size_type Dune::BDMatrix< B, A >::size_type |
implement row_type with compressed vector
The type for the index access and the size
|
inherited |
anonymous enum |
|
inherited |
we support two modes
row_wise |
Build in a row-wise manner. Rows are built up in sequential order. Size of the row and the column indices are defined. A row can be used as soon as it is initialized. With respect to memory there are two variants of this scheme: (a) number of non-zeroes known in advance (application finite difference schemes), (b) number of non-zeroes not known in advance (application: Sparse LU, ILU(n)). |
random |
Build entries randomly. For general finite element implementations the number of rows n is known, the number of non-zeroes might also be known (e.g. #edges + #nodes for P1) but the size of a row and the indices of a row can not be defined in sequential order. |
implicit |
Build entries randomly with an educated guess on entries per row. Allows random order generation as in random mode, but row sizes do not need to be given first. Instead an average number of non-zeroes per row is passed to the constructor. Matrix setup is finished with compress(), full data access during build stage is possible. |
unknown |
Build mode not set! |
|
inherited |
notbuilt |
Matrix is not built at all, no memory has been allocated, build mode and size can still be set. |
notAllocated |
Matrix is not built at all, no memory has been allocated, build mode and size can still be set. |
building |
Matrix is currently being built, some memory has been allocated, build mode and size are fixed. |
rowSizesBuilt |
The row sizes of the matrix are known. Only used in random mode. |
built |
The matrix structure is fully built. |
|
inline |
Default constructor.
|
inlineexplicit |
|
inlineinherited |
Add the scaled entries of another matrix to this one.
Matrix axpy operation: *this += alpha * b
alpha | Scaling factor. |
b | The matrix to add to this one. Its sparsity pattern has to be subset of the sparsity pattern of this matrix. |
References Dune::BCRSMatrix< B, A >::begin(), Dune::BCRSMatrix< B, A >::built, Dune::BCRSMatrix< B, A >::end(), Dune::BCRSMatrix< B, A >::M(), and Dune::BCRSMatrix< B, A >::N().
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
|
inlineinherited |
Get iterator to first row.
Referenced by Dune::SeqOverlappingSchwarzAssemblerHelper< S< BCRSMatrix< FieldMatrix< T, m, n >, A > >, true >::assembleLocalProblems(), Dune::BCRSMatrix< B, A >::axpy(), Dune::MatrixDimension< BCRSMatrix< B, TA > >::coldim(), Dune::BCRSMatrix< B, A >::compress(), Dune::BCRSMatrix< B, A >::endindices(), Dune::BCRSMatrix< B, A >::endrowsizes(), Dune::BCRSMatrix< B, A >::entry(), Dune::BCRSMatrix< B, A >::frobenius_norm2(), Dune::BCRSMatrix< B, A >::infinity_norm(), Dune::BCRSMatrix< B, A >::infinity_norm_real(), Dune::BCRSMatrix< B, A >::mmhv(), Dune::BCRSMatrix< B, A >::mmtv(), Dune::BCRSMatrix< B, A >::mmv(), Dune::BCRSMatrix< B, A >::mv(), Dune::BCRSMatrix< B, A >::operator*=(), Dune::BCRSMatrix< B, A >::operator+=(), Dune::BCRSMatrix< B, A >::operator-=(), Dune::BCRSMatrix< B, A >::operator/=(), test_IO(), test_Iter(), Dune::BCRSMatrix< B, A >::umhv(), Dune::BCRSMatrix< B, A >::umtv(), Dune::BCRSMatrix< B, A >::umv(), Dune::BCRSMatrix< B, A >::usmhv(), Dune::BCRSMatrix< B, A >::usmtv(), and Dune::BCRSMatrix< B, A >::usmv().
|
inlineinherited |
Get const iterator to first row.
|
inlineinherited |
The currently selected build mode of the matrix.
|
inlineinherited |
The current build stage of the matrix.
|
inlineinherited |
Finishes the buildstage in implicit mode.
Performs compression of index and data arrays with linear complexity in the number of nonzeroes.
After calling this method, the matrix is in the built state and no more entries can be added.
References Dune::CompressionStatistics< size_type >::avg, Dune::BCRSMatrix< B, A >::begin(), Dune::BCRSMatrix< B, A >::building, Dune::BCRSMatrix< B, A >::built, Dune::CompressedBlockVectorWindow< B, A >::getindexptr(), Dune::CompressedBlockVectorWindow< B, A >::getsize(), Dune::BCRSMatrix< B, A >::implicit, Dune::CompressionStatistics< size_type >::maximum, Dune::CompressionStatistics< size_type >::mem_ratio, Dune::BCRSMatrix< B, A >::notAllocated, Dune::CompressionStatistics< size_type >::overflow_total, Dune::CompressedBlockVectorWindow< B, A >::setindexptr(), Dune::CompressedBlockVectorWindow< B, A >::setptr(), and Dune::CompressedBlockVectorWindow< B, A >::setsize().
|
inlineinherited |
get initial create iterator
References Dune::BCRSMatrix< B, A >::CreateIterator.
Referenced by test_IO(), and test_Iter().
|
inlineinherited |
get create iterator pointing to one after the last block
References Dune::BCRSMatrix< B, A >::CreateIterator.
Referenced by test_IO(), and test_Iter().
|
inlineinherited |
Get iterator to one beyond last row.
Referenced by Dune::BCRSMatrix< B, A >::addindex(), Dune::BCRSMatrix< B, A >::axpy(), Dune::MatrixDimension< BCRSMatrix< B, TA > >::coldim(), Dune::BCRSMatrix< B, A >::endindices(), Dune::BCRSMatrix< B, A >::entry(), Dune::BCRSMatrix< B, A >::exists(), Dune::BCRSMatrix< B, A >::frobenius_norm2(), Dune::BCRSMatrix< B, A >::infinity_norm(), Dune::BCRSMatrix< B, A >::infinity_norm_real(), Dune::BCRSMatrix< B, A >::mmhv(), Dune::BCRSMatrix< B, A >::mmtv(), Dune::BCRSMatrix< B, A >::mmv(), Dune::BCRSMatrix< B, A >::mv(), Dune::BCRSMatrix< B, A >::operator*=(), Dune::BCRSMatrix< B, A >::operator+=(), Dune::BCRSMatrix< B, A >::operator-=(), Dune::BCRSMatrix< B, A >::operator/=(), Dune::DynamicMatrixSubdomainSolver< BCRSMatrix< FieldMatrix< K, n, n >, Al >, X, Y >::setSubMatrix(), test_IO(), test_Iter(), Dune::BCRSMatrix< B, A >::umhv(), Dune::BCRSMatrix< B, A >::umtv(), Dune::BCRSMatrix< B, A >::umv(), Dune::BCRSMatrix< B, A >::usmhv(), Dune::BCRSMatrix< B, A >::usmtv(), and Dune::BCRSMatrix< B, A >::usmv().
|
inlineinherited |
Get const iterator to one beyond last row.
|
inlineinherited |
Returns reference to entry (row,col) of the matrix.
This method can only be used when the matrix is in implicit building mode.
A reference to entry (row, col) of the matrix is returned. If entry (row, col) is accessed for the first time, it is created on the fly.
This method can only be used while building the matrix, after compression operator[] gives a much better performance.
References Dune::BCRSMatrix< B, A >::begin(), Dune::BCRSMatrix< B, A >::building, Dune::BCRSMatrix< B, A >::built, col, Dune::BCRSMatrix< B, A >::end(), Dune::CompressedBlockVectorWindow< B, A >::getindexptr(), Dune::CompressedBlockVectorWindow< B, A >::getptr(), Dune::CompressedBlockVectorWindow< B, A >::getsize(), Dune::BCRSMatrix< B, A >::implicit, Dune::BCRSMatrix< B, A >::notAllocated, row, and Dune::CompressedBlockVectorWindow< B, A >::setsize().
|
inlineinherited |
return true if (i,j) is in pattern
References Dune::BCRSMatrix< B, A >::end().
|
inlineinherited |
frobenius norm: sqrt(sum over squared values of entries)
References Dune::BCRSMatrix< B, A >::frobenius_norm2().
|
inlineinherited |
square of frobenius norm, need for block recursion
References Dune::BCRSMatrix< B, A >::begin(), Dune::BCRSMatrix< B, A >::built, and Dune::BCRSMatrix< B, A >::end().
Referenced by Dune::BCRSMatrix< B, A >::frobenius_norm().
|
inlineinherited |
get current number of indices in row i
References Dune::CompressedBlockVectorWindow< B, A >::getsize().
|
inlineinherited |
increment size of row i by s (1 by default)
References Dune::BCRSMatrix< B, A >::building, Dune::BCRSMatrix< B, A >::random, and Dune::CompressedBlockVectorWindow< B, A >::setsize().
|
inlineinherited |
infinity norm (row sum norm, how to generalize for blocks?)
References Dune::BCRSMatrix< B, A >::begin(), Dune::BCRSMatrix< B, A >::built, and Dune::BCRSMatrix< B, A >::end().
|
inlineinherited |
simplified infinity norm (uses Manhattan norm for complex values)
References Dune::BCRSMatrix< B, A >::begin(), Dune::BCRSMatrix< B, A >::built, and Dune::BCRSMatrix< B, A >::end().
|
inline |
Inverts the matrix.
References Dune::BCRSMatrix< B, A >::N().
|
inlineinherited |
number of columns (counted in blocks)
Referenced by Dune::BCRSMatrix< B, A >::axpy(), Dune::MatrixDimension< BCRSMatrix< B, TA > >::coldim(), Dune::MatrixDimension< BCRSMatrix< FieldMatrix< B, n, m >, TA > >::coldim(), Dune::BCRSMatrix< B, A >::mmhv(), Dune::BCRSMatrix< B, A >::mmtv(), Dune::BCRSMatrix< B, A >::mmv(), Dune::BCRSMatrix< B, A >::mtv(), Dune::BCRSMatrix< B, A >::mv(), Dune::BCRSMatrix< B, A >::operator+=(), Dune::BCRSMatrix< B, A >::operator-=(), Dune::SuperLUMatrix< BCRSMatrix< FieldMatrix< B, n, m >, TA > >::setMatrix(), Dune::BCRSMatrix< B, A >::umhv(), Dune::BCRSMatrix< B, A >::umtv(), Dune::BCRSMatrix< B, A >::umv(), Dune::BCRSMatrix< B, A >::usmhv(), Dune::BCRSMatrix< B, A >::usmtv(), and Dune::BCRSMatrix< B, A >::usmv().
|
inlineinherited |
|
inlineinherited |
y -= A^T x
References Dune::BCRSMatrix< B, A >::begin(), Dune::BCRSMatrix< B, A >::end(), Dune::BCRSMatrix< B, A >::M(), and Dune::BCRSMatrix< B, A >::N().
|
inlineinherited |
y -= A x
References Dune::BCRSMatrix< B, A >::begin(), Dune::BCRSMatrix< B, A >::built, Dune::BCRSMatrix< B, A >::end(), Dune::BCRSMatrix< B, A >::M(), and Dune::BCRSMatrix< B, A >::N().
Referenced by test_Iter().
|
inlineinherited |
y = A^T x
References Dune::BCRSMatrix< B, A >::built, Dune::BCRSMatrix< B, A >::M(), Dune::BCRSMatrix< B, A >::N(), and Dune::BCRSMatrix< B, A >::umtv().
|
inlineinherited |
|
inlineinherited |
number of rows (counted in blocks)
Referenced by Dune::BCRSMatrix< B, A >::axpy(), Dune::MatrixDimension< BCRSMatrix< B, TA > >::coldim(), Dune::BDMatrix< B, A >::invert(), Dune::BCRSMatrix< B, A >::mmhv(), Dune::BCRSMatrix< B, A >::mmtv(), Dune::BCRSMatrix< B, A >::mmv(), Dune::BCRSMatrix< B, A >::mtv(), Dune::BCRSMatrix< B, A >::mv(), Dune::BCRSMatrix< B, A >::operator+=(), Dune::BCRSMatrix< B, A >::operator-=(), Dune::MatrixDimension< BCRSMatrix< B, TA > >::rowdim(), Dune::MatrixDimension< BCRSMatrix< FieldMatrix< B, n, m >, TA > >::rowdim(), Dune::SuperLUMatrix< BCRSMatrix< FieldMatrix< B, n, m >, TA > >::setMatrix(), Dune::BTDMatrix< B, A >::solve(), Dune::BCRSMatrix< B, A >::umhv(), Dune::BCRSMatrix< B, A >::umtv(), Dune::BCRSMatrix< B, A >::umv(), Dune::BCRSMatrix< B, A >::usmhv(), Dune::BCRSMatrix< B, A >::usmtv(), and Dune::BCRSMatrix< B, A >::usmv().
|
inlineinherited |
number of blocks that are stored (the number of blocks that possibly are nonzero)
|
inlineinherited |
vector space multiplication with scalar
References Dune::BCRSMatrix< B, A >::begin(), Dune::BCRSMatrix< B, A >::built, and Dune::BCRSMatrix< B, A >::end().
|
inlineinherited |
Add the entries of another matrix to this one.
b | The matrix to add to this one. Its sparsity pattern has to be subset of the sparsity pattern of this matrix. |
References Dune::BCRSMatrix< B, A >::begin(), Dune::BCRSMatrix< B, A >::built, Dune::BCRSMatrix< B, A >::end(), Dune::BCRSMatrix< B, A >::M(), and Dune::BCRSMatrix< B, A >::N().
|
inlineinherited |
Substract the entries of another matrix to this one.
b | The matrix to add to this one. Its sparsity pattern has to be subset of the sparsity pattern of this matrix. |
References Dune::BCRSMatrix< B, A >::begin(), Dune::BCRSMatrix< B, A >::built, Dune::BCRSMatrix< B, A >::end(), Dune::BCRSMatrix< B, A >::M(), and Dune::BCRSMatrix< B, A >::N().
|
inlineinherited |
vector space division by scalar
References Dune::BCRSMatrix< B, A >::begin(), Dune::BCRSMatrix< B, A >::built, and Dune::BCRSMatrix< B, A >::end().
|
inline |
assignment
Referenced by Dune::BDMatrix< B, A >::operator=().
|
inline |
assignment from scalar
Reimplemented from Dune::BCRSMatrix< B, A >.
References Dune::BDMatrix< B, A >::operator=().
|
inlineinherited |
random access to the rows
References Dune::BCRSMatrix< B, A >::built, and Dune::BCRSMatrix< B, A >::implicit.
|
inlineinherited |
same for read only access
References Dune::BCRSMatrix< B, A >::built, and Dune::BCRSMatrix< B, A >::implicit.
|
inlineinherited |
Sets the build mode of the matrix.
bm | The build mode to use. |
References Dune::BCRSMatrix< B, A >::building, Dune::BCRSMatrix< B, A >::notAllocated, Dune::BCRSMatrix< B, A >::random, Dune::BCRSMatrix< B, A >::row_wise, and Dune::BCRSMatrix< B, A >::unknown.
|
inlineinherited |
Set parameters needed for creation in implicit build mode.
Use this method before setSize() to define storage behaviour of a matrix in implicit build mode
_avg | expected average number of entries per row |
_overflowsize | fraction of _n*_avg which is expected to be needed for elements that exceed _avg entries per row. |
References Dune::BCRSMatrix< B, A >::notAllocated.
|
inlineinherited |
Set all column indices for row from the given iterator range.
The iterator range has to be of the same length as the previously set row size. The entries in the iterator range do not have to be in any particular order, but must not contain duplicate values.
Calling this method overwrites any previously set column indices!
References Dune::CompressedBlockVectorWindow< B, A >::getindexptr(), row, and Dune::compressed_base_array_unmanaged< B, A >::size().
|
inlineinherited |
Set the size of the matrix.
Sets the number of rows and columns of the matrix and allocates the memory needed for the storage of the matrix entries.
rows | The number of rows the matrix should contain. |
columns | the number of columns the matrix should contain. |
nnz | The number of nonzero entries the matrix should hold (if omitted defaults to 0). Must be omitted in implicit mode. |
References Dune::BCRSMatrix< B, A >::implicit.
|
inlineinherited |
|
inlineinherited |
y += A^T x
References Dune::BCRSMatrix< B, A >::begin(), Dune::BCRSMatrix< B, A >::built, Dune::BCRSMatrix< B, A >::end(), Dune::BCRSMatrix< B, A >::M(), and Dune::BCRSMatrix< B, A >::N().
Referenced by Dune::BCRSMatrix< B, A >::mtv().
|
inlineinherited |
y += A x
References Dune::BCRSMatrix< B, A >::begin(), Dune::BCRSMatrix< B, A >::built, Dune::BCRSMatrix< B, A >::end(), Dune::BCRSMatrix< B, A >::M(), and Dune::BCRSMatrix< B, A >::N().
Referenced by test_Iter().
|
inlineinherited |
y += alpha A^H x
References Dune::BCRSMatrix< B, A >::begin(), Dune::BCRSMatrix< B, A >::built, Dune::BCRSMatrix< B, A >::end(), Dune::BCRSMatrix< B, A >::M(), and Dune::BCRSMatrix< B, A >::N().
|
inlineinherited |
y += alpha A^T x
References Dune::BCRSMatrix< B, A >::begin(), Dune::BCRSMatrix< B, A >::built, Dune::BCRSMatrix< B, A >::end(), Dune::BCRSMatrix< B, A >::M(), and Dune::BCRSMatrix< B, A >::N().
|
inlineinherited |
y += alpha A x
References Dune::BCRSMatrix< B, A >::begin(), Dune::BCRSMatrix< B, A >::built, Dune::BCRSMatrix< B, A >::end(), Dune::BCRSMatrix< B, A >::M(), and Dune::BCRSMatrix< B, A >::N().