- SUBROUTINE DSTEIN2(
- N, D, E, M, W, IBLOCK, ISPLIT, ORFAC, Z, LDZ, WORK, IWORK, IFAIL, INFO )
- INTEGER INFO, LDZ, M, N
- DOUBLE PRECISION ORFAC
- INTEGER IBLOCK( * ), IFAIL( * ), ISPLIT( * ), IWORK( * )
- DOUBLE PRECISION D( * ), E( * ), W( * ), WORK( * ), Z( LDZ, * )
PURPOSEDSTEIN2 computes the eigenvectors of a real symmetric tridiagonal matrix T corresponding to specified eigenvalues, using inverse iteration.
The maximum number of iterations allowed for each eigenvector is specified by an internal parameter MAXITS (currently set to 5).
- N (input) INTEGER
- The order of the matrix. N >= 0.
- D (input) DOUBLE PRECISION array, dimension (N)
- The n diagonal elements of the tridiagonal matrix T.
- E (input) DOUBLE PRECISION array, dimension (N)
- The (n-1) subdiagonal elements of the tridiagonal matrix T, in elements 1 to N-1. E(N) need not be set.
- M (input) INTEGER
- The number of eigenvectors to be found. 0 <= M <= N.
- W (input) DOUBLE PRECISION array, dimension (N)
- The first M elements of W contain the eigenvalues for which eigenvectors are to be computed. The eigenvalues should be grouped by split-off block and ordered from smallest to largest within the block. ( The output array W from DSTEBZ with ORDER = 'B' is expected here. )
- IBLOCK (input) INTEGER array, dimension (N)
- The submatrix indices associated with the corresponding eigenvalues in W; IBLOCK(i)=1 if eigenvalue W(i) belongs to the first submatrix from the top, =2 if W(i) belongs to the second submatrix, etc. ( The output array IBLOCK from DSTEBZ is expected here. )
- ISPLIT (input) INTEGER array, dimension (N)
- The splitting points, at which T breaks up into submatrices. The first submatrix consists of rows/columns 1 to ISPLIT( 1 ), the second of rows/columns ISPLIT( 1 )+1 through ISPLIT( 2 ), etc. ( The output array ISPLIT from DSTEBZ is expected here. )
- ORFAC (input) DOUBLE PRECISION
- ORFAC specifies which eigenvectors should be orthogonalized. Eigenvectors that correspond to eigenvalues which are within ORFAC*||T|| of each other are to be orthogonalized.
- Z (output) DOUBLE PRECISION array, dimension (LDZ, M)
- The computed eigenvectors. The eigenvector associated with the eigenvalue W(i) is stored in the i-th column of Z. Any vector which fails to converge is set to its current iterate after MAXITS iterations.
- LDZ (input) INTEGER
- The leading dimension of the array Z. LDZ >= max(1,N).
- WORK (workspace) DOUBLE PRECISION array, dimension (5*N)
- IWORK (workspace) INTEGER array, dimension (N)
- IFAIL (output) INTEGER array, dimension (M)
- On normal exit, all elements of IFAIL are zero. If one or more eigenvectors fail to converge after MAXITS iterations, then their indices are stored in array IFAIL.
- INFO (output) INTEGER
= 0: successful exit.
< 0: if INFO = -i, the i-th argument had an illegal value
> 0: if INFO = i, then i eigenvectors failed to converge in MAXITS iterations. Their indices are stored in array IFAIL.
- MAXITS INTEGER, default = 5
- The maximum number of iterations performed.
- EXTRA INTEGER, default = 2
The number of iterations performed after norm growth
criterion is satisfied, should be at least 1.