PSSTEIN(l) | LAPACK routine (version 1.5) | PSSTEIN(l) |
NAME¶
PSSTEIN - compute the eigenvectors of a symmetric tridiagonal matrix in parallel, using inverse iterationSYNOPSIS¶
- SUBROUTINE PSSTEIN(
- N, D, E, M, W, IBLOCK, ISPLIT, ORFAC, Z, IZ, JZ, DESCZ, WORK, LWORK, IWORK, LIWORK, IFAIL, ICLUSTR, GAP, INFO )
- INTEGER
- INFO, IZ, JZ, LIWORK, LWORK, M, N
- REAL
- ORFAC
- INTEGER
- DESCZ( * ), IBLOCK( * ), ICLUSTR( * ), IFAIL( * ), ISPLIT( * ), IWORK( * )
- REAL
- D( * ), E( * ), GAP( * ), W( * ), WORK( * ), Z( * )
PURPOSE¶
PSSTEIN computes the eigenvectors of a symmetric tridiagonal matrix in parallel, using inverse iteration. The eigenvectors found correspond to user specified eigenvalues. PSSTEIN does not orthogonalize vectors that are on different processes. The extent of orthogonalization is controlled by the input parameter LWORK. Eigenvectors that are to be orthogonalized are computed by the same process. PSSTEIN decides on the allocation of work among the processes and then calls SSTEIN2 (modified LAPACK routine) on each individual process. If insufficient workspace is allocated, the expected orthogonalization may not be done.LWORK and run the code again.
DTYPE_A = 1.
the BLACS process grid A is distribu-
ted over. The context itself is glo-
bal, but the handle (the integer
value) may vary.
array A.
array A.
the rows of the array.
the columns of the array.
row of the array A is distributed. CSRC_A (global) DESCA( CSRC_ ) The process column over which the
first column of the array A is
distributed.
array. LLD_A >= MAX(1,LOCr(M_A)).
LOCr( M ) = NUMROC( M, MB_A, MYROW, RSRC_A, NPROW ),
LOCc( N ) = NUMROC( N, NB_A, MYCOL, CSRC_A, NPCOL ). An upper bound for these quantities may be computed by:
LOCr( M ) <= ceil( ceil(M/MB_A)/NPROW )*MB_A
LOCc( N ) <= ceil( ceil(N/NB_A)/NPCOL )*NB_A
ARGUMENTS¶
P = NPROW * NPCOL is the total number of processes- N (global input) INTEGER
- The order of the tridiagonal matrix T. N >= 0.
- D (global input) REAL array, dimension (N)
- The n diagonal elements of the tridiagonal matrix T.
- E (global input) REAL array, dimension (N-1)
- The (n-1) off-diagonal elements of the tridiagonal matrix T.
- M (global input) INTEGER
- The total number of eigenvectors to be found. 0 <= M <= N.
- W (global input/global output) REAL array, dim (M)
- On input, the first M elements of W contain all 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 PSSTEBZ with ORDER='b' is
expected here). This array should be replicated on all processes. On
output, the first M elements contain the input eigenvalues in ascending
order.
- IBLOCK (global input) INTEGER array, dimension (N)
- The submatrix indices associated with the corresponding eigenvalues in W -- 1 for eigenvalues belonging to the first submatrix from the top, 2 for those belonging to the second submatrix, etc. (The output array IBLOCK from PSSTEBZ is expected here).
- ISPLIT (global 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., and the NSPLIT-th consists of rows/columns ISPLIT(NSPLIT-1)+1 through ISPLIT(NSPLIT)=N (The output array ISPLIT from PSSTEBZ is expected here.)
- ORFAC (global input) REAL
- ORFAC specifies which eigenvectors should be orthogonalized. Eigenvectors that correspond to eigenvalues which are within ORFAC*||T|| of each other are to be orthogonalized. However, if the workspace is insufficient (see LWORK), this tolerance may be decreased until all eigenvectors to be orthogonalized can be stored in one process. No orthogonalization will be done if ORFAC equals zero. A default value of 10^-3 is used if ORFAC is negative. ORFAC should be identical on all processes.
- Z (local output) REAL array,
- dimension (DESCZ(DLEN_), N/npcol + NB) Z contains the computed eigenvectors associated with the specified eigenvalues. Any vector which fails to converge is set to its current iterate after MAXITS iterations ( See SSTEIN2 ). On output, Z is distributed across the P processes in block cyclic format.
- IZ (global input) INTEGER
- Z's global row index, which points to the beginning of the submatrix which is to be operated on.
- JZ (global input) INTEGER
- Z's global column index, which points to the beginning of the submatrix which is to be operated on.
- DESCZ (global and local input) INTEGER array of dimension DLEN_.
- The array descriptor for the distributed matrix Z.
- WORK (local workspace/global output) REAL array,
- dimension ( LWORK ) On output, WORK(1) gives a lower bound on the workspace ( LWORK ) that guarantees the user desired orthogonalization (see ORFAC). Note that this may overestimate the minimum workspace needed.
- LWORK (local input) integer
- LWORK controls the extent of orthogonalization which can be
done. The number of eigenvectors for which storage is allocated on each
process is NVEC = floor(( LWORK- max(5*N,NP00*MQ00) )/N). Eigenvectors
corresponding to eigenvalue clusters of size NVEC - ceil(M/P) + 1 are
guaranteed to be orthogonal ( the orthogonality is similar to that
obtained from SSTEIN2). Note : LWORK must be no smaller than:
max(5*N,NP00*MQ00) + ceil(M/P)*N, and should have the same input value on
all processes. It is the minimum value of LWORK input on different
processes that is significant.
- IWORK (local workspace/global output) INTEGER array,
- dimension ( 3*N+P+1 ) On return, IWORK(1) contains the amount of integer workspace required. On return, the IWORK(2) through IWORK(P+2) indicate the eigenvectors computed by each process. Process I computes eigenvectors indexed IWORK(I+2)+1 thru' IWORK(I+3).
- LIWORK (local input) INTEGER
- Size of array IWORK. Must be >= 3*N + P + 1
- IFAIL (global 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 (as in SSTEIN),
then INFO > 0 is returned. If mod(INFO,M+1)>0, then for I=1 to
mod(INFO,M+1), the eigenvector corresponding to the eigenvalue W(IFAIL(I))
failed to converge ( W refers to the array of eigenvalues on output ).
- GAP (global output) REAL array, dimension (P)
- This output array contains the gap between eigenvalues whose eigenvectors could not be orthogonalized. The INFO/M output values in this array correspond to the INFO/(M+1) clusters indicated by the array ICLUSTR. As a result, the dot product between eigenvectors corresponding to the I^th cluster may be as high as ( O(n)*macheps ) / GAP(I).
- INFO (global output) INTEGER
- = 0: successful exit
12 May 1997 | LAPACK version 1.5 |