version 1.2, 2010/04/21 13:45:39
|
version 1.9, 2011/07/22 07:38:21
|
Line 1
|
Line 1
|
SUBROUTINE ZTGEX2( WANTQ, WANTZ, N, A, LDA, B, LDB, Q, LDQ, Z, |
SUBROUTINE ZTGEX2( WANTQ, WANTZ, N, A, LDA, B, LDB, Q, LDQ, Z, |
$ LDZ, J1, INFO ) |
$ LDZ, J1, INFO ) |
* |
* |
* -- LAPACK auxiliary routine (version 3.2) -- |
* -- LAPACK auxiliary routine (version 3.3.1) -- |
* -- 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 2006 |
* -- April 2011 -- |
* |
* |
* .. Scalar Arguments .. |
* .. Scalar Arguments .. |
LOGICAL WANTQ, WANTZ |
LOGICAL WANTQ, WANTZ |
Line 28
|
Line 28
|
* Optionally, the matrices Q and Z of generalized Schur vectors are |
* Optionally, the matrices Q and Z of generalized Schur vectors are |
* updated. |
* updated. |
* |
* |
* Q(in) * A(in) * Z(in)' = Q(out) * A(out) * Z(out)' |
* Q(in) * A(in) * Z(in)**H = Q(out) * A(out) * Z(out)**H |
* Q(in) * B(in) * Z(in)' = Q(out) * B(out) * Z(out)' |
* Q(in) * B(in) * Z(in)**H = Q(out) * B(out) * Z(out)**H |
* |
* |
* |
* |
* Arguments |
* Arguments |
Line 118
|
Line 118
|
COMPLEX*16 CZERO, CONE |
COMPLEX*16 CZERO, CONE |
PARAMETER ( CZERO = ( 0.0D+0, 0.0D+0 ), |
PARAMETER ( CZERO = ( 0.0D+0, 0.0D+0 ), |
$ CONE = ( 1.0D+0, 0.0D+0 ) ) |
$ CONE = ( 1.0D+0, 0.0D+0 ) ) |
DOUBLE PRECISION TEN |
DOUBLE PRECISION TWENTY |
PARAMETER ( TEN = 10.0D+0 ) |
PARAMETER ( TWENTY = 2.0D+1 ) |
INTEGER LDST |
INTEGER LDST |
PARAMETER ( LDST = 2 ) |
PARAMETER ( LDST = 2 ) |
LOGICAL WANDS |
LOGICAL WANDS |
Line 173
|
Line 173
|
CALL ZLACPY( 'Full', M, M, T, LDST, WORK( M*M+1 ), M ) |
CALL ZLACPY( 'Full', M, M, T, LDST, WORK( M*M+1 ), M ) |
CALL ZLASSQ( 2*M*M, WORK, 1, SCALE, SUM ) |
CALL ZLASSQ( 2*M*M, WORK, 1, SCALE, SUM ) |
SA = SCALE*SQRT( SUM ) |
SA = SCALE*SQRT( SUM ) |
THRESH = MAX( TEN*EPS*SA, SMLNUM ) |
* |
|
* THRES has been changed from |
|
* THRESH = MAX( TEN*EPS*SA, SMLNUM ) |
|
* to |
|
* THRESH = MAX( TWENTY*EPS*SA, SMLNUM ) |
|
* on 04/01/10. |
|
* "Bug" reported by Ondra Kamenik, confirmed by Julie Langou, fixed by |
|
* Jim Demmel and Guillaume Revy. See forum post 1783. |
|
* |
|
THRESH = MAX( TWENTY*EPS*SA, SMLNUM ) |
* |
* |
* Compute unitary QL and RQ that swap 1-by-1 and 1-by-1 blocks |
* Compute unitary QL and RQ that swap 1-by-1 and 1-by-1 blocks |
* using Givens rotations and perform the swap tentatively. |
* using Givens rotations and perform the swap tentatively. |
Line 204
|
Line 213
|
IF( WANDS ) THEN |
IF( WANDS ) THEN |
* |
* |
* Strong stability test: |
* Strong stability test: |
* F-norm((A-QL'*S*QR, B-QL'*T*QR)) <= O(EPS*F-norm((A, B))) |
* F-norm((A-QL**H*S*QR, B-QL**H*T*QR)) <= O(EPS*F-norm((A, B))) |
* |
* |
CALL ZLACPY( 'Full', M, M, S, LDST, WORK, M ) |
CALL ZLACPY( 'Full', M, M, S, LDST, WORK, M ) |
CALL ZLACPY( 'Full', M, M, T, LDST, WORK( M*M+1 ), M ) |
CALL ZLACPY( 'Full', M, M, T, LDST, WORK( M*M+1 ), M ) |