Reference documentation for deal.II version 9.3.3
|
#include <deal.II/lac/sparse_decomposition.h>
Classes | |
class | AdditionalData |
Public Types | |
using | size_type = typename SparseMatrix< number >::size_type |
Public Member Functions | |
virtual | ~SparseLUDecomposition () override=0 |
virtual void | clear () override |
template<typename somenumber > | |
void | initialize (const SparseMatrix< somenumber > &matrix, const AdditionalData parameters) |
bool | empty () const |
size_type | m () const |
size_type | n () const |
template<class OutVector , class InVector > | |
void | vmult_add (OutVector &dst, const InVector &src) const |
template<class OutVector , class InVector > | |
void | Tvmult_add (OutVector &dst, const InVector &src) const |
virtual std::size_t | memory_consumption () const |
Static Public Member Functions | |
static ::ExceptionBase & | ExcInvalidStrengthening (double arg1) |
Protected Types | |
using | value_type = number |
using | real_type = typename numbers::NumberTraits< number >::real_type |
using | const_iterator = SparseMatrixIterators::Iterator< number, true > |
using | iterator = SparseMatrixIterators::Iterator< number, false > |
Protected Member Functions | |
SparseLUDecomposition () | |
template<typename somenumber > | |
void | copy_from (const SparseMatrix< somenumber > &matrix) |
virtual void | strengthen_diagonal_impl () |
virtual number | get_strengthen_diagonal (const number rowsum, const size_type row) const |
void | prebuild_lower_bound () |
Constructors and initialization | |
virtual void | reinit (const SparsityPattern &sparsity) |
Information on the matrix | |
size_type | get_row_length (const size_type row) const |
std::size_t | n_nonzero_elements () const |
std::size_t | n_actually_nonzero_elements (const double threshold=0.) const |
const SparsityPattern & | get_sparsity_pattern () const |
void | compress (::VectorOperation::values) |
Modifying entries | |
void | set (const size_type i, const size_type j, const number value) |
template<typename number2 > | |
void | set (const std::vector< size_type > &indices, const FullMatrix< number2 > &full_matrix, const bool elide_zero_values=false) |
template<typename number2 > | |
void | set (const std::vector< size_type > &row_indices, const std::vector< size_type > &col_indices, const FullMatrix< number2 > &full_matrix, const bool elide_zero_values=false) |
template<typename number2 > | |
void | set (const size_type row, const std::vector< size_type > &col_indices, const std::vector< number2 > &values, const bool elide_zero_values=false) |
template<typename number2 > | |
void | set (const size_type row, const size_type n_cols, const size_type *col_indices, const number2 *values, const bool elide_zero_values=false) |
void | add (const size_type i, const size_type j, const number value) |
template<typename number2 > | |
void | add (const std::vector< size_type > &indices, const FullMatrix< number2 > &full_matrix, const bool elide_zero_values=true) |
template<typename number2 > | |
void | add (const std::vector< size_type > &row_indices, const std::vector< size_type > &col_indices, const FullMatrix< number2 > &full_matrix, const bool elide_zero_values=true) |
template<typename number2 > | |
void | add (const size_type row, const std::vector< size_type > &col_indices, const std::vector< number2 > &values, const bool elide_zero_values=true) |
template<typename number2 > | |
void | 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) |
template<typename somenumber > | |
void | add (const number factor, const SparseMatrix< somenumber > &matrix) |
SparseMatrix & | operator*= (const number factor) |
SparseMatrix & | operator/= (const number factor) |
void | symmetrize () |
template<typename ForwardIterator > | |
void | copy_from (const ForwardIterator begin, const ForwardIterator end) |
template<typename somenumber > | |
void | copy_from (const FullMatrix< somenumber > &matrix) |
SparseMatrix< number > & | copy_from (const TrilinosWrappers::SparseMatrix &matrix) |
Entry Access | |
const number & | operator() (const size_type i, const size_type j) const |
number & | operator() (const size_type i, const size_type j) |
number | el (const size_type i, const size_type j) const |
number | diag_element (const size_type i) const |
number & | diag_element (const size_type i) |
Multiplications | |
template<class OutVector , class InVector > | |
void | vmult (OutVector &dst, const InVector &src) const |
template<class OutVector , class InVector > | |
void | Tvmult (OutVector &dst, const InVector &src) const |
template<typename somenumber > | |
somenumber | matrix_norm_square (const Vector< somenumber > &v) const |
template<typename somenumber > | |
somenumber | matrix_scalar_product (const Vector< somenumber > &u, const Vector< somenumber > &v) const |
template<typename somenumber > | |
somenumber | residual (Vector< somenumber > &dst, const Vector< somenumber > &x, const Vector< somenumber > &b) const |
template<typename numberB , typename numberC > | |
void | mmult (SparseMatrix< numberC > &C, const SparseMatrix< numberB > &B, const Vector< number > &V=Vector< number >(), const bool rebuild_sparsity_pattern=true) const |
template<typename numberB , typename numberC > | |
void | Tmmult (SparseMatrix< numberC > &C, const SparseMatrix< numberB > &B, const Vector< number > &V=Vector< number >(), const bool rebuild_sparsity_pattern=true) const |
Matrix norms | |
real_type | l1_norm () const |
real_type | linfty_norm () const |
real_type | frobenius_norm () const |
Preconditioning methods | |
template<typename somenumber > | |
void | precondition_Jacobi (Vector< somenumber > &dst, const Vector< somenumber > &src, const number omega=1.) const |
template<typename somenumber > | |
void | precondition_SSOR (Vector< somenumber > &dst, const Vector< somenumber > &src, const number omega=1., const std::vector< std::size_t > &pos_right_of_diagonal=std::vector< std::size_t >()) const |
template<typename somenumber > | |
void | precondition_SOR (Vector< somenumber > &dst, const Vector< somenumber > &src, const number om=1.) const |
template<typename somenumber > | |
void | precondition_TSOR (Vector< somenumber > &dst, const Vector< somenumber > &src, const number om=1.) const |
template<typename somenumber > | |
void | SSOR (Vector< somenumber > &v, const number omega=1.) const |
template<typename somenumber > | |
void | SOR (Vector< somenumber > &v, const number om=1.) const |
template<typename somenumber > | |
void | TSOR (Vector< somenumber > &v, const number om=1.) const |
template<typename somenumber > | |
void | 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 | 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 | Jacobi_step (Vector< somenumber > &v, const Vector< somenumber > &b, const number om=1.) const |
template<typename somenumber > | |
void | SOR_step (Vector< somenumber > &v, const Vector< somenumber > &b, const number om=1.) const |
template<typename somenumber > | |
void | TSOR_step (Vector< somenumber > &v, const Vector< somenumber > &b, const number om=1.) const |
template<typename somenumber > | |
void | SSOR_step (Vector< somenumber > &v, const Vector< somenumber > &b, const number om=1.) const |
Iterators | |
const_iterator | begin () const |
iterator | begin () |
const_iterator | begin (const size_type r) const |
iterator | begin (const size_type r) |
const_iterator | end () const |
iterator | end () |
const_iterator | end (const size_type r) const |
iterator | end (const size_type r) |
Protected Attributes | |
double | strengthen_diagonal |
std::vector< const size_type * > | prebuilt_lower_bound |
Private Attributes | |
SparsityPattern * | own_sparsity |
Related Functions | |
(Note that these are not member functions.) | |
template<typename Number > | |
void | sum (const SparseMatrix< Number > &local, const MPI_Comm &mpi_communicator, SparseMatrix< Number > &global) |
Input/Output | |
SmartPointer< const SparsityPattern, SparseMatrix< number > > | cols |
std::unique_ptr< number[]> | val |
std::size_t | max_len |
template<class StreamType > | |
void | print (StreamType &out, const bool across=false, const bool diagonal_first=true) const |
void | 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 | print_pattern (std::ostream &out, const double threshold=0.) const |
void | print_as_numpy_arrays (std::ostream &out, const unsigned int precision=9) const |
void | block_write (std::ostream &out) const |
void | block_read (std::istream &in) |
void | prepare_add () |
void | prepare_set () |
static ::ExceptionBase & | ExcInvalidIndex (int arg1, int arg2) |
static ::ExceptionBase & | ExcDifferentSparsityPatterns () |
static ::ExceptionBase & | ExcIteratorRange (int arg1, int arg2) |
static ::ExceptionBase & | ExcSourceEqualsDestination () |
Subscriptor functionality | |
Classes derived from Subscriptor provide a facility to subscribe to this object. This is mostly used by the SmartPointer class. | |
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 |
void | subscribe (std::atomic< bool > *const validity, const std::string &identifier="") const |
void | unsubscribe (std::atomic< bool > *const validity, const std::string &identifier="") const |
unsigned int | n_subscriptions () const |
template<typename StreamType > | |
void | list_subscribers (StreamType &stream) const |
void | list_subscribers () const |
template<class Archive > | |
void | serialize (Archive &ar, const unsigned int version) |
void | subscribe (std::atomic< bool > *const validity, const std::string &identifier="") const |
void | unsubscribe (std::atomic< bool > *const validity, const std::string &identifier="") const |
unsigned int | n_subscriptions () const |
template<typename StreamType > | |
void | list_subscribers (StreamType &stream) const |
void | list_subscribers () const |
template<class Archive > | |
void | serialize (Archive &ar, const unsigned int version) |
static ::ExceptionBase & | ExcInUse (int arg1, std::string arg2, std::string arg3) |
static ::ExceptionBase & | ExcNoSubscriber (std::string arg1, std::string arg2) |
static ::ExceptionBase & | ExcInUse (int arg1, std::string arg2, std::string arg3) |
static ::ExceptionBase & | ExcNoSubscriber (std::string arg1, std::string arg2) |
using | map_value_type = decltype(counter_map)::value_type |
using | map_iterator = decltype(counter_map)::iterator |
static std::mutex | mutex |
void | check_no_subscribers () const noexcept |
Abstract base class for incomplete decompositions of a sparse matrix into sparse factors. This class can't be used by itself, but only as the base class of derived classes that actually implement particular decompositions such as SparseILU or SparseMIC.
The decomposition is stored as a sparse matrix which is why this class is derived from the SparseMatrix. Since it is not a matrix in the usual sense (the stored entries are not those of a matrix, but of the two factors of the original matrix), the derivation is protected
rather than public
.
Sparse decompositions are frequently used with additional fill-in, i.e., the sparsity structure of the decomposition is denser than that of the matrix to be decomposed. The initialize() function of this class allows this fill-in via the AdditionalData object as long as all entries present in the original matrix are present in the decomposition also, i.e. the sparsity pattern of the decomposition is a superset of the sparsity pattern in the original matrix.
Such fill-in can be accomplished by various ways, one of which is the copy- constructor of the SparsityPattern class that allows the addition of side- diagonals to a given sparsity structure.
While objects of this class can not be used directly (this class is only a base class for others implementing actual decompositions), derived classes such as SparseILU and SparseMIC can be used in the usual form as preconditioners. For example, this works:
Through the AdditionalData object it is possible to specify additional parameters of the LU decomposition.
1/ The matrix diagonal can be strengthened by adding strengthen_diagonal
times the sum of the absolute row entries of each row to the respective diagonal entries. By default no strengthening is performed.
2/ By default, each initialize() function call creates its own sparsity. For that, it copies the sparsity of matrix
and adds a specific number of extra off diagonal entries specified by extra_off_diagonals
.
3/ By setting use_previous_sparsity=true
the sparsity is not recreated but the sparsity of the previous initialize() call is reused (recycled). This might be useful when several linear problems on the same sparsity need to solved, as for example several Newton iteration steps on the same triangulation. The default is false
.
4/ It is possible to give a user defined sparsity to use_this_sparsity
. Then, no sparsity is created but *use_this_sparsity
is used to store the decomposed matrix. For restrictions on the sparsity see section ‘Fill-in’ above).
It is enough to override the initialize() and vmult() methods to implement particular LU decompositions, like the true LU, or the Cholesky decomposition. Additionally, if that decomposition needs fine tuned diagonal strengthening on a per row basis, it may override the get_strengthen_diagonal() method.
Definition at line 106 of file sparse_decomposition.h.
|
inherited |
Type of the matrix entries. This alias is analogous to value_type
in the standard library containers.
Definition at line 507 of file sparse_matrix.h.
|
inherited |
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 518 of file sparse_matrix.h.
|
inherited |
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 524 of file sparse_matrix.h.
|
inherited |
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 532 of file sparse_matrix.h.
|
virtualinherited |
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 SparsityPattern &) is not called with a new sparsity structure.
The elements of the matrix are set to zero by this function.
|
inherited |
Return the number of entries in a specific row.
|
inherited |
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.
|
inherited |
Return the number of actually nonzero elements of this matrix. It is possible to specify the parameter threshold
in order to count only the elements that have absolute value greater than the threshold.
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 (or whose absolute value is greater than threshold).
|
inherited |
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.
|
inherited |
Dummy function for compatibility with distributed, parallel matrices.
|
inherited |
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.
|
inherited |
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.
|
inherited |
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.
|
inherited |
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.
|
inherited |
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.
|
inherited |
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.
|
inherited |
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.
|
inherited |
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.
|
inherited |
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.
|
inherited |
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.
|
inherited |
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.
|
inherited |
Multiply the entire matrix by a fixed factor.
|
inherited |
Divide the entire matrix by a fixed factor.
|
inherited |
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 SparsityPattern::symmetrize().
|
inherited |
This function is complete analogous to the SparsityPattern::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.
|
inherited |
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. This can be achieved using that version of SparsityPattern::copy_from() that takes a FullMatrix as argument.
|
inherited |
Copy the given Trilinos matrix to this one. The operation triggers an assertion if the sparsity patterns of the current object does not contain the location of a non-zero entry of the given argument.
This function assumes that the two matrices have the same sizes.
The function returns a reference to *this
.
|
inherited |
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.
|
inherited |
In contrast to the one above, this function allows modifying the object.
|
inherited |
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.
|
inherited |
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.
|
inherited |
Same as above, but return a writeable reference. You're sure you know what you do?
|
inherited |
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 BlockSparseMatrix as well.
Source and destination must not be the same vector.
|
inherited |
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 BlockSparseMatrix as well.
Source and destination must not be the same vector.
|
inherited |
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.
|
inherited |
Compute the matrix scalar product \(\left(u,Mv\right)\).
|
inherited |
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.
|
inherited |
Perform the matrix-matrix multiplication C = A * B
, or, if an optional vector argument is given, C = A * diag(V) * B
, where diag(V)
defines a diagonal matrix with the vector entries.
This function assumes that the calling matrix A
and the argument B
have compatible sizes. By default, the output matrix C
will be resized appropriately.
By default, i.e., if the optional argument rebuild_sparsity_pattern
is true
, the sparsity pattern of the matrix C will be changed to ensure that all entries that result from the product \(AB\) can be stored in \(C\). This is an expensive operation, and if there is a way to predict the sparsity pattern up front, you should probably build it yourself before calling this function with false
as last argument. In this case, the rebuilding of the sparsity pattern is bypassed.
When setting rebuild_sparsity_pattern
to true
(i.e., leaving it at the default value), it is important to realize that the matrix C
passed as first argument still has to be initialized with a sparsity pattern (either at the time of creation of the SparseMatrix object, or via the SparseMatrix::reinit() function). This is because we could create a sparsity pattern inside the current function, and then associate C
with it, but there would be no way to transfer ownership of this sparsity pattern to anyone once the current function finishes. Consequently, the function requires that C
be already associated with a sparsity pattern object, and this object is then reset to fit the product of A
and B
.
As a consequence of this, however, it is also important to realize that the sparsity pattern of C
is modified and that this would render invalid all other SparseMatrix objects that happen to also use that sparsity pattern object.
|
inherited |
Perform the matrix-matrix multiplication with the transpose of this
, i.e., C = AT * B
, or, if an optional vector argument is given, C = AT * diag(V) * B
, where diag(V)
defines a diagonal matrix with the vector entries.
This function assumes that the calling matrix A
and B
have compatible sizes. The size of C
will be set within this function.
The content as well as the sparsity pattern of the matrix C will be changed by this function, so make sure that the sparsity pattern is not used somewhere else in your program. This is an expensive operation, so think twice before you use this function.
There is an optional flag rebuild_sparsity_pattern
that can be used to bypass the creation of a new sparsity pattern and instead uses the sparsity pattern stored in C
. In that case, make sure that it really fits. The default is to rebuild the sparsity pattern.
|
inherited |
Return the \(l_1\)-norm of the matrix, that is \(|M|_1=\max_{\mathrm{all\ columns\ }j}\sum_{\mathrm{all\ rows\ } i} |M_{ij}|\), (max. sum of columns). This is the natural matrix norm that is compatible to the \(l_1\)-norm for vectors, i.e. \(|Mv|_1\leq |M|_1 |v|_1\). (cf. Haemmerlin- Hoffmann: Numerische Mathematik)
|
inherited |
Return the \(l_\infty\)-norm of the matrix, that is \(|M|_\infty=\max_{\mathrm{all\ rows\ }i}\sum_{\mathrm{all\ columns\ }j} |M_{ij}|\), (max. sum of rows). This is the natural matrix norm that is compatible to the \(l_\infty\)-norm of vectors, i.e. \(|Mv|_\infty \leq |M|_\infty |v|_\infty\). (cf. Haemmerlin-Hoffmann: Numerische Mathematik)
|
inherited |
Return the frobenius norm of the matrix, i.e. the square root of the sum of squares of all entries in the matrix.
|
inherited |
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
.
|
inherited |
Apply SSOR preconditioning to src
with damping omega
. The optional argument pos_right_of_diagonal
is supposed to provide an array where each entry specifies the position just right of the diagonal in the global array of nonzeros.
|
inherited |
Apply SOR preconditioning matrix to src
.
|
inherited |
Apply transpose SOR preconditioning matrix to src
.
|
inherited |
Perform SSOR preconditioning in-place. Apply the preconditioner matrix without copying to a second vector. omega
is the relaxation parameter.
|
inherited |
Perform an SOR preconditioning in-place. omega
is the relaxation parameter.
|
inherited |
Perform a transpose SOR preconditioning in-place. omega
is the relaxation parameter.
|
inherited |
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.
|
inherited |
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.
|
inherited |
Do one Jacobi step on v
. Performs a direct Jacobi step with right hand side b
. This function will need an auxiliary vector, which is acquired from GrowingVectorMemory.
|
inherited |
Do one SOR step on v
. Performs a direct SOR step with right hand side b
.
|
inherited |
Do one adjoint SOR step on v
. Performs a direct TSOR step with right hand side b
.
|
inherited |
Do one SSOR step on v
. Performs a direct SSOR step with right hand side b
by performing TSOR after SOR.
|
inherited |
Return an iterator pointing to the first element of the matrix.
Note the discussion in the general documentation of this class about the order in which elements are accessed.
|
inherited |
Like the function above, but for non-const matrices.
|
inherited |
Return an iterator pointing to the first element of row r
.
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)
. The returned iterator may not be dereferenceable in that case if neither row r
nor any of the following rows contain any nonzero entries.
|
inherited |
Like the function above, but for non-const matrices.
|
inherited |
Return an iterator pointing the element past the last one of this matrix.
|
inherited |
Like the function above, but for non-const matrices.
|
inherited |
Return an iterator pointing the element past the last one of row r
, or past the end of the entire sparsity pattern if none of the rows after r
contain any entries at all.
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.
|
inherited |
Like the function above, but for non-const matrices.
|
related |
Perform an MPI sum of the entries of a SparseMatrix.
local
and global
should have the same sparsity pattern and it should be the same for all MPI processes.