|
|
◆ dneupd()
| void dneupd |
( |
int |
rvec, |
|
|
char |
howmny, |
|
|
int |
select[], |
|
|
double |
dr[], |
|
|
double |
di[], |
|
|
int |
ldz, |
|
|
double |
z[], |
|
|
double |
sigmar, |
|
|
double |
sigmai, |
|
|
double |
workev[], |
|
|
char |
bmat, |
|
|
int |
n, |
|
|
const char * |
which, |
|
|
int |
nev, |
|
|
double |
tol, |
|
|
double |
resid[], |
|
|
int |
ncv, |
|
|
int |
ldv, |
|
|
double |
v[], |
|
|
int |
iparam[], |
|
|
int |
ipntr[], |
|
|
double |
workd[], |
|
|
double |
workl[], |
|
|
int |
lworkl, |
|
|
int * |
info |
|
) |
| |
Approximate eigenvalues and eigenvectors of a general sparse matrix from Arnoldi factorization
- Purpose
- This routine computes the approximations to the eigenvalues of eigenproblem A*z = λ*B*z and (optionally) the corresponding approximate eigenvectors.
These values are computed from the Arnoldi factorization returned by dnaupd for a linear operator OP with respect to a matrix B (see Purpose paragraph of dnaupd manual for more details). dnaupd must be called before calling this routine.
The approximate eigenvalues are returned in ascending algebraic order.
The arguments bmat, n, which, nev, tol, resid, ncv, v, ldv, iparam, ipntr, workd, workl and lworkl must be passed to this routine following the last call to dnaupd without change. Three of these parameters, v, ipntr and workl, are changed by this routine.
- Parameters
-
| [in] | rvec | Specifies whether a basis for the invariant subspace corresponding to the converged Ritz value approximations for the eigenproblem A*z = lambda*B*z is computed.
= false (0): Compute Ritz values only.
= true (1): Compute Ritz vectors or Schur vectors. |
| [in] | howmny | Specifies the form of the basis for the invariant subspace corresponding to the converged Ritz values that is to be computed.
= 'A': Compute nev Ritz vectors.
= 'P': Compute nev Schur vectors.
= 'S': Compute some of the Ritz vectors, specified by the logical array select[]. |
| [out] | select[] | Array select[lselect] (lselect >= ncv)
If howmny = 'S', select[] specifies the Ritz vectors to be computed. To select the Ritz vector corresponding to a Ritz value (dr[j], di[j]), select[j] must be set to true (1). If howmny = 'A' or 'P', select[] is used as internal workspace. |
| [out] | dr[] | Array dr[ldr] (ldr >= nev + 1)
If mode = 1 or 2, or mode = 3 and sigmai = 0.0 then dr[] contains the real part of the Ritz value approximations to the eigenvalues of A*z = λ*B*z.
If mode = 3 or 4 and sigmai != 0.0, then dr[] contains the real part of the Ritz values of OP computed by dnaupd. A further computation must be performed by the user to transform the Ritz values computed for OP by dnaupd to those of the original system A*z = λ*B*z. |
| [out] | di[] | Array di[ldi] (ldi >= nev + 1)
Contains the imaginary part of the Ritz value approximations to the eigenvalues of A*z = λ*B*z associated with dr[]. |
| [in] | ldz | Leading dimension of the array z. (ldz >= n if Ritz vectors are desired, ldz >= 1 otherwise) |
| [out] | z[] | Array z[ldz * lz] (lz >= nev + 1)
If rvec = true (1) and howmny = 'A', then the columns of z[][] represent approximate eigenvectors (Ritz vectors) corresponding to the nconv (iparam[4]) Ritz values for eigensystem A*z = λ*B*z.
The complex Ritz vector associated with the Ritz value with positive imaginary part is stored in two consecutive columns. The first column holds the real part of the Ritz vector and the second column holds the imaginary part. The Ritz vector associated with the Ritz value with negative imaginary part is simply the complex conjugate of the Ritz vector associated with the positive imaginary part.
If rvec = false (0) or howmny = 'P' then z[] is not referenced. |
| [in] | sigmar | If mode = 3 or 4, represents the real part of the shift. Not referenced if mode = 1 or 2. |
| [in] | sigmai | If mode = 3 or 4, represents the imaginary part of the shift. Not referenced if mode = 1 or 2. |
| [out] | workev[] | Array workev[lworkev] (lworkev >= 3*ncv)
Workspace. |
| [in] | bmat | Same as for dnaupd. Must be passed without modification following the last call to dnaupd. |
| [in] | n | Same as for dnaupd. Must be passed without modification following the last call to dnaupd. |
| [in] | which | Same as for dnaupd. Must be passed without modification following the last call to dnaupd. |
| [in] | nev | Same as for dnaupd. Must be passed without modification following the last call to dnaupd. |
| [in] | tol | Same as for dnaupd. Must be passed without modification following the last call to dnaupd. |
| [in] | resid[] | Array resid[lresid] (lresid >= n)
Same as for dnaupd. Must be passed without modification following the last call to dnaupd. |
| [in] | ncv | Same as for dnaupd. Must be passed without modification following the last call to dnaupd. |
| [in] | ldv | Same as for dnaupd. Must be passed without modification following the last call to dnaupd. |
| [in,out] | v[] | Array v[ldv * lv] (lv >= ncv)
[in] Same as for dnaupd. Must be passed without modification following the last call to dnaupd.
[out] If rvec = true (1), the first nconv columns contain approximate Schur vectors that span the desired invariant subspace. |
| [in] | iparam[] | Array iparam[liparam] (liparam >= 11)
Same as for dnaupd. Must be passed without modification following the last call to dnaupd. |
| [in,out] | ipntr[] | Array ipntr[lipntr] (lipntr >= 14)
[in] Same as for dnaupd. Must be passed without modification following the last call to dnaupd.
[out] ipntr[8] to ipntr[12] contain the pointer into workl.
ipntr[8]: Pointer to the real part of the ncv Ritz values of the original system.
ipntr[9]: Pointer to the imaginary part of the ncv Ritz values of the original system.
ipntr[10]: Pointer to the ncv corresponding error bounds.
ipntr[11]: Pointer to the ncv by ncv upper quasi-triangular Schur matrix for H.
ipntr[12]: Pointer to the ncv by ncv matrix of eigenvectors of the upper Hessenberg matrix H. Only referenced if rvec = true (1). |
| [in] | workd[] | Array workd[lworkd] (lworkd >= 3*n)
Same as for dnaupd. Must be passed without modification following the last call to dnaupd. |
| [in,out] | workl[] | Array workl[lworkl]
[in] Same as for dnaupd. Must be passed without modification following the last call to dnaupd. workl[0] to workl[ncv^2 + 3*ncv - 1] contains information obtained in dnaupd. They are not changed by dneupd.
[out] workl[ncv^2 + 3*ncv] to workl[3*ncv^2 + 6*ncv - 1] holds the real and imaginary part of the untransformed Ritz values, the upper quasi-triangular matrix for H, and the associated matrix representation of the invariant subspace for H. |
| [in] | lworkl | Same as for dnaupd. Must be passed without modification following the last call to dnaupd. |
| [out] | info | Return code.
= 0: Successful exit.
< 0: The (-info)-th argument is invalid.
= 11: The Schur form computed by LAPACK routine DLAHQR could not be reordered by LAPACK routine DTRSEN.
= 12: dnaupd did not find any eigenvalues to sufficient accuracy.
= 13: dneupd got a different count of the number of converged Ritz values than dnaupd got.
= 14: Error return from LAPACK real Schur form calculation.
= 15: Error return from LAPACK eigenvector calculation. |
- Reference
- ARPACK-NG (https://github.com/opencollab/arpack-ng)
|