MOAB
4.9.3pre
|
Sparse direct LU solver based on PaStiX library. More...
#include <PaStiXSupport.h>
Public Types | |
typedef _MatrixType | MatrixType |
typedef PastixBase< PastixLU < MatrixType > > | Base |
typedef Base::ColSpMatrix | ColSpMatrix |
typedef MatrixType::StorageIndex | StorageIndex |
Public Member Functions | |
PastixLU () | |
PastixLU (const MatrixType &matrix) | |
void | compute (const MatrixType &matrix) |
void | analyzePattern (const MatrixType &matrix) |
void | factorize (const MatrixType &matrix) |
Protected Member Functions | |
void | init () |
void | grabMatrix (const MatrixType &matrix, ColSpMatrix &out) |
Protected Attributes | |
ColSpMatrix | m_transposedStructure |
bool | m_structureIsUptodate |
Sparse direct LU solver based on PaStiX library.
This class is used to solve the linear systems A.X = B with a supernodal LU factorization in the PaStiX library. The matrix A should be squared and nonsingular PaStiX requires that the matrix A has a symmetric structural pattern. This interface can symmetrize the input matrix otherwise. The vectors or matrices X and B can be either dense or sparse.
_MatrixType | the type of the sparse matrix A, it must be a SparseMatrix<> |
IsStrSym | Indicates if the input matrix has a symmetric pattern, default is false NOTE : Note that if the analysis and factorization phase are called separately, the input matrix will be symmetrized at each call, hence it is advised to symmetrize the matrix in a end-user program and set IsStrSym to true |
Definition at line 412 of file PaStiXSupport.h.
typedef PastixBase<PastixLU<MatrixType> > Eigen::PastixLU< _MatrixType, IsStrSym >::Base |
Reimplemented from Eigen::PastixBase< PastixLU< _MatrixType > >.
Definition at line 416 of file PaStiXSupport.h.
typedef Base::ColSpMatrix Eigen::PastixLU< _MatrixType, IsStrSym >::ColSpMatrix |
Reimplemented from Eigen::PastixBase< PastixLU< _MatrixType > >.
Definition at line 417 of file PaStiXSupport.h.
typedef _MatrixType Eigen::PastixLU< _MatrixType, IsStrSym >::MatrixType |
Reimplemented from Eigen::PastixBase< PastixLU< _MatrixType > >.
Definition at line 415 of file PaStiXSupport.h.
typedef MatrixType::StorageIndex Eigen::PastixLU< _MatrixType, IsStrSym >::StorageIndex |
Reimplemented from Eigen::PastixBase< PastixLU< _MatrixType > >.
Definition at line 418 of file PaStiXSupport.h.
Eigen::PastixLU< _MatrixType, IsStrSym >::PastixLU | ( | ) | [inline] |
Definition at line 421 of file PaStiXSupport.h.
Eigen::PastixLU< _MatrixType, IsStrSym >::PastixLU | ( | const MatrixType & | matrix | ) | [inline, explicit] |
Definition at line 426 of file PaStiXSupport.h.
void Eigen::PastixLU< _MatrixType, IsStrSym >::analyzePattern | ( | const MatrixType & | matrix | ) | [inline] |
Compute the LU symbolic factorization of matrix
using its sparsity pattern. Several ordering methods can be used at this step. See the PaStiX user's manual. The result of this operation can be used with successive matrices having the same pattern as matrix
Definition at line 448 of file PaStiXSupport.h.
{ m_structureIsUptodate = false; ColSpMatrix temp; grabMatrix(matrix, temp); Base::analyzePattern(temp); }
void Eigen::PastixLU< _MatrixType, IsStrSym >::compute | ( | const MatrixType & | matrix | ) | [inline] |
Compute the LU supernodal factorization of matrix
. iparm and dparm can be used to tune the PaStiX parameters. see the PaStiX user's manual
Definition at line 436 of file PaStiXSupport.h.
{ m_structureIsUptodate = false; ColSpMatrix temp; grabMatrix(matrix, temp); Base::compute(temp); }
void Eigen::PastixLU< _MatrixType, IsStrSym >::factorize | ( | const MatrixType & | matrix | ) | [inline] |
Compute the LU supernodal factorization of matrix
WARNING The matrix matrix
should have the same structural pattern as the same used in the analysis phase.
Definition at line 461 of file PaStiXSupport.h.
{ ColSpMatrix temp; grabMatrix(matrix, temp); Base::factorize(temp); }
void Eigen::PastixLU< _MatrixType, IsStrSym >::grabMatrix | ( | const MatrixType & | matrix, |
ColSpMatrix & | out | ||
) | [inline, protected] |
Definition at line 476 of file PaStiXSupport.h.
{ if(IsStrSym) out = matrix; else { if(!m_structureIsUptodate) { // update the transposed structure m_transposedStructure = matrix.transpose(); // Set the elements of the matrix to zero for (Index j=0; j<m_transposedStructure.outerSize(); ++j) for(typename ColSpMatrix::InnerIterator it(m_transposedStructure, j); it; ++it) it.valueRef() = 0.0; m_structureIsUptodate = true; } out = m_transposedStructure + matrix; } internal::c_to_fortran_numbering(out); }
void Eigen::PastixLU< _MatrixType, IsStrSym >::init | ( | ) | [inline, protected] |
Reimplemented from Eigen::PastixBase< PastixLU< _MatrixType > >.
Definition at line 469 of file PaStiXSupport.h.
{ m_structureIsUptodate = false; m_iparm(IPARM_SYM) = API_SYM_NO; m_iparm(IPARM_FACTORIZATION) = API_FACT_LU; }
bool Eigen::PastixLU< _MatrixType, IsStrSym >::m_structureIsUptodate [protected] |
Definition at line 504 of file PaStiXSupport.h.
ColSpMatrix Eigen::PastixLU< _MatrixType, IsStrSym >::m_transposedStructure [protected] |
Definition at line 503 of file PaStiXSupport.h.