1: DOUBLE PRECISION FUNCTION ZLANHT( NORM, N, D, E )
2: *
3: * -- LAPACK auxiliary 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: CHARACTER NORM
10: INTEGER N
11: * ..
12: * .. Array Arguments ..
13: DOUBLE PRECISION D( * )
14: COMPLEX*16 E( * )
15: * ..
16: *
17: * Purpose
18: * =======
19: *
20: * ZLANHT returns the value of the one norm, or the Frobenius norm, or
21: * the infinity norm, or the element of largest absolute value of a
22: * complex Hermitian tridiagonal matrix A.
23: *
24: * Description
25: * ===========
26: *
27: * ZLANHT returns the value
28: *
29: * ZLANHT = ( max(abs(A(i,j))), NORM = 'M' or 'm'
30: * (
31: * ( norm1(A), NORM = '1', 'O' or 'o'
32: * (
33: * ( normI(A), NORM = 'I' or 'i'
34: * (
35: * ( normF(A), NORM = 'F', 'f', 'E' or 'e'
36: *
37: * where norm1 denotes the one norm of a matrix (maximum column sum),
38: * normI denotes the infinity norm of a matrix (maximum row sum) and
39: * normF denotes the Frobenius norm of a matrix (square root of sum of
40: * squares). Note that max(abs(A(i,j))) is not a consistent matrix norm.
41: *
42: * Arguments
43: * =========
44: *
45: * NORM (input) CHARACTER*1
46: * Specifies the value to be returned in ZLANHT as described
47: * above.
48: *
49: * N (input) INTEGER
50: * The order of the matrix A. N >= 0. When N = 0, ZLANHT is
51: * set to zero.
52: *
53: * D (input) DOUBLE PRECISION array, dimension (N)
54: * The diagonal elements of A.
55: *
56: * E (input) COMPLEX*16 array, dimension (N-1)
57: * The (n-1) sub-diagonal or super-diagonal elements of A.
58: *
59: * =====================================================================
60: *
61: * .. Parameters ..
62: DOUBLE PRECISION ONE, ZERO
63: PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 )
64: * ..
65: * .. Local Scalars ..
66: INTEGER I
67: DOUBLE PRECISION ANORM, SCALE, SUM
68: * ..
69: * .. External Functions ..
70: LOGICAL LSAME
71: EXTERNAL LSAME
72: * ..
73: * .. External Subroutines ..
74: EXTERNAL DLASSQ, ZLASSQ
75: * ..
76: * .. Intrinsic Functions ..
77: INTRINSIC ABS, MAX, SQRT
78: * ..
79: * .. Executable Statements ..
80: *
81: IF( N.LE.0 ) THEN
82: ANORM = ZERO
83: ELSE IF( LSAME( NORM, 'M' ) ) THEN
84: *
85: * Find max(abs(A(i,j))).
86: *
87: ANORM = ABS( D( N ) )
88: DO 10 I = 1, N - 1
89: ANORM = MAX( ANORM, ABS( D( I ) ) )
90: ANORM = MAX( ANORM, ABS( E( I ) ) )
91: 10 CONTINUE
92: ELSE IF( LSAME( NORM, 'O' ) .OR. NORM.EQ.'1' .OR.
93: $ LSAME( NORM, 'I' ) ) THEN
94: *
95: * Find norm1(A).
96: *
97: IF( N.EQ.1 ) THEN
98: ANORM = ABS( D( 1 ) )
99: ELSE
100: ANORM = MAX( ABS( D( 1 ) )+ABS( E( 1 ) ),
101: $ ABS( E( N-1 ) )+ABS( D( N ) ) )
102: DO 20 I = 2, N - 1
103: ANORM = MAX( ANORM, ABS( D( I ) )+ABS( E( I ) )+
104: $ ABS( E( I-1 ) ) )
105: 20 CONTINUE
106: END IF
107: ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN
108: *
109: * Find normF(A).
110: *
111: SCALE = ZERO
112: SUM = ONE
113: IF( N.GT.1 ) THEN
114: CALL ZLASSQ( N-1, E, 1, SCALE, SUM )
115: SUM = 2*SUM
116: END IF
117: CALL DLASSQ( N, D, 1, SCALE, SUM )
118: ANORM = SCALE*SQRT( SUM )
119: END IF
120: *
121: ZLANHT = ANORM
122: RETURN
123: *
124: * End of ZLANHT
125: *
126: END
CVSweb interface <joel.bertrand@systella.fr>