diff --git a/lapack-netlib/SRC/chbevx.f b/lapack-netlib/SRC/chbevx.f index 6b5f549a7f..3c42309204 100644 --- a/lapack-netlib/SRC/chbevx.f +++ b/lapack-netlib/SRC/chbevx.f @@ -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 @@ SUBROUTINE CHBEVX( JOBZ, RANGE, UPLO, N, KD, AB, LDAB, Q, LDQ, VL, 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. diff --git a/lapack-netlib/SRC/chbevx_2stage.f b/lapack-netlib/SRC/chbevx_2stage.f index 1d609dfbd3..3156265047 100644 --- a/lapack-netlib/SRC/chbevx_2stage.f +++ b/lapack-netlib/SRC/chbevx_2stage.f @@ -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 @@ SUBROUTINE CHBEVX_2STAGE( JOBZ, RANGE, UPLO, N, KD, AB, LDAB, 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. diff --git a/lapack-netlib/SRC/chbgvx.f b/lapack-netlib/SRC/chbgvx.f index 6b37a4127a..0984c1b9ac 100644 --- a/lapack-netlib/SRC/chbgvx.f +++ b/lapack-netlib/SRC/chbgvx.f @@ -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 @@ SUBROUTINE CHBGVX( JOBZ, RANGE, UPLO, N, KA, KB, AB, LDAB, BB, 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. diff --git a/lapack-netlib/SRC/cheevx.f b/lapack-netlib/SRC/cheevx.f index a8a2bde630..0293ad9123 100644 --- a/lapack-netlib/SRC/cheevx.f +++ b/lapack-netlib/SRC/cheevx.f @@ -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 @@ SUBROUTINE CHEEVX( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU, IL, IU, 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. diff --git a/lapack-netlib/SRC/cheevx_2stage.f b/lapack-netlib/SRC/cheevx_2stage.f index 70a681ec4e..7d0d0325f4 100644 --- a/lapack-netlib/SRC/cheevx_2stage.f +++ b/lapack-netlib/SRC/cheevx_2stage.f @@ -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 @@ SUBROUTINE CHEEVX_2STAGE( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU, 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. diff --git a/lapack-netlib/SRC/chpevx.f b/lapack-netlib/SRC/chpevx.f index 1f602701a0..a64907d8a3 100644 --- a/lapack-netlib/SRC/chpevx.f +++ b/lapack-netlib/SRC/chpevx.f @@ -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 @@ SUBROUTINE CHPEVX( JOBZ, RANGE, UPLO, N, AP, VL, VU, IL, IU, 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. diff --git a/lapack-netlib/SRC/dsbevx.f b/lapack-netlib/SRC/dsbevx.f index c5886a2d6a..6f185cb129 100644 --- a/lapack-netlib/SRC/dsbevx.f +++ b/lapack-netlib/SRC/dsbevx.f @@ -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 @@ SUBROUTINE DSBEVX( JOBZ, RANGE, UPLO, N, KD, AB, LDAB, Q, LDQ, VL, 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. diff --git a/lapack-netlib/SRC/dsbevx_2stage.f b/lapack-netlib/SRC/dsbevx_2stage.f index b57eee29f1..4f578f6c88 100644 --- a/lapack-netlib/SRC/dsbevx_2stage.f +++ b/lapack-netlib/SRC/dsbevx_2stage.f @@ -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 @@ SUBROUTINE DSBEVX_2STAGE( JOBZ, RANGE, UPLO, N, KD, AB, LDAB, Q, 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. diff --git a/lapack-netlib/SRC/dsbgvx.f b/lapack-netlib/SRC/dsbgvx.f index 53deae5800..24f541c474 100644 --- a/lapack-netlib/SRC/dsbgvx.f +++ b/lapack-netlib/SRC/dsbgvx.f @@ -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 @@ SUBROUTINE DSBGVX( JOBZ, RANGE, UPLO, N, KA, KB, AB, LDAB, BB, 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. diff --git a/lapack-netlib/SRC/dspevx.f b/lapack-netlib/SRC/dspevx.f index 658cb1f527..58189e6d56 100644 --- a/lapack-netlib/SRC/dspevx.f +++ b/lapack-netlib/SRC/dspevx.f @@ -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 @@ SUBROUTINE DSPEVX( JOBZ, RANGE, UPLO, N, AP, VL, VU, IL, IU, 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. diff --git a/lapack-netlib/SRC/dstevx.f b/lapack-netlib/SRC/dstevx.f index e0cd07da05..bec98530bb 100644 --- a/lapack-netlib/SRC/dstevx.f +++ b/lapack-netlib/SRC/dstevx.f @@ -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 @@ SUBROUTINE DSTEVX( JOBZ, RANGE, N, D, E, VL, VU, IL, IU, ABSTOL, * .. 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 @@ SUBROUTINE DSTEVX( JOBZ, RANGE, N, D, E, VL, VU, IL, IU, ABSTOL, 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. diff --git a/lapack-netlib/SRC/dsyevx.f b/lapack-netlib/SRC/dsyevx.f index fd6a78e320..6d924c47fd 100644 --- a/lapack-netlib/SRC/dsyevx.f +++ b/lapack-netlib/SRC/dsyevx.f @@ -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 @@ SUBROUTINE DSYEVX( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU, IL, IU, 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. diff --git a/lapack-netlib/SRC/dsyevx_2stage.f b/lapack-netlib/SRC/dsyevx_2stage.f index dbb3203d29..18cc883f7a 100644 --- a/lapack-netlib/SRC/dsyevx_2stage.f +++ b/lapack-netlib/SRC/dsyevx_2stage.f @@ -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 @@ SUBROUTINE DSYEVX_2STAGE( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU, 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. diff --git a/lapack-netlib/SRC/ssbevx.f b/lapack-netlib/SRC/ssbevx.f index 313d29e12a..9961cdd425 100644 --- a/lapack-netlib/SRC/ssbevx.f +++ b/lapack-netlib/SRC/ssbevx.f @@ -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 @@ SUBROUTINE SSBEVX( JOBZ, RANGE, UPLO, N, KD, AB, LDAB, Q, LDQ, VL, 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. diff --git a/lapack-netlib/SRC/ssbevx_2stage.f b/lapack-netlib/SRC/ssbevx_2stage.f index d25d3639a5..33c2e5cac3 100644 --- a/lapack-netlib/SRC/ssbevx_2stage.f +++ b/lapack-netlib/SRC/ssbevx_2stage.f @@ -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 @@ SUBROUTINE SSBEVX_2STAGE( JOBZ, RANGE, UPLO, N, KD, AB, LDAB, Q, 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. diff --git a/lapack-netlib/SRC/ssbgvx.f b/lapack-netlib/SRC/ssbgvx.f index 3607fae82c..11d3257294 100644 --- a/lapack-netlib/SRC/ssbgvx.f +++ b/lapack-netlib/SRC/ssbgvx.f @@ -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 @@ SUBROUTINE SSBGVX( JOBZ, RANGE, UPLO, N, KA, KB, AB, LDAB, BB, 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. diff --git a/lapack-netlib/SRC/sspevx.f b/lapack-netlib/SRC/sspevx.f index 6d60ed7aca..4eba31870e 100644 --- a/lapack-netlib/SRC/sspevx.f +++ b/lapack-netlib/SRC/sspevx.f @@ -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 @@ SUBROUTINE SSPEVX( JOBZ, RANGE, UPLO, N, AP, VL, VU, IL, IU, 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. diff --git a/lapack-netlib/SRC/sstevx.f b/lapack-netlib/SRC/sstevx.f index 6d8c8e5cab..ecadf486f1 100644 --- a/lapack-netlib/SRC/sstevx.f +++ b/lapack-netlib/SRC/sstevx.f @@ -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 @@ SUBROUTINE SSTEVX( JOBZ, RANGE, N, D, E, VL, VU, IL, IU, ABSTOL, * .. 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 @@ SUBROUTINE SSTEVX( JOBZ, RANGE, N, D, E, VL, VU, IL, IU, ABSTOL, 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. diff --git a/lapack-netlib/SRC/ssyevx.f b/lapack-netlib/SRC/ssyevx.f index aaed6dad57..4d5de0a88b 100644 --- a/lapack-netlib/SRC/ssyevx.f +++ b/lapack-netlib/SRC/ssyevx.f @@ -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 @@ SUBROUTINE SSYEVX( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU, IL, IU, 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. diff --git a/lapack-netlib/SRC/ssyevx_2stage.f b/lapack-netlib/SRC/ssyevx_2stage.f index a8585e5f76..6ae126b2f3 100644 --- a/lapack-netlib/SRC/ssyevx_2stage.f +++ b/lapack-netlib/SRC/ssyevx_2stage.f @@ -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 @@ SUBROUTINE SSYEVX_2STAGE( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU, 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. diff --git a/lapack-netlib/SRC/zhbevx.f b/lapack-netlib/SRC/zhbevx.f index 77bd721b3c..611b12aefd 100644 --- a/lapack-netlib/SRC/zhbevx.f +++ b/lapack-netlib/SRC/zhbevx.f @@ -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 @@ SUBROUTINE ZHBEVX( JOBZ, RANGE, UPLO, N, KD, AB, LDAB, Q, LDQ, VL, 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. diff --git a/lapack-netlib/SRC/zhbevx_2stage.f b/lapack-netlib/SRC/zhbevx_2stage.f index 2a9896d430..9519b0e569 100644 --- a/lapack-netlib/SRC/zhbevx_2stage.f +++ b/lapack-netlib/SRC/zhbevx_2stage.f @@ -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 @@ SUBROUTINE ZHBEVX_2STAGE( JOBZ, RANGE, UPLO, N, KD, AB, LDAB, 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. diff --git a/lapack-netlib/SRC/zhbgvx.f b/lapack-netlib/SRC/zhbgvx.f index 3832ed4141..54c27b57f0 100644 --- a/lapack-netlib/SRC/zhbgvx.f +++ b/lapack-netlib/SRC/zhbgvx.f @@ -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 @@ SUBROUTINE ZHBGVX( JOBZ, RANGE, UPLO, N, KA, KB, AB, LDAB, BB, 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. diff --git a/lapack-netlib/SRC/zheevx.f b/lapack-netlib/SRC/zheevx.f index 71c358b371..cf14be9da5 100644 --- a/lapack-netlib/SRC/zheevx.f +++ b/lapack-netlib/SRC/zheevx.f @@ -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 @@ SUBROUTINE ZHEEVX( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU, IL, IU, 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. diff --git a/lapack-netlib/SRC/zheevx_2stage.f b/lapack-netlib/SRC/zheevx_2stage.f index 1d4dfe9c59..d74beab235 100644 --- a/lapack-netlib/SRC/zheevx_2stage.f +++ b/lapack-netlib/SRC/zheevx_2stage.f @@ -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 @@ SUBROUTINE ZHEEVX_2STAGE( JOBZ, RANGE, UPLO, N, A, LDA, VL, VU, 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. diff --git a/lapack-netlib/SRC/zhpevx.f b/lapack-netlib/SRC/zhpevx.f index 0fc80c51a4..0acb505f64 100644 --- a/lapack-netlib/SRC/zhpevx.f +++ b/lapack-netlib/SRC/zhpevx.f @@ -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 @@ SUBROUTINE ZHPEVX( JOBZ, RANGE, UPLO, N, AP, VL, VU, IL, IU, 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.