![]() ![]() | ![]() |
Mise à jour de lapack vers la version 3.3.0.
1: SUBROUTINE ZGEHD2( N, ILO, IHI, A, LDA, TAU, WORK, INFO ) 2: * 3: * -- LAPACK routine (version 3.2) -- 4: * -- LAPACK is a software package provided by Univ. of Tennessee, -- 5: * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 6: * November 2006 7: * 8: * .. Scalar Arguments .. 9: INTEGER IHI, ILO, INFO, LDA, N 10: * .. 11: * .. Array Arguments .. 12: COMPLEX*16 A( LDA, * ), TAU( * ), WORK( * ) 13: * .. 14: * 15: * Purpose 16: * ======= 17: * 18: * ZGEHD2 reduces a complex general matrix A to upper Hessenberg form H 19: * by a unitary similarity transformation: Q' * A * Q = H . 20: * 21: * Arguments 22: * ========= 23: * 24: * N (input) INTEGER 25: * The order of the matrix A. N >= 0. 26: * 27: * ILO (input) INTEGER 28: * IHI (input) INTEGER 29: * It is assumed that A is already upper triangular in rows 30: * and columns 1:ILO-1 and IHI+1:N. ILO and IHI are normally 31: * set by a previous call to ZGEBAL; otherwise they should be 32: * set to 1 and N respectively. See Further Details. 33: * 1 <= ILO <= IHI <= max(1,N). 34: * 35: * A (input/output) COMPLEX*16 array, dimension (LDA,N) 36: * On entry, the n by n general matrix to be reduced. 37: * On exit, the upper triangle and the first subdiagonal of A 38: * are overwritten with the upper Hessenberg matrix H, and the 39: * elements below the first subdiagonal, with the array TAU, 40: * represent the unitary matrix Q as a product of elementary 41: * reflectors. See Further Details. 42: * 43: * LDA (input) INTEGER 44: * The leading dimension of the array A. LDA >= max(1,N). 45: * 46: * TAU (output) COMPLEX*16 array, dimension (N-1) 47: * The scalar factors of the elementary reflectors (see Further 48: * Details). 49: * 50: * WORK (workspace) COMPLEX*16 array, dimension (N) 51: * 52: * INFO (output) INTEGER 53: * = 0: successful exit 54: * < 0: if INFO = -i, the i-th argument had an illegal value. 55: * 56: * Further Details 57: * =============== 58: * 59: * The matrix Q is represented as a product of (ihi-ilo) elementary 60: * reflectors 61: * 62: * Q = H(ilo) H(ilo+1) . . . H(ihi-1). 63: * 64: * Each H(i) has the form 65: * 66: * H(i) = I - tau * v * v' 67: * 68: * where tau is a complex scalar, and v is a complex vector with 69: * v(1:i) = 0, v(i+1) = 1 and v(ihi+1:n) = 0; v(i+2:ihi) is stored on 70: * exit in A(i+2:ihi,i), and tau in TAU(i). 71: * 72: * The contents of A are illustrated by the following example, with 73: * n = 7, ilo = 2 and ihi = 6: 74: * 75: * on entry, on exit, 76: * 77: * ( a a a a a a a ) ( a a h h h h a ) 78: * ( a a a a a a ) ( a h h h h a ) 79: * ( a a a a a a ) ( h h h h h h ) 80: * ( a a a a a a ) ( v2 h h h h h ) 81: * ( a a a a a a ) ( v2 v3 h h h h ) 82: * ( a a a a a a ) ( v2 v3 v4 h h h ) 83: * ( a ) ( a ) 84: * 85: * where a denotes an element of the original matrix A, h denotes a 86: * modified element of the upper Hessenberg matrix H, and vi denotes an 87: * element of the vector defining H(i). 88: * 89: * ===================================================================== 90: * 91: * .. Parameters .. 92: COMPLEX*16 ONE 93: PARAMETER ( ONE = ( 1.0D+0, 0.0D+0 ) ) 94: * .. 95: * .. Local Scalars .. 96: INTEGER I 97: COMPLEX*16 ALPHA 98: * .. 99: * .. External Subroutines .. 100: EXTERNAL XERBLA, ZLARF, ZLARFG 101: * .. 102: * .. Intrinsic Functions .. 103: INTRINSIC DCONJG, MAX, MIN 104: * .. 105: * .. Executable Statements .. 106: * 107: * Test the input parameters 108: * 109: INFO = 0 110: IF( N.LT.0 ) THEN 111: INFO = -1 112: ELSE IF( ILO.LT.1 .OR. ILO.GT.MAX( 1, N ) ) THEN 113: INFO = -2 114: ELSE IF( IHI.LT.MIN( ILO, N ) .OR. IHI.GT.N ) THEN 115: INFO = -3 116: ELSE IF( LDA.LT.MAX( 1, N ) ) THEN 117: INFO = -5 118: END IF 119: IF( INFO.NE.0 ) THEN 120: CALL XERBLA( 'ZGEHD2', -INFO ) 121: RETURN 122: END IF 123: * 124: DO 10 I = ILO, IHI - 1 125: * 126: * Compute elementary reflector H(i) to annihilate A(i+2:ihi,i) 127: * 128: ALPHA = A( I+1, I ) 129: CALL ZLARFG( IHI-I, ALPHA, A( MIN( I+2, N ), I ), 1, TAU( I ) ) 130: A( I+1, I ) = ONE 131: * 132: * Apply H(i) to A(1:ihi,i+1:ihi) from the right 133: * 134: CALL ZLARF( 'Right', IHI, IHI-I, A( I+1, I ), 1, TAU( I ), 135: $ A( 1, I+1 ), LDA, WORK ) 136: * 137: * Apply H(i)' to A(i+1:ihi,i+1:n) from the left 138: * 139: CALL ZLARF( 'Left', IHI-I, N-I, A( I+1, I ), 1, 140: $ DCONJG( TAU( I ) ), A( I+1, I+1 ), LDA, WORK ) 141: * 142: A( I+1, I ) = ALPHA 143: 10 CONTINUE 144: * 145: RETURN 146: * 147: * End of ZGEHD2 148: * 149: END