#include <ARPACK.hh>
Public Types | |
enum | which { LM , SM , LR , SR , LI , SI } |
enum | modus { NORMAL = 1 , REGINV = 2 , SHIFTINV = 3 , SHIFTINVIMAG = 4 } |
Public Member Functions | |
ArPack (concepts::Operator< G > &OP, concepts::Operator< F > &A, concepts::Operator< H > &B, const int kmax=1, const Real tol=0.0, const int maxiter=300, enum which target=SM, enum modus mode=REGINV, const F sigma=0.0, const concepts::Vector< F > *start=0, const concepts::Array< F > *resid=0, const bool schur=false) | |
virtual const concepts::Array< F > & | getEV () |
virtual const concepts::Array< concepts::Vector< F > * > & | getEF () |
virtual uint | iterations () const |
Returns the number of iterations. | |
virtual uint | converged () const |
Returns the number of converged eigenpairs. | |
concepts::Array< F > | getRESID () |
Returns the RESID vector: | |
Protected Member Functions | |
virtual std::ostream & | info (std::ostream &os) const |
Returns information in an output stream. | |
Eigenvalue solver using ARPACK, the routine dnaupd
or znaupd
.
ARPACK is designed to solve large scale eigenvalue problems. The package is designed to compute a few eigenvalues and corresponding eigenvectors of a general n by n matrix A. It is most appropriate for large sparse or structured matrices A. This software is based upon an algorithmic variant of the Arnoldi process called the Implicitly Restarted Arnoldi Method (IRAM). When the matrix A is symmetric it reduces to a variant of the Lanczos process called the Implicitly Restarted Lanczos Method (IRLM). These variants may be viewed as a synthesis of the Arnoldi/Lanczos process with the Implicitly Shifted QR technique that is suitable for large scale problems.
ARPACK software is capable of solving large scale symmetric, nonsymmetric, and generalized eigenproblems from significant application areas. The software is designed to compute a few (k) eigenvalues with user specified features such as those of largest real part or largest magnitude. No auxiliary storage is required. A set of Schur basis vectors for the desired k-dimensional eigen-space is computed which is numerically orthogonal to working precision. Numerically accurate eigenvectors are available on request.
dnaupd
uses implicitly restarted Arnoldi iteration to solve the generalized eigenvalue problem with A general non-symmetric and B symmetric and positive definite. For A symmetric, use ArPackSymm
instead.
znaupd
uses implicitly restarted Arnoldi iteration to solve the generalized eigenvalue problem with A general non-symmetric, complex and B symmetric and positive definite, real. For A symmetric and complex also use this routine.
enum eigensolver::ArPack::modus |
enum eigensolver::ArPack::which |
eigensolver::ArPack< F, G, H >::ArPack | ( | concepts::Operator< G > & | OP, |
concepts::Operator< F > & | A, | ||
concepts::Operator< H > & | B, | ||
const int | kmax = 1 , |
||
const Real | tol = 0.0 , |
||
const int | maxiter = 300 , |
||
enum which | target = SM , |
||
enum modus | mode = REGINV , |
||
const F | sigma = 0.0 , |
||
const concepts::Vector< F > * | start = 0 , |
||
const concepts::Array< F > * | resid = 0 , |
||
const bool | schur = false |
||
) |
Constructor.
OP | Operator OP as described in modus |
A | Stiffness matrix |
B | Operator B as descirbed in modus |
kmax | Number of eigenpairs to be computed |
tol | Convergence tolerance for the eigenpairs. The default value 0.0 is replaced by DLAMCH ('EPS') from LAPACK. |
maxiter | Maximum number of Arnoldi iterations allowed |
target | What sort of eigenvalues to compute |
mode | Mode in which ARPACK should be used |
sigma | Shift for the shift-invert modes |
start | Initial vector for iteration |
schur | Calculate Schur vector basis instead of eigenvectors |
|
inlinevirtual |
Returns the number of converged eigenpairs.
Implements eigensolver::EigenSolver< F >.
|
virtual |
Returns an array with the eigenfunctions. If eigenvalue k is real, entry k contains the (real) eigenfunction. If eigenvalues k and k+1 are complex conjugate, entry k contains the real part of and entry k+1 contains the imaginary part of eigenfunction k. Eigenfunction k+1 is the complex conjugate of eigenfunction k.
Implements eigensolver::EigenSolver< F >.
|
virtual |
Returns an array with the real parts of the eigenvalues in the first kmax
entries and the imaginary parts of the eigenvalues in the second kmax
entries.
Implements eigensolver::EigenSolver< F >.
|
inline |
|
protectedvirtual |
Returns information in an output stream.
Reimplemented from eigensolver::EigenSolver< F >.
|
inlinevirtual |
Returns the number of iterations.
Implements eigensolver::EigenSolver< F >.