mirror of
https://github.com/OpenMathLib/OpenBLAS
synced 2026-05-31 00:45:48 +08:00
Merge pull request #5701 from martin-frbg/lapack1204
Fix internal errors getting ignored in calculation of selected eigenvalues (Reference-LAPACK PR 1204)
This commit is contained in:
@@ -246,8 +246,11 @@
|
||||
*> INFO is 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.
|
||||
*> Their indices are stored in array IFAIL.
|
||||
*> > 0: if INFO = i, and i is:
|
||||
*> <= N: then i eigenvectors failed to converge in
|
||||
*> CSTEIN; their indices are stored in IFAIL.
|
||||
*> > N: SSTEBZ returned INFO = INFO - N;
|
||||
*> see SSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -484,12 +487,19 @@
|
||||
CALL SSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL,
|
||||
$ RWORK( INDD ), RWORK( INDE ), M, NSPLIT, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), RWORK( INDRWK ),
|
||||
$ IWORK( INDIWK ), INFO )
|
||||
$ IWORK( INDIWK ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 30
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL CSTEIN( N, RWORK( INDD ), RWORK( INDE ), M, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), Z, LDZ,
|
||||
$ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, INFO )
|
||||
$ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
*
|
||||
* Apply unitary matrix used in reduction to tridiagonal
|
||||
* form to eigenvectors returned by CSTEIN.
|
||||
|
||||
@@ -273,8 +273,11 @@
|
||||
*> INFO is 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.
|
||||
*> Their indices are stored in array IFAIL.
|
||||
*> > 0: if INFO = i, and i is:
|
||||
*> <= N: then i eigenvectors failed to converge in
|
||||
*> CSTEIN; their indices are stored in IFAIL.
|
||||
*> > N: SSTEBZ returned INFO = INFO - N;
|
||||
*> see SSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -577,12 +580,19 @@
|
||||
CALL SSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL,
|
||||
$ RWORK( INDD ), RWORK( INDE ), M, NSPLIT, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), RWORK( INDRWK ),
|
||||
$ IWORK( INDIWK ), INFO )
|
||||
$ IWORK( INDIWK ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 30
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL CSTEIN( N, RWORK( INDD ), RWORK( INDE ), M, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), Z, LDZ,
|
||||
$ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, INFO )
|
||||
$ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
*
|
||||
* Apply unitary matrix used in reduction to tridiagonal
|
||||
* form to eigenvectors returned by CSTEIN.
|
||||
|
||||
@@ -270,12 +270,14 @@
|
||||
*> = 0: successful exit
|
||||
*> < 0: if INFO = -i, the i-th argument had an illegal value
|
||||
*> > 0: if INFO = i, and i is:
|
||||
*> <= N: then i eigenvectors failed to converge. Their
|
||||
*> indices are stored in array IFAIL.
|
||||
*> > N: if INFO = N + i, for 1 <= i <= N, then CPBSTF
|
||||
*> returned INFO = i: B is not positive definite.
|
||||
*> The factorization of B could not be completed and
|
||||
*> no eigenvalues or eigenvectors were computed.
|
||||
*> <= N: then i eigenvectors failed to converge in
|
||||
*> CSTEIN; their indices are stored in IFAIL.
|
||||
*> N+1..2N: if INFO = N + i, for 1 <= i <= N, then CPBSTF
|
||||
*> returned INFO = i: B is not positive definite.
|
||||
*> The factorization of B could not be completed
|
||||
*> and no eigenvalues or eigenvectors were computed.
|
||||
*> > 2N: if INFO = 2*N + i, then SSTEBZ returned
|
||||
*> INFO = i; see SSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -475,12 +477,19 @@
|
||||
CALL SSTEBZ( RANGE, ORDER, N, VL, VU, IL, IU, ABSTOL,
|
||||
$ RWORK( INDD ), RWORK( INDE ), M, NSPLIT, W,
|
||||
$ IWORK( 1 ), IWORK( INDISP ), RWORK( INDRWK ),
|
||||
$ IWORK( INDIWK ), INFO )
|
||||
$ IWORK( INDIWK ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = 2*N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 30
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL CSTEIN( N, RWORK( INDD ), RWORK( INDE ), M, W,
|
||||
$ IWORK( 1 ), IWORK( INDISP ), Z, LDZ,
|
||||
$ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, INFO )
|
||||
$ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
*
|
||||
* Apply unitary matrix used in reduction to tridiagonal
|
||||
* form to eigenvectors returned by CSTEIN.
|
||||
|
||||
@@ -238,8 +238,11 @@
|
||||
*> INFO is 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.
|
||||
*> Their indices are stored in array IFAIL.
|
||||
*> > 0: if INFO = i, and i is:
|
||||
*> <= N: then i eigenvectors failed to converge in
|
||||
*> CSTEIN; their indices are stored in IFAIL.
|
||||
*> > N: SSTEBZ returned INFO = INFO - N;
|
||||
*> see SSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -494,12 +497,19 @@
|
||||
CALL SSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL,
|
||||
$ RWORK( INDD ), RWORK( INDE ), M, NSPLIT, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), RWORK( INDRWK ),
|
||||
$ IWORK( INDIWK ), INFO )
|
||||
$ IWORK( INDIWK ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 40
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL CSTEIN( N, RWORK( INDD ), RWORK( INDE ), M, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), Z, LDZ,
|
||||
$ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, INFO )
|
||||
$ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
*
|
||||
* Apply unitary matrix used in reduction to tridiagonal
|
||||
* form to eigenvectors returned by CSTEIN.
|
||||
|
||||
@@ -253,8 +253,11 @@
|
||||
*> INFO is 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.
|
||||
*> Their indices are stored in array IFAIL.
|
||||
*> > 0: if INFO = i, and i is:
|
||||
*> <= N: then i eigenvectors failed to converge in
|
||||
*> CSTEIN; their indices are stored in IFAIL.
|
||||
*> > N: SSTEBZ returned INFO = INFO - N;
|
||||
*> see SSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -553,12 +556,19 @@
|
||||
CALL SSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL,
|
||||
$ RWORK( INDD ), RWORK( INDE ), M, NSPLIT, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), RWORK( INDRWK ),
|
||||
$ IWORK( INDIWK ), INFO )
|
||||
$ IWORK( INDIWK ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 40
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL CSTEIN( N, RWORK( INDD ), RWORK( INDE ), M, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), Z, LDZ,
|
||||
$ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, INFO )
|
||||
$ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
*
|
||||
* Apply unitary matrix used in reduction to tridiagonal
|
||||
* form to eigenvectors returned by CSTEIN.
|
||||
|
||||
@@ -219,8 +219,11 @@
|
||||
*> INFO is 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.
|
||||
*> Their indices are stored in array IFAIL.
|
||||
*> > 0: if INFO = i, and i is:
|
||||
*> <= N: then i eigenvectors failed to converge in
|
||||
*> CSTEIN; their indices are stored in IFAIL.
|
||||
*> > N: SSTEBZ returned INFO = INFO - N;
|
||||
*> see SSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -439,12 +442,19 @@
|
||||
CALL SSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL,
|
||||
$ RWORK( INDD ), RWORK( INDE ), M, NSPLIT, W,
|
||||
$ IWORK( 1 ), IWORK( INDISP ), RWORK( INDRWK ),
|
||||
$ IWORK( INDIWK ), INFO )
|
||||
$ IWORK( INDIWK ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 20
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL CSTEIN( N, RWORK( INDD ), RWORK( INDE ), M, W,
|
||||
$ IWORK( 1 ), IWORK( INDISP ), Z, LDZ,
|
||||
$ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, INFO )
|
||||
$ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
*
|
||||
* Apply unitary matrix used in reduction to tridiagonal
|
||||
* form to eigenvectors returned by CSTEIN.
|
||||
|
||||
@@ -244,8 +244,11 @@
|
||||
*> INFO is 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.
|
||||
*> Their indices are stored in array IFAIL.
|
||||
*> > 0: if INFO = i, and i is:
|
||||
*> <= N: then i eigenvectors failed to converge in
|
||||
*> DSTEIN; their indices are stored in IFAIL.
|
||||
*> > N: DSTEBZ returned INFO = INFO - N;
|
||||
*> see DSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -474,12 +477,19 @@
|
||||
CALL DSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL,
|
||||
$ WORK( INDD ), WORK( INDE ), M, NSPLIT, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), WORK( INDWRK ),
|
||||
$ IWORK( INDIWO ), INFO )
|
||||
$ IWORK( INDIWO ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 30
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL DSTEIN( N, WORK( INDD ), WORK( INDE ), M, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), Z, LDZ,
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IFAIL, INFO )
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IFAIL, IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
*
|
||||
* Apply orthogonal matrix used in reduction to tridiagonal
|
||||
* form to eigenvectors returned by DSTEIN.
|
||||
|
||||
@@ -269,8 +269,11 @@
|
||||
*> INFO is 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.
|
||||
*> Their indices are stored in array IFAIL.
|
||||
*> > 0: if INFO = i, and i is:
|
||||
*> <= N: then i eigenvectors failed to converge in
|
||||
*> DSTEIN; their indices are stored in IFAIL.
|
||||
*> > N: DSTEBZ returned INFO = INFO - N;
|
||||
*> see DSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -563,12 +566,19 @@
|
||||
CALL DSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL,
|
||||
$ WORK( INDD ), WORK( INDE ), M, NSPLIT, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), WORK( INDWRK ),
|
||||
$ IWORK( INDIWO ), INFO )
|
||||
$ IWORK( INDIWO ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 30
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL DSTEIN( N, WORK( INDD ), WORK( INDE ), M, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), Z, LDZ,
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IFAIL, INFO )
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IFAIL, IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
*
|
||||
* Apply orthogonal matrix used in reduction to tridiagonal
|
||||
* form to eigenvectors returned by DSTEIN.
|
||||
|
||||
@@ -263,13 +263,14 @@
|
||||
*> INFO is INTEGER
|
||||
*> = 0: successful exit
|
||||
*> < 0: if INFO = -i, the i-th argument had an illegal value
|
||||
*> <= N: if INFO = i, then i eigenvectors failed to converge.
|
||||
*> Their indices are stored in IFAIL.
|
||||
*> > N: DPBSTF returned an error code; i.e.,
|
||||
*> if INFO = N + i, for 1 <= i <= N, then the leading
|
||||
*> principal minor of order i of B is not positive.
|
||||
*> The factorization of B could not be completed and
|
||||
*> no eigenvalues or eigenvectors were computed.
|
||||
*> <= N: if INFO = i, then i eigenvectors failed to converge
|
||||
*> in DSTEIN; their indices are stored in IFAIL.
|
||||
*> N+1..2N: if INFO = N + i, for 1 <= i <= N, then DPBSTF
|
||||
*> returned an error code; the leading principal minor
|
||||
*> of order i of B is not positive. No eigenvalues or
|
||||
*> eigenvectors were computed.
|
||||
*> > 2N: if INFO = 2*N + i, then DSTEBZ returned
|
||||
*> INFO = i; see DSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -462,12 +463,19 @@
|
||||
CALL DSTEBZ( RANGE, ORDER, N, VL, VU, IL, IU, ABSTOL,
|
||||
$ WORK( INDD ), WORK( INDE ), M, NSPLIT, W,
|
||||
$ IWORK( 1 ), IWORK( INDISP ), WORK( INDWRK ),
|
||||
$ IWORK( INDIWO ), INFO )
|
||||
$ IWORK( INDIWO ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = 2*N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 30
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL DSTEIN( N, WORK( INDD ), WORK( INDE ), M, W,
|
||||
$ IWORK( 1 ), IWORK( INDISP ), Z, LDZ,
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IFAIL, INFO )
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IFAIL, IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
*
|
||||
* Apply transformation matrix used in reduction to tridiagonal
|
||||
* form to eigenvectors returned by DSTEIN.
|
||||
|
||||
@@ -213,8 +213,11 @@
|
||||
*> INFO is 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.
|
||||
*> Their indices are stored in array IFAIL.
|
||||
*> > 0: if INFO = i, and i is:
|
||||
*> <= N: then i eigenvectors failed to converge in
|
||||
*> DSTEIN; their indices are stored in IFAIL.
|
||||
*> > N: DSTEBZ returned INFO = INFO - N;
|
||||
*> see DSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -429,12 +432,19 @@
|
||||
CALL DSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL,
|
||||
$ WORK( INDD ), WORK( INDE ), M, NSPLIT, W,
|
||||
$ IWORK( 1 ), IWORK( INDISP ), WORK( INDWRK ),
|
||||
$ IWORK( INDIWO ), INFO )
|
||||
$ IWORK( INDIWO ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 20
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL DSTEIN( N, WORK( INDD ), WORK( INDE ), M, W,
|
||||
$ IWORK( 1 ), IWORK( INDISP ), Z, LDZ,
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IFAIL, INFO )
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IFAIL, IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
*
|
||||
* Apply orthogonal matrix used in reduction to tridiagonal
|
||||
* form to eigenvectors returned by DSTEIN.
|
||||
|
||||
@@ -207,8 +207,11 @@
|
||||
*> INFO is 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.
|
||||
*> Their indices are stored in array IFAIL.
|
||||
*> > 0: if INFO = i, and i is:
|
||||
*> <= N: then i eigenvectors failed to converge in
|
||||
*> DSTEIN; their indices are stored in IFAIL.
|
||||
*> > N: DSTEBZ returned INFO = INFO - N;
|
||||
*> see DSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -248,7 +251,7 @@
|
||||
* .. Local Scalars ..
|
||||
LOGICAL ALLEIG, INDEIG, TEST, VALEIG, WANTZ
|
||||
CHARACTER ORDER
|
||||
INTEGER I, IMAX, INDISP, INDIWO, INDWRK,
|
||||
INTEGER I, IINFO, IMAX, INDISP, INDIWO, INDWRK,
|
||||
$ ISCALE, ITMP1, J, JJ, NSPLIT
|
||||
DOUBLE PRECISION BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA, SMLNUM,
|
||||
$ TMP1, TNRM, VLL, VUU
|
||||
@@ -403,12 +406,19 @@
|
||||
INDIWO = INDISP + N
|
||||
CALL DSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTOL, D, E, M,
|
||||
$ NSPLIT, W, IWORK( 1 ), IWORK( INDISP ),
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), INFO )
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 20
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL DSTEIN( N, D, E, M, W, IWORK( 1 ), IWORK( INDISP ),
|
||||
$ Z, LDZ, WORK( INDWRK ), IWORK( INDIWO ), IFAIL,
|
||||
$ INFO )
|
||||
$ IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
END IF
|
||||
*
|
||||
* If matrix was scaled, then rescale eigenvalues appropriately.
|
||||
|
||||
@@ -232,8 +232,11 @@
|
||||
*> INFO is 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.
|
||||
*> Their indices are stored in array IFAIL.
|
||||
*> > 0: if INFO = i, and i is:
|
||||
*> <= N: then i eigenvectors failed to converge in
|
||||
*> DSTEIN; their indices are stored in IFAIL.
|
||||
*> > N: DSTEBZ returned INFO = INFO - N;
|
||||
*> see DSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -482,12 +485,19 @@
|
||||
CALL DSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL,
|
||||
$ WORK( INDD ), WORK( INDE ), M, NSPLIT, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), WORK( INDWRK ),
|
||||
$ IWORK( INDIWO ), INFO )
|
||||
$ IWORK( INDIWO ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 40
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL DSTEIN( N, WORK( INDD ), WORK( INDE ), M, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), Z, LDZ,
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IFAIL, INFO )
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IFAIL, IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
*
|
||||
* Apply orthogonal matrix used in reduction to tridiagonal
|
||||
* form to eigenvectors returned by DSTEIN.
|
||||
|
||||
@@ -247,8 +247,11 @@
|
||||
*> INFO is 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.
|
||||
*> Their indices are stored in array IFAIL.
|
||||
*> > 0: if INFO = i, and i is:
|
||||
*> <= N: then i eigenvectors failed to converge in
|
||||
*> DSTEIN; their indices are stored in IFAIL.
|
||||
*> > N: DSTEBZ returned INFO = INFO - N;
|
||||
*> see DSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -540,12 +543,19 @@
|
||||
CALL DSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL,
|
||||
$ WORK( INDD ), WORK( INDE ), M, NSPLIT, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), WORK( INDWRK ),
|
||||
$ IWORK( INDIWO ), INFO )
|
||||
$ IWORK( INDIWO ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 40
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL DSTEIN( N, WORK( INDD ), WORK( INDE ), M, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), Z, LDZ,
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IFAIL, INFO )
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IFAIL, IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
*
|
||||
* Apply orthogonal matrix used in reduction to tridiagonal
|
||||
* form to eigenvectors returned by DSTEIN.
|
||||
|
||||
@@ -244,8 +244,11 @@
|
||||
*> INFO is 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.
|
||||
*> Their indices are stored in array IFAIL.
|
||||
*> > 0: if INFO = i, and i is:
|
||||
*> <= N: then i eigenvectors failed to converge in
|
||||
*> SSTEIN; their indices are stored in IFAIL.
|
||||
*> > N: SSTEBZ returned INFO = INFO - N;
|
||||
*> see SSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -474,12 +477,19 @@
|
||||
CALL SSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL,
|
||||
$ WORK( INDD ), WORK( INDE ), M, NSPLIT, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), WORK( INDWRK ),
|
||||
$ IWORK( INDIWO ), INFO )
|
||||
$ IWORK( INDIWO ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 30
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL SSTEIN( N, WORK( INDD ), WORK( INDE ), M, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), Z, LDZ,
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IFAIL, INFO )
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IFAIL, IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
*
|
||||
* Apply orthogonal matrix used in reduction to tridiagonal
|
||||
* form to eigenvectors returned by SSTEIN.
|
||||
|
||||
@@ -269,8 +269,11 @@
|
||||
*> INFO is 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.
|
||||
*> Their indices are stored in array IFAIL.
|
||||
*> > 0: if INFO = i, and i is:
|
||||
*> <= N: then i eigenvectors failed to converge in
|
||||
*> SSTEIN; their indices are stored in IFAIL.
|
||||
*> > N: SSTEBZ returned INFO = INFO - N;
|
||||
*> see SSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -564,12 +567,19 @@
|
||||
CALL SSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL,
|
||||
$ WORK( INDD ), WORK( INDE ), M, NSPLIT, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), WORK( INDWRK ),
|
||||
$ IWORK( INDIWO ), INFO )
|
||||
$ IWORK( INDIWO ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 30
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL SSTEIN( N, WORK( INDD ), WORK( INDE ), M, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), Z, LDZ,
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IFAIL, INFO )
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IFAIL, IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
*
|
||||
* Apply orthogonal matrix used in reduction to tridiagonal
|
||||
* form to eigenvectors returned by SSTEIN.
|
||||
|
||||
@@ -263,13 +263,14 @@
|
||||
*> INFO is INTEGER
|
||||
*> = 0: successful exit
|
||||
*> < 0: if INFO = -i, the i-th argument had an illegal value
|
||||
*> <= N: if INFO = i, then i eigenvectors failed to converge.
|
||||
*> Their indices are stored in IFAIL.
|
||||
*> > N: SPBSTF returned an error code; i.e.,
|
||||
*> if INFO = N + i, for 1 <= i <= N, then the leading
|
||||
*> principal minor of order i of B is not positive.
|
||||
*> The factorization of B could not be completed and
|
||||
*> no eigenvalues or eigenvectors were computed.
|
||||
*> <= N: if INFO = i, then i eigenvectors failed to converge
|
||||
*> in SSTEIN; their indices are stored in IFAIL.
|
||||
*> N+1..2N: if INFO = N + i, for 1 <= i <= N, then SPBSTF
|
||||
*> returned an error code; the leading principal minor
|
||||
*> of order i of B is not positive. No eigenvalues or
|
||||
*> eigenvectors were computed.
|
||||
*> > 2N: if INFO = 2*N + i, then SSTEBZ returned
|
||||
*> INFO = i; see SSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -462,12 +463,19 @@
|
||||
CALL SSTEBZ( RANGE, ORDER, N, VL, VU, IL, IU, ABSTOL,
|
||||
$ WORK( INDD ), WORK( INDE ), M, NSPLIT, W,
|
||||
$ IWORK( 1 ), IWORK( INDISP ), WORK( INDWRK ),
|
||||
$ IWORK( INDIWO ), INFO )
|
||||
$ IWORK( INDIWO ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = 2*N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 30
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL SSTEIN( N, WORK( INDD ), WORK( INDE ), M, W,
|
||||
$ IWORK( 1 ), IWORK( INDISP ), Z, LDZ,
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IFAIL, INFO )
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IFAIL, IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
*
|
||||
* Apply transformation matrix used in reduction to tridiagonal
|
||||
* form to eigenvectors returned by SSTEIN.
|
||||
|
||||
@@ -213,8 +213,11 @@
|
||||
*> INFO is 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.
|
||||
*> Their indices are stored in array IFAIL.
|
||||
*> > 0: if INFO = i, and i is:
|
||||
*> <= N: then i eigenvectors failed to converge in
|
||||
*> SSTEIN; their indices are stored in IFAIL.
|
||||
*> > N: SSTEBZ returned INFO = INFO - N;
|
||||
*> see SSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -429,12 +432,19 @@
|
||||
CALL SSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL,
|
||||
$ WORK( INDD ), WORK( INDE ), M, NSPLIT, W,
|
||||
$ IWORK( 1 ), IWORK( INDISP ), WORK( INDWRK ),
|
||||
$ IWORK( INDIWO ), INFO )
|
||||
$ IWORK( INDIWO ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 20
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL SSTEIN( N, WORK( INDD ), WORK( INDE ), M, W,
|
||||
$ IWORK( 1 ), IWORK( INDISP ), Z, LDZ,
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IFAIL, INFO )
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IFAIL, IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
*
|
||||
* Apply orthogonal matrix used in reduction to tridiagonal
|
||||
* form to eigenvectors returned by SSTEIN.
|
||||
|
||||
@@ -207,8 +207,11 @@
|
||||
*> INFO is 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.
|
||||
*> Their indices are stored in array IFAIL.
|
||||
*> > 0: if INFO = i, and i is:
|
||||
*> <= N: then i eigenvectors failed to converge in
|
||||
*> SSTEIN; their indices are stored in IFAIL.
|
||||
*> > N: SSTEBZ returned INFO = INFO - N;
|
||||
*> see SSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -248,7 +251,7 @@
|
||||
* .. Local Scalars ..
|
||||
LOGICAL ALLEIG, INDEIG, TEST, VALEIG, WANTZ
|
||||
CHARACTER ORDER
|
||||
INTEGER I, IMAX, INDISP, INDIWO, INDWRK,
|
||||
INTEGER I, IINFO, IMAX, INDISP, INDIWO, INDWRK,
|
||||
$ ISCALE, ITMP1, J, JJ, NSPLIT
|
||||
REAL BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA, SMLNUM,
|
||||
$ TMP1, TNRM, VLL, VUU
|
||||
@@ -403,12 +406,19 @@
|
||||
INDIWO = INDISP + N
|
||||
CALL SSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTOL, D, E, M,
|
||||
$ NSPLIT, W, IWORK( 1 ), IWORK( INDISP ),
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), INFO )
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 20
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL SSTEIN( N, D, E, M, W, IWORK( 1 ), IWORK( INDISP ),
|
||||
$ Z, LDZ, WORK( INDWRK ), IWORK( INDIWO ), IFAIL,
|
||||
$ INFO )
|
||||
$ IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
END IF
|
||||
*
|
||||
* If matrix was scaled, then rescale eigenvalues appropriately.
|
||||
|
||||
@@ -232,8 +232,11 @@
|
||||
*> INFO is 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.
|
||||
*> Their indices are stored in array IFAIL.
|
||||
*> > 0: if INFO = i, and i is:
|
||||
*> <= N: then i eigenvectors failed to converge in
|
||||
*> SSTEIN; their indices are stored in IFAIL.
|
||||
*> > N: SSTEBZ returned INFO = INFO - N;
|
||||
*> see SSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -482,12 +485,19 @@
|
||||
CALL SSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL,
|
||||
$ WORK( INDD ), WORK( INDE ), M, NSPLIT, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), WORK( INDWRK ),
|
||||
$ IWORK( INDIWO ), INFO )
|
||||
$ IWORK( INDIWO ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 40
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL SSTEIN( N, WORK( INDD ), WORK( INDE ), M, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), Z, LDZ,
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IFAIL, INFO )
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IFAIL, IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
*
|
||||
* Apply orthogonal matrix used in reduction to tridiagonal
|
||||
* form to eigenvectors returned by SSTEIN.
|
||||
|
||||
@@ -247,8 +247,11 @@
|
||||
*> INFO is 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.
|
||||
*> Their indices are stored in array IFAIL.
|
||||
*> > 0: if INFO = i, and i is:
|
||||
*> <= N: then i eigenvectors failed to converge in
|
||||
*> SSTEIN; their indices are stored in IFAIL.
|
||||
*> > N: SSTEBZ returned INFO = INFO - N;
|
||||
*> see SSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -541,12 +544,19 @@
|
||||
CALL SSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL,
|
||||
$ WORK( INDD ), WORK( INDE ), M, NSPLIT, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), WORK( INDWRK ),
|
||||
$ IWORK( INDIWO ), INFO )
|
||||
$ IWORK( INDIWO ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 40
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL SSTEIN( N, WORK( INDD ), WORK( INDE ), M, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), Z, LDZ,
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IFAIL, INFO )
|
||||
$ WORK( INDWRK ), IWORK( INDIWO ), IFAIL, IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
*
|
||||
* Apply orthogonal matrix used in reduction to tridiagonal
|
||||
* form to eigenvectors returned by SSTEIN.
|
||||
|
||||
@@ -246,8 +246,11 @@
|
||||
*> INFO is 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.
|
||||
*> Their indices are stored in array IFAIL.
|
||||
*> > 0: if INFO = i, and i is:
|
||||
*> <= N: then i eigenvectors failed to converge in
|
||||
*> ZSTEIN; their indices are stored in IFAIL.
|
||||
*> > N: DSTEBZ returned INFO = INFO - N;
|
||||
*> see DSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -484,12 +487,19 @@
|
||||
CALL DSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL,
|
||||
$ RWORK( INDD ), RWORK( INDE ), M, NSPLIT, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), RWORK( INDRWK ),
|
||||
$ IWORK( INDIWK ), INFO )
|
||||
$ IWORK( INDIWK ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 30
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL ZSTEIN( N, RWORK( INDD ), RWORK( INDE ), M, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), Z, LDZ,
|
||||
$ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, INFO )
|
||||
$ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
*
|
||||
* Apply unitary matrix used in reduction to tridiagonal
|
||||
* form to eigenvectors returned by ZSTEIN.
|
||||
|
||||
@@ -273,8 +273,11 @@
|
||||
*> INFO is 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.
|
||||
*> Their indices are stored in array IFAIL.
|
||||
*> > 0: if INFO = i, and i is:
|
||||
*> <= N: then i eigenvectors failed to converge in
|
||||
*> ZSTEIN; their indices are stored in IFAIL.
|
||||
*> > N: DSTEBZ returned INFO = INFO - N;
|
||||
*> see DSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -576,12 +579,19 @@
|
||||
CALL DSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL,
|
||||
$ RWORK( INDD ), RWORK( INDE ), M, NSPLIT, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), RWORK( INDRWK ),
|
||||
$ IWORK( INDIWK ), INFO )
|
||||
$ IWORK( INDIWK ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 30
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL ZSTEIN( N, RWORK( INDD ), RWORK( INDE ), M, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), Z, LDZ,
|
||||
$ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, INFO )
|
||||
$ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
*
|
||||
* Apply unitary matrix used in reduction to tridiagonal
|
||||
* form to eigenvectors returned by ZSTEIN.
|
||||
|
||||
@@ -270,12 +270,14 @@
|
||||
*> = 0: successful exit
|
||||
*> < 0: if INFO = -i, the i-th argument had an illegal value
|
||||
*> > 0: if INFO = i, and i is:
|
||||
*> <= N: then i eigenvectors failed to converge. Their
|
||||
*> indices are stored in array IFAIL.
|
||||
*> > N: if INFO = N + i, for 1 <= i <= N, then ZPBSTF
|
||||
*> returned INFO = i: B is not positive definite.
|
||||
*> The factorization of B could not be completed and
|
||||
*> no eigenvalues or eigenvectors were computed.
|
||||
*> <= N: then i eigenvectors failed to converge in
|
||||
*> ZSTEIN; their indices are stored in IFAIL.
|
||||
*> N+1..2N: if INFO = N + i, for 1 <= i <= N, then ZPBSTF
|
||||
*> returned INFO = i: B is not positive definite.
|
||||
*> The factorization of B could not be completed
|
||||
*> and no eigenvalues or eigenvectors were computed.
|
||||
*> > 2N: if INFO = 2*N + i, then DSTEBZ returned
|
||||
*> INFO = i; see DSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -475,12 +477,19 @@
|
||||
CALL DSTEBZ( RANGE, ORDER, N, VL, VU, IL, IU, ABSTOL,
|
||||
$ RWORK( INDD ), RWORK( INDE ), M, NSPLIT, W,
|
||||
$ IWORK( 1 ), IWORK( INDISP ), RWORK( INDRWK ),
|
||||
$ IWORK( INDIWK ), INFO )
|
||||
$ IWORK( INDIWK ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = 2*N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 30
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL ZSTEIN( N, RWORK( INDD ), RWORK( INDE ), M, W,
|
||||
$ IWORK( 1 ), IWORK( INDISP ), Z, LDZ,
|
||||
$ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, INFO )
|
||||
$ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
*
|
||||
* Apply unitary matrix used in reduction to tridiagonal
|
||||
* form to eigenvectors returned by ZSTEIN.
|
||||
|
||||
@@ -238,8 +238,11 @@
|
||||
*> INFO is 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.
|
||||
*> Their indices are stored in array IFAIL.
|
||||
*> > 0: if INFO = i, and i is:
|
||||
*> <= N: then i eigenvectors failed to converge in
|
||||
*> ZSTEIN; their indices are stored in IFAIL.
|
||||
*> > N: DSTEBZ returned INFO = INFO - N;
|
||||
*> see DSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -494,12 +497,19 @@
|
||||
CALL DSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL,
|
||||
$ RWORK( INDD ), RWORK( INDE ), M, NSPLIT, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), RWORK( INDRWK ),
|
||||
$ IWORK( INDIWK ), INFO )
|
||||
$ IWORK( INDIWK ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 40
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL ZSTEIN( N, RWORK( INDD ), RWORK( INDE ), M, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), Z, LDZ,
|
||||
$ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, INFO )
|
||||
$ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
*
|
||||
* Apply unitary matrix used in reduction to tridiagonal
|
||||
* form to eigenvectors returned by ZSTEIN.
|
||||
|
||||
@@ -253,8 +253,11 @@
|
||||
*> INFO is 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.
|
||||
*> Their indices are stored in array IFAIL.
|
||||
*> > 0: if INFO = i, and i is:
|
||||
*> <= N: then i eigenvectors failed to converge in
|
||||
*> ZSTEIN; their indices are stored in IFAIL.
|
||||
*> > N: DSTEBZ returned INFO = INFO - N;
|
||||
*> see DSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -552,12 +555,19 @@
|
||||
CALL DSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL,
|
||||
$ RWORK( INDD ), RWORK( INDE ), M, NSPLIT, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), RWORK( INDRWK ),
|
||||
$ IWORK( INDIWK ), INFO )
|
||||
$ IWORK( INDIWK ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 40
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL ZSTEIN( N, RWORK( INDD ), RWORK( INDE ), M, W,
|
||||
$ IWORK( INDIBL ), IWORK( INDISP ), Z, LDZ,
|
||||
$ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, INFO )
|
||||
$ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
*
|
||||
* Apply unitary matrix used in reduction to tridiagonal
|
||||
* form to eigenvectors returned by ZSTEIN.
|
||||
|
||||
@@ -219,8 +219,11 @@
|
||||
*> INFO is 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.
|
||||
*> Their indices are stored in array IFAIL.
|
||||
*> > 0: if INFO = i, and i is:
|
||||
*> <= N: then i eigenvectors failed to converge in
|
||||
*> ZSTEIN; their indices are stored in IFAIL.
|
||||
*> > N: DSTEBZ returned INFO = INFO - N;
|
||||
*> see DSTEBZ for details.
|
||||
*> \endverbatim
|
||||
*
|
||||
* Authors:
|
||||
@@ -439,12 +442,19 @@
|
||||
CALL DSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL,
|
||||
$ RWORK( INDD ), RWORK( INDE ), M, NSPLIT, W,
|
||||
$ IWORK( 1 ), IWORK( INDISP ), RWORK( INDRWK ),
|
||||
$ IWORK( INDIWK ), INFO )
|
||||
$ IWORK( INDIWK ), IINFO )
|
||||
IF( IINFO.NE.0 ) THEN
|
||||
INFO = N + IINFO
|
||||
IF( IINFO.NE.1 )
|
||||
$ GO TO 20
|
||||
END IF
|
||||
*
|
||||
IF( WANTZ ) THEN
|
||||
CALL ZSTEIN( N, RWORK( INDD ), RWORK( INDE ), M, W,
|
||||
$ IWORK( 1 ), IWORK( INDISP ), Z, LDZ,
|
||||
$ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, INFO )
|
||||
$ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, IINFO )
|
||||
IF( IINFO.NE.0 .AND. INFO.EQ.0 )
|
||||
$ INFO = IINFO
|
||||
*
|
||||
* Apply unitary matrix used in reduction to tridiagonal
|
||||
* form to eigenvectors returned by ZSTEIN.
|
||||
|
||||
Reference in New Issue
Block a user