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:
Martin Kroeker
2026-03-23 18:32:25 +01:00
committed by GitHub
26 changed files with 378 additions and 124 deletions

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -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.