
Public Types | |
| typedef number | value_type |
| typedef internals::SparseMatrixIterators::Iterator < number, true > | const_iterator |
| typedef internals::SparseMatrixIterators::Iterator < number, false > | iterator |
Public Member Functions | |
Constructors and initalization. | |
| SparseMatrix () | |
| SparseMatrix (const SparseMatrix &) | |
| SparseMatrix (const SparsityPattern &sparsity) | |
| SparseMatrix (const SparsityPattern &sparsity, const IdentityMatrix &id) | |
| virtual | ~SparseMatrix () |
| SparseMatrix< number > & | operator= (const SparseMatrix< number > &) |
| SparseMatrix< number > & | operator= (const IdentityMatrix &id) |
| SparseMatrix & | operator= (const double d) |
| virtual void | reinit (const SparsityPattern &sparsity) |
| virtual void | clear () |
Information on the matrix | |
| bool | empty () const |
| unsigned int | m () const |
| unsigned int | n () const |
| unsigned int | n_nonzero_elements () const |
| unsigned int | n_actually_nonzero_elements () const |
| const SparsityPattern & | get_sparsity_pattern () const |
| unsigned int | memory_consumption () const |
Modifying entries | |
| void | set (const unsigned int i, const unsigned int j, const number value) |
| void | add (const unsigned int i, const unsigned int j, const number value) |
| SparseMatrix & | operator*= (const number factor) |
| SparseMatrix & | operator/= (const number factor) |
| void | symmetrize () |
| template<typename somenumber> | |
| SparseMatrix< number > & | copy_from (const SparseMatrix< somenumber > &source) |
| template<typename ForwardIterator> | |
| void | copy_from (const ForwardIterator begin, const ForwardIterator end) |
| template<typename somenumber> | |
| void | copy_from (const FullMatrix< somenumber > &matrix) |
| template<typename somenumber> | |
| void | add (const number factor, const SparseMatrix< somenumber > &matrix) |
Entry Access | |
| number | operator() (const unsigned int i, const unsigned int j) const |
| number | el (const unsigned int i, const unsigned int j) const |
| number | diag_element (const unsigned int i) const |
| number & | diag_element (const unsigned int i) |
| number | raw_entry (const unsigned int row, const unsigned int index) const |
| number | global_entry (const unsigned int i) const |
| number & | global_entry (const unsigned int i) |
Matrix vector 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<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 |
| 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 |
Matrix norms | |
| number | l1_norm () const |
| number | linfty_norm () const |
| number | 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 om=1.) 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< unsigned int > &permutation, const std::vector< unsigned int > &inverse_permutation, const number om=1.) const |
| template<typename somenumber> | |
| void | TPSOR (Vector< somenumber > &v, const std::vector< unsigned int > &permutation, const std::vector< unsigned int > &inverse_permutation, 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 |
| const_iterator | end () const |
| iterator | begin () |
| iterator | end () |
| const_iterator | begin (const unsigned int r) const |
| const_iterator | end (const unsigned int r) const |
| iterator | begin (const unsigned int r) |
| iterator | end (const unsigned int r) |
Input/Output | |
| void | print (std::ostream &out) 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 | block_write (std::ostream &out) const |
| void | block_read (std::istream &in) |
Private Member Functions | |
| template<class OutVector, class InVector> | |
| void | threaded_vmult (OutVector &dst, const InVector &src, const unsigned int begin_row, const unsigned int end_row) const |
| template<typename somenumber> | |
| void | threaded_matrix_norm_square (const Vector< somenumber > &v, const unsigned int begin_row, const unsigned int end_row, somenumber *partial_sum) const |
| template<typename somenumber> | |
| void | threaded_matrix_scalar_product (const Vector< somenumber > &u, const Vector< somenumber > &v, const unsigned int begin_row, const unsigned int end_row, somenumber *partial_sum) const |
| template<typename somenumber> | |
| void | threaded_residual (Vector< somenumber > &dst, const Vector< somenumber > &u, const Vector< somenumber > &b, const std::pair< unsigned int, unsigned int > interval, somenumber *partial_norm) const |
Private Attributes | |
| SmartPointer< const SparsityPattern > | cols |
| number * | val |
| unsigned int | max_len |
Friends | |
| class | SparseMatrix |
Classes | |
| class | ExcDifferentSparsityPatterns |
| class | ExcInvalidIndex |
| class | ExcInvalidIndex1 |
| class | ExcIteratorRange |
| class | ExcSourceEqualsDestination |
| struct | Traits |
<float> and <double>; others can be generated in application programs (see the section on Template instantiations in the manual).| typedef number SparseMatrix< number >::value_type |
Type of matrix entries. In analogy to the STL container classes.
| typedef internals::SparseMatrixIterators::Iterator<number,true> SparseMatrix< number >::const_iterator |
Typedef of an STL conforming iterator class walking over all the nonzero entries of this matrix. This iterator cannot change the values of the matrix.
| typedef internals::SparseMatrixIterators::Iterator<number,false> SparseMatrix< number >::iterator |
Typedef of an STL conforming 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.
| SparseMatrix< number >::SparseMatrix | ( | ) |
Constructor; initializes the matrix to be empty, without any structure, i.e. the matrix is not usable at all. This constructor is therefore only useful for matrices which are members of a class. All other matrices should be created at a point in the data flow where all necessary information is available.
You have to initialize the matrix before usage with reinit(const SparsityPattern&).
| SparseMatrix< number >::SparseMatrix | ( | const SparseMatrix< number > & | ) |
Copy constructor. This constructor is only allowed to be called if the matrix to be copied is empty. This is for the same reason as for the SparsityPattern, see there for the details.
If you really want to copy a whole matrix, you can do so by using the copy_from() function.
| SparseMatrix< number >::SparseMatrix | ( | const SparsityPattern & | sparsity | ) | [explicit] |
Constructor. Takes the given matrix sparsity structure to represent the sparsity pattern of this matrix. You can change the sparsity pattern later on by calling the reinit(const SparsityPattern&) function.
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 pattern.
The constructor is marked explicit so as to disallow that someone passes a sparsity pattern in place of a sparse matrix to some function, where an empty matrix would be generated then.
| SparseMatrix< number >::SparseMatrix | ( | const SparsityPattern & | sparsity, | |
| const IdentityMatrix & | id | |||
| ) |
Copy constructor: initialize the matrix with the identity matrix. This constructor will throw an exception if the sizes of the sparsity pattern and the identity matrix do not coincide, or if the sparsity pattern does not provide for nonzero entries on the entire diagonal.
| virtual SparseMatrix< number >::~SparseMatrix | ( | ) | [virtual] |
Destructor. Free all memory, but do not release the memory of the sparsity structure.
| SparseMatrix<number>& SparseMatrix< number >::operator= | ( | const SparseMatrix< number > & | ) |
Copy operator. Since copying entire sparse matrices is a very expensive operation, we disallow doing so except for the special case of empty matrices of size zero. This doesn't seem particularly useful, but is exactly what one needs if one wanted to have a std::vector<SparseMatrix<double> >: in that case, one can create a vector (which needs the ability to copy objects) of empty matrices that are then later filled with something useful.
| SparseMatrix<number>& SparseMatrix< number >::operator= | ( | const IdentityMatrix & | id | ) |
Copy operator: initialize the matrix with the identity matrix. This operator will throw an exception if the sizes of the sparsity pattern and the identity matrix do not coincide, or if the sparsity pattern does not provide for nonzero entries on the entire diagonal.
| SparseMatrix& SparseMatrix< number >::operator= | ( | const double | d | ) |
This operator assigns a scalar to a matrix. Since this does usually not make much sense (should we set all matrix entries to this value? Only the nonzero entries of the sparsity pattern?), this operation is only allowed if the actual value to be assigned is zero. This operator only exists to allow for the obvious notation matrix=0, which sets all elements of the matrix to zero, but keep the sparsity pattern previously used.
| virtual void SparseMatrix< number >::reinit | ( | const SparsityPattern & | sparsity | ) | [virtual] |
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.
Reimplemented in SparseLUDecomposition< number >, and SparseMIC< number >.
| virtual void SparseMatrix< number >::clear | ( | ) | [virtual] |
Release all memory and return to a state just like after having called the default constructor. It also forgets the sparsity pattern it was previously tied to.
Reimplemented in SparseLUDecomposition< number >, and SparseMIC< number >.
| bool SparseMatrix< number >::empty | ( | ) | const |
Return whether the object is empty. It is empty if either both dimensions are zero or no SparsityPattern is associated.
Reimplemented in SparseLUDecomposition< number >.
| unsigned int SparseMatrix< number >::m | ( | ) | const |
Return the dimension of the image space. To remember: the matrix is of dimension
.
| unsigned int SparseMatrix< number >::n | ( | ) | const |
Return the dimension of the range space. To remember: the matrix is of dimension
.
| unsigned int SparseMatrix< number >::n_nonzero_elements | ( | ) | const |
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.
| unsigned int SparseMatrix< number >::n_actually_nonzero_elements | ( | ) | const |
Return the number of actually nonzero elements of this matrix.
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.
| const SparsityPattern& SparseMatrix< number >::get_sparsity_pattern | ( | ) | const |
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.
| unsigned int SparseMatrix< number >::memory_consumption | ( | ) | const |
Determine an estimate for the memory consumption (in bytes) of this object. See MemoryConsumption.
Reimplemented in SparseLUDecomposition< number >, SparseILU< number >, and SparseMIC< number >.
| void SparseMatrix< number >::set | ( | const unsigned int | i, | |
| const unsigned int | j, | |||
| const number | value | |||
| ) |
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.
| void SparseMatrix< number >::add | ( | const unsigned int | i, | |
| const unsigned int | j, | |||
| const number | value | |||
| ) |
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.
| SparseMatrix& SparseMatrix< number >::operator*= | ( | const number | factor | ) |
Multiply the entire matrix by a fixed factor.
| SparseMatrix& SparseMatrix< number >::operator/= | ( | const number | factor | ) |
Divide the entire matrix by a fixed factor.
| void SparseMatrix< number >::symmetrize | ( | ) |
Symmetrize the matrix by forming the mean value between the existing matrix and its transpose,
.
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().
| SparseMatrix<number>& SparseMatrix< number >::copy_from | ( | const SparseMatrix< somenumber > & | source | ) | [inline] |
Copy the given matrix to this one. The operation throws an error if the sparsity patterns of the two involved matrices do not point to the same object, since in this case the copy operation is cheaper. Since this operation is notheless not for free, we do not make it available through operator =, since this may lead to unwanted usage, e.g. in copy arguments to functions, which should really be arguments by reference.
The source matrix may be a matrix of arbitrary type, as long as its data type is convertible to the data type of this matrix.
The function returns a reference to *this.
Reimplemented in SparseLUDecomposition< number >.
| void SparseMatrix< number >::copy_from | ( | const ForwardIterator | begin, | |
| const ForwardIterator | end | |||
| ) | [inline] |
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.
| void SparseMatrix< number >::copy_from | ( | const FullMatrix< somenumber > & | matrix | ) | [inline] |
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.
| void SparseMatrix< number >::add | ( | const number | factor, | |
| const SparseMatrix< somenumber > & | matrix | |||
| ) | [inline] |
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.
| number SparseMatrix< number >::operator() | ( | const unsigned int | i, | |
| const unsigned int | j | |||
| ) | const |
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.
| number SparseMatrix< number >::el | ( | const unsigned int | i, | |
| const unsigned int | j | |||
| ) | const |
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.
Referenced by MatrixOut::get_element().
| number SparseMatrix< number >::diag_element | ( | const unsigned int | i | ) | const |
Return the main diagonal element in the ith row. This function throws an error if the matrix is not quadratic (see SparsityPattern::optimize_diagonal()).
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.
| number& SparseMatrix< number >::diag_element | ( | const unsigned int | i | ) |
Same as above, but return a writeable reference. You're sure you know what you do?
| number SparseMatrix< number >::raw_entry | ( | const unsigned int | row, | |
| const unsigned int | index | |||
| ) | const |
Access to values in internal mode. Returns the value of the indexth entry in row. Here, index refers to the internal representation of the matrix, not the column. Be sure to understand what you are doing here.
| number SparseMatrix< number >::global_entry | ( | const unsigned int | i | ) | const |
| number& SparseMatrix< number >::global_entry | ( | const unsigned int | i | ) |
| void SparseMatrix< number >::vmult | ( | OutVector & | dst, | |
| const InVector & | src | |||
| ) | const [inline] |
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.
| void SparseMatrix< number >::Tvmult | ( | OutVector & | dst, | |
| const InVector & | src | |||
| ) | const [inline] |
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.
| void SparseMatrix< number >::vmult_add | ( | OutVector & | dst, | |
| const InVector & | src | |||
| ) | const [inline] |
Adding Matrix-vector multiplication. Add M*src on dst 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.
| void SparseMatrix< number >::Tvmult_add | ( | OutVector & | dst, | |
| const InVector & | src | |||
| ) | const [inline] |
Adding Matrix-vector multiplication. Add MT*src to dst with M being this matrix. This function does the same as vmult_add() 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.
| somenumber SparseMatrix< number >::matrix_norm_square | ( | const Vector< somenumber > & | v | ) | const [inline] |
Return the square of the norm of the vector
with respect to the norm induced by this matrix, i.e.
. This is useful, e.g. in the finite element context, where the
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.
| somenumber SparseMatrix< number >::matrix_scalar_product | ( | const Vector< somenumber > & | u, | |
| const Vector< somenumber > & | v | |||
| ) | const [inline] |
Compute the matrix scalar product
.
| somenumber SparseMatrix< number >::residual | ( | Vector< somenumber > & | dst, | |
| const Vector< somenumber > & | x, | |||
| const Vector< somenumber > & | b | |||
| ) | const [inline] |
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.
| number SparseMatrix< number >::l1_norm | ( | ) | const |
Return the l1-norm of the matrix, that is
, (max. sum of columns). This is the natural matrix norm that is compatible to the l1-norm for vectors, i.e.
. (cf. Haemmerlin-Hoffmann : Numerische Mathematik)
| number SparseMatrix< number >::linfty_norm | ( | ) | const |
Return the linfty-norm of the matrix, that is
, (max. sum of rows). This is the natural matrix norm that is compatible to the linfty-norm of vectors, i.e.
. (cf. Haemmerlin-Hoffmann : Numerische Mathematik)
| number SparseMatrix< number >::frobenius_norm | ( | ) | const |
Return the frobenius norm of the matrix, i.e. the square root of the sum of squares of all entries in the matrix.
| void SparseMatrix< number >::precondition_Jacobi | ( | Vector< somenumber > & | dst, | |
| const Vector< somenumber > & | src, | |||
| const number | omega = 1. | |||
| ) | const [inline] |
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.
Referenced by BlockSparseMatrix< number >::precondition_Jacobi().
| void SparseMatrix< number >::precondition_SSOR | ( | Vector< somenumber > & | dst, | |
| const Vector< somenumber > & | src, | |||
| const number | om = 1. | |||
| ) | const [inline] |
Apply SSOR preconditioning to src.
| void SparseMatrix< number >::precondition_SOR | ( | Vector< somenumber > & | dst, | |
| const Vector< somenumber > & | src, | |||
| const number | om = 1. | |||
| ) | const [inline] |
Apply SOR preconditioning matrix to src.
| void SparseMatrix< number >::precondition_TSOR | ( | Vector< somenumber > & | dst, | |
| const Vector< somenumber > & | src, | |||
| const number | om = 1. | |||
| ) | const [inline] |
Apply transpose SOR preconditioning matrix to src.
| void SparseMatrix< number >::SSOR | ( | Vector< somenumber > & | v, | |
| const number | omega = 1. | |||
| ) | const [inline] |
Perform SSOR preconditioning in-place. Apply the preconditioner matrix without copying to a second vector. omega is the relaxation parameter.
| void SparseMatrix< number >::SOR | ( | Vector< somenumber > & | v, | |
| const number | om = 1. | |||
| ) | const [inline] |
Perform an SOR preconditioning in-place. omega is the relaxation parameter.
| void SparseMatrix< number >::TSOR | ( | Vector< somenumber > & | v, | |
| const number | om = 1. | |||
| ) | const [inline] |
Perform a transpose SOR preconditioning in-place. omega is the relaxation parameter.
| void SparseMatrix< number >::PSOR | ( | Vector< somenumber > & | v, | |
| const std::vector< unsigned int > & | permutation, | |||
| const std::vector< unsigned int > & | inverse_permutation, | |||
| const number | om = 1. | |||
| ) | const [inline] |
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.
| void SparseMatrix< number >::TPSOR | ( | Vector< somenumber > & | v, | |
| const std::vector< unsigned int > & | permutation, | |||
| const std::vector< unsigned int > & | inverse_permutation, | |||
| const number | om = 1. | |||
| ) | const [inline] |
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.
| void SparseMatrix< number >::SOR_step | ( | Vector< somenumber > & | v, | |
| const Vector< somenumber > & | b, | |||
| const number | om = 1. | |||
| ) | const [inline] |
Do one SOR step on v. Performs a direct SOR step with right hand side b.
| void SparseMatrix< number >::TSOR_step | ( | Vector< somenumber > & | v, | |
| const Vector< somenumber > & | b, | |||
| const number | om = 1. | |||
| ) | const [inline] |
Do one adjoint SOR step on v. Performs a direct TSOR step with right hand side b.
| void SparseMatrix< number >::SSOR_step | ( | Vector< somenumber > & | v, | |
| const Vector< somenumber > & | b, | |||
| const number | om = 1. | |||
| ) | const [inline] |
Do one SSOR step on v. Performs a direct SSOR step with right hand side b by performing TSOR after SOR.
| const_iterator SparseMatrix< number >::begin | ( | ) | const |
STL-like iterator with the first entry of the matrix. This is the version for constant matrices.
| const_iterator SparseMatrix< number >::end | ( | ) | const |
Final iterator. This is the version for constant matrices.
| iterator SparseMatrix< number >::begin | ( | ) |
STL-like iterator with the first entry of the matrix. This is the version for non-constant matrices.
| iterator SparseMatrix< number >::end | ( | ) |
Final iterator. This is the version for non-constant matrices.
| const_iterator SparseMatrix< number >::begin | ( | const unsigned int | r | ) | const |
STL-like iterator with the first entry of row r. This is the version for constant matrices.
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). Note also that the iterator may not be dereferencable in that case.
| const_iterator SparseMatrix< number >::end | ( | const unsigned int | r | ) | const |
Final iterator of row r. It points to the first element past the end of line r, or past the end of the entire sparsity pattern. This is the version for constant matrices.
Note that the end iterator is not necessarily dereferencable. This is in particular the case if it is the end iterator for the last row of a matrix.
| iterator SparseMatrix< number >::begin | ( | const unsigned int | r | ) |
STL-like iterator with the first entry of row r. This is the version for non-constant matrices.
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). Note also that the iterator may not be dereferencable in that case.
| iterator SparseMatrix< number >::end | ( | const unsigned int | r | ) |
Final iterator of row r. It points to the first element past the end of line r, or past the end of the entire sparsity pattern. This is the version for non-constant matrices.
Note that the end iterator is not necessarily dereferencable. This is in particular the case if it is the end iterator for the last row of a matrix.
| void SparseMatrix< number >::print | ( | std::ostream & | out | ) | const |
Print the matrix to the given stream, using the format (line,col) value, i.e. one nonzero entry of the matrix per line.
| void SparseMatrix< number >::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 |
Print the matrix in the usual format, i.e. as a matrix and not as a list of nonzero elements. For better readability, elements not in the matrix are displayed as empty space, while matrix elements which are explicitly set to zero are displayed as such.
The parameters allow for a flexible setting o