version 1.11, 2012/08/22 09:48:12
|
version 1.20, 2023/08/07 08:38:48
|
Line 2
|
Line 2
|
* |
* |
* =========== DOCUMENTATION =========== |
* =========== DOCUMENTATION =========== |
* |
* |
* Online html documentation available at |
* Online html documentation available at |
* http://www.netlib.org/lapack/explore-html/ |
* http://www.netlib.org/lapack/explore-html/ |
* |
* |
*> \htmlonly |
*> \htmlonly |
*> Download DGEEVX + dependencies |
*> Download DGEEVX + dependencies |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgeevx.f"> |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgeevx.f"> |
*> [TGZ]</a> |
*> [TGZ]</a> |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgeevx.f"> |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgeevx.f"> |
*> [ZIP]</a> |
*> [ZIP]</a> |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeevx.f"> |
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dgeevx.f"> |
*> [TXT]</a> |
*> [TXT]</a> |
*> \endhtmlonly |
*> \endhtmlonly |
* |
* |
* Definition: |
* Definition: |
* =========== |
* =========== |
Line 21
|
Line 21
|
* SUBROUTINE DGEEVX( BALANC, JOBVL, JOBVR, SENSE, N, A, LDA, WR, WI, |
* SUBROUTINE DGEEVX( BALANC, JOBVL, JOBVR, SENSE, N, A, LDA, WR, WI, |
* VL, LDVL, VR, LDVR, ILO, IHI, SCALE, ABNRM, |
* VL, LDVL, VR, LDVR, ILO, IHI, SCALE, ABNRM, |
* RCONDE, RCONDV, WORK, LWORK, IWORK, INFO ) |
* RCONDE, RCONDV, WORK, LWORK, IWORK, INFO ) |
* |
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
* CHARACTER BALANC, JOBVL, JOBVR, SENSE |
* CHARACTER BALANC, JOBVL, JOBVR, SENSE |
* INTEGER IHI, ILO, INFO, LDA, LDVL, LDVR, LWORK, N |
* INTEGER IHI, ILO, INFO, LDA, LDVL, LDVR, LWORK, N |
Line 33
|
Line 33
|
* $ SCALE( * ), VL( LDVL, * ), VR( LDVR, * ), |
* $ SCALE( * ), VL( LDVL, * ), VR( LDVR, * ), |
* $ WI( * ), WORK( * ), WR( * ) |
* $ WI( * ), WORK( * ), WR( * ) |
* .. |
* .. |
* |
* |
* |
* |
*> \par Purpose: |
*> \par Purpose: |
* ============= |
* ============= |
Line 53
|
Line 53
|
*> A * v(j) = lambda(j) * v(j) |
*> A * v(j) = lambda(j) * v(j) |
*> where lambda(j) is its eigenvalue. |
*> where lambda(j) is its eigenvalue. |
*> The left eigenvector u(j) of A satisfies |
*> The left eigenvector u(j) of A satisfies |
*> u(j)**T * A = lambda(j) * u(j)**T |
*> u(j)**H * A = lambda(j) * u(j)**H |
*> where u(j)**T denotes the transpose of u(j). |
*> where u(j)**H denotes the conjugate-transpose of u(j). |
*> |
*> |
*> The computed eigenvectors are normalized to have Euclidean norm |
*> The computed eigenvectors are normalized to have Euclidean norm |
*> equal to 1 and largest component real. |
*> equal to 1 and largest component real. |
Line 289
|
Line 289
|
* Authors: |
* Authors: |
* ======== |
* ======== |
* |
* |
*> \author Univ. of Tennessee |
*> \author Univ. of Tennessee |
*> \author Univ. of California Berkeley |
*> \author Univ. of California Berkeley |
*> \author Univ. of Colorado Denver |
*> \author Univ. of Colorado Denver |
*> \author NAG Ltd. |
*> \author NAG Ltd. |
|
* |
* |
* |
*> \date November 2011 |
* @precisions fortran d -> s |
* |
* |
*> \ingroup doubleGEeigen |
*> \ingroup doubleGEeigen |
* |
* |
Line 302
|
Line 303
|
SUBROUTINE DGEEVX( BALANC, JOBVL, JOBVR, SENSE, N, A, LDA, WR, WI, |
SUBROUTINE DGEEVX( BALANC, JOBVL, JOBVR, SENSE, N, A, LDA, WR, WI, |
$ VL, LDVL, VR, LDVR, ILO, IHI, SCALE, ABNRM, |
$ VL, LDVL, VR, LDVR, ILO, IHI, SCALE, ABNRM, |
$ RCONDE, RCONDV, WORK, LWORK, IWORK, INFO ) |
$ RCONDE, RCONDV, WORK, LWORK, IWORK, INFO ) |
|
implicit none |
* |
* |
* -- LAPACK driver routine (version 3.4.0) -- |
* -- LAPACK driver routine -- |
* -- LAPACK is a software package provided by Univ. of Tennessee, -- |
* -- LAPACK is a software package provided by Univ. of Tennessee, -- |
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- |
* November 2011 |
|
* |
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
CHARACTER BALANC, JOBVL, JOBVR, SENSE |
CHARACTER BALANC, JOBVL, JOBVR, SENSE |
Line 330
|
Line 331
|
LOGICAL LQUERY, SCALEA, WANTVL, WANTVR, WNTSNB, WNTSNE, |
LOGICAL LQUERY, SCALEA, WANTVL, WANTVR, WNTSNB, WNTSNE, |
$ WNTSNN, WNTSNV |
$ WNTSNN, WNTSNV |
CHARACTER JOB, SIDE |
CHARACTER JOB, SIDE |
INTEGER HSWORK, I, ICOND, IERR, ITAU, IWRK, K, MAXWRK, |
INTEGER HSWORK, I, ICOND, IERR, ITAU, IWRK, K, |
$ MINWRK, NOUT |
$ LWORK_TREVC, MAXWRK, MINWRK, NOUT |
DOUBLE PRECISION ANRM, BIGNUM, CS, CSCALE, EPS, R, SCL, SMLNUM, |
DOUBLE PRECISION ANRM, BIGNUM, CS, CSCALE, EPS, R, SCL, SMLNUM, |
$ SN |
$ SN |
* .. |
* .. |
Line 341
|
Line 342
|
* .. |
* .. |
* .. External Subroutines .. |
* .. External Subroutines .. |
EXTERNAL DGEBAK, DGEBAL, DGEHRD, DHSEQR, DLABAD, DLACPY, |
EXTERNAL DGEBAK, DGEBAL, DGEHRD, DHSEQR, DLABAD, DLACPY, |
$ DLARTG, DLASCL, DORGHR, DROT, DSCAL, DTREVC, |
$ DLARTG, DLASCL, DORGHR, DROT, DSCAL, DTREVC3, |
$ DTRSNA, XERBLA |
$ DTRSNA, XERBLA |
* .. |
* .. |
* .. External Functions .. |
* .. External Functions .. |
Line 366
|
Line 367
|
WNTSNE = LSAME( SENSE, 'E' ) |
WNTSNE = LSAME( SENSE, 'E' ) |
WNTSNV = LSAME( SENSE, 'V' ) |
WNTSNV = LSAME( SENSE, 'V' ) |
WNTSNB = LSAME( SENSE, 'B' ) |
WNTSNB = LSAME( SENSE, 'B' ) |
IF( .NOT.( LSAME( BALANC, 'N' ) .OR. LSAME( BALANC, |
IF( .NOT.( LSAME( BALANC, 'N' ) .OR. LSAME( BALANC, 'S' ) |
$ 'S' ) .OR. LSAME( BALANC, 'P' ) .OR. LSAME( BALANC, 'B' ) ) ) |
$ .OR. LSAME( BALANC, 'P' ) .OR. LSAME( BALANC, 'B' ) ) ) |
$ THEN |
$ THEN |
INFO = -1 |
INFO = -1 |
ELSE IF( ( .NOT.WANTVL ) .AND. ( .NOT.LSAME( JOBVL, 'N' ) ) ) THEN |
ELSE IF( ( .NOT.WANTVL ) .AND. ( .NOT.LSAME( JOBVL, 'N' ) ) ) THEN |
Line 406
|
Line 407
|
MAXWRK = N + N*ILAENV( 1, 'DGEHRD', ' ', N, 1, N, 0 ) |
MAXWRK = N + N*ILAENV( 1, 'DGEHRD', ' ', N, 1, N, 0 ) |
* |
* |
IF( WANTVL ) THEN |
IF( WANTVL ) THEN |
|
CALL DTREVC3( 'L', 'B', SELECT, N, A, LDA, |
|
$ VL, LDVL, VR, LDVR, |
|
$ N, NOUT, WORK, -1, IERR ) |
|
LWORK_TREVC = INT( WORK(1) ) |
|
MAXWRK = MAX( MAXWRK, N + LWORK_TREVC ) |
CALL DHSEQR( 'S', 'V', N, 1, N, A, LDA, WR, WI, VL, LDVL, |
CALL DHSEQR( 'S', 'V', N, 1, N, A, LDA, WR, WI, VL, LDVL, |
$ WORK, -1, INFO ) |
$ WORK, -1, INFO ) |
ELSE IF( WANTVR ) THEN |
ELSE IF( WANTVR ) THEN |
|
CALL DTREVC3( 'R', 'B', SELECT, N, A, LDA, |
|
$ VL, LDVL, VR, LDVR, |
|
$ N, NOUT, WORK, -1, IERR ) |
|
LWORK_TREVC = INT( WORK(1) ) |
|
MAXWRK = MAX( MAXWRK, N + LWORK_TREVC ) |
CALL DHSEQR( 'S', 'V', N, 1, N, A, LDA, WR, WI, VR, LDVR, |
CALL DHSEQR( 'S', 'V', N, 1, N, A, LDA, WR, WI, VR, LDVR, |
$ WORK, -1, INFO ) |
$ WORK, -1, INFO ) |
ELSE |
ELSE |
Line 420
|
Line 431
|
$ LDVR, WORK, -1, INFO ) |
$ LDVR, WORK, -1, INFO ) |
END IF |
END IF |
END IF |
END IF |
HSWORK = WORK( 1 ) |
HSWORK = INT( WORK(1) ) |
* |
* |
IF( ( .NOT.WANTVL ) .AND. ( .NOT.WANTVR ) ) THEN |
IF( ( .NOT.WANTVL ) .AND. ( .NOT.WANTVR ) ) THEN |
MINWRK = 2*N |
MINWRK = 2*N |
Line 572
|
Line 583
|
$ WORK( IWRK ), LWORK-IWRK+1, INFO ) |
$ WORK( IWRK ), LWORK-IWRK+1, INFO ) |
END IF |
END IF |
* |
* |
* If INFO > 0 from DHSEQR, then quit |
* If INFO .NE. 0 from DHSEQR, then quit |
* |
* |
IF( INFO.GT.0 ) |
IF( INFO.NE.0 ) |
$ GO TO 50 |
$ GO TO 50 |
* |
* |
IF( WANTVL .OR. WANTVR ) THEN |
IF( WANTVL .OR. WANTVR ) THEN |
* |
* |
* Compute left and/or right eigenvectors |
* Compute left and/or right eigenvectors |
* (Workspace: need 3*N) |
* (Workspace: need 3*N, prefer N + 2*N*NB) |
* |
* |
CALL DTREVC( SIDE, 'B', SELECT, N, A, LDA, VL, LDVL, VR, LDVR, |
CALL DTREVC3( SIDE, 'B', SELECT, N, A, LDA, VL, LDVL, VR, LDVR, |
$ N, NOUT, WORK( IWRK ), IERR ) |
$ N, NOUT, WORK( IWRK ), LWORK-IWRK+1, IERR ) |
END IF |
END IF |
* |
* |
* Compute condition numbers if desired |
* Compute condition numbers if desired |