1*> \brief \b ZLANHT returns the value of the 1-norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a complex Hermitian tridiagonal matrix.
2*
3*  =========== DOCUMENTATION ===========
4*
5* Online html documentation available at
6*            http://www.netlib.org/lapack/explore-html/
7*
8*> \htmlonly
9*> Download ZLANHT + dependencies
10*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zlanht.f">
11*> [TGZ]</a>
12*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zlanht.f">
13*> [ZIP]</a>
14*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlanht.f">
15*> [TXT]</a>
16*> \endhtmlonly
17*
18*  Definition:
19*  ===========
20*
21*       DOUBLE PRECISION FUNCTION ZLANHT( NORM, N, D, E )
22*
23*       .. Scalar Arguments ..
24*       CHARACTER          NORM
25*       INTEGER            N
26*       ..
27*       .. Array Arguments ..
28*       DOUBLE PRECISION   D( * )
29*       COMPLEX*16         E( * )
30*       ..
31*
32*
33*> \par Purpose:
34*  =============
35*>
36*> \verbatim
37*>
38*> ZLANHT  returns the value of the one norm,  or the Frobenius norm, or
39*> the  infinity norm,  or the  element of  largest absolute value  of a
40*> complex Hermitian tridiagonal matrix A.
41*> \endverbatim
42*>
43*> \return ZLANHT
44*> \verbatim
45*>
46*>    ZLANHT = ( max(abs(A(i,j))), NORM = 'M' or 'm'
47*>             (
48*>             ( norm1(A),         NORM = '1', 'O' or 'o'
49*>             (
50*>             ( normI(A),         NORM = 'I' or 'i'
51*>             (
52*>             ( normF(A),         NORM = 'F', 'f', 'E' or 'e'
53*>
54*> where  norm1  denotes the  one norm of a matrix (maximum column sum),
55*> normI  denotes the  infinity norm  of a matrix  (maximum row sum) and
56*> normF  denotes the  Frobenius norm of a matrix (square root of sum of
57*> squares).  Note that  max(abs(A(i,j)))  is not a consistent matrix norm.
58*> \endverbatim
59*
60*  Arguments:
61*  ==========
62*
63*> \param[in] NORM
64*> \verbatim
65*>          NORM is CHARACTER*1
66*>          Specifies the value to be returned in ZLANHT as described
67*>          above.
68*> \endverbatim
69*>
70*> \param[in] N
71*> \verbatim
72*>          N is INTEGER
73*>          The order of the matrix A.  N >= 0.  When N = 0, ZLANHT is
74*>          set to zero.
75*> \endverbatim
76*>
77*> \param[in] D
78*> \verbatim
79*>          D is DOUBLE PRECISION array, dimension (N)
80*>          The diagonal elements of A.
81*> \endverbatim
82*>
83*> \param[in] E
84*> \verbatim
85*>          E is COMPLEX*16 array, dimension (N-1)
86*>          The (n-1) sub-diagonal or super-diagonal elements of A.
87*> \endverbatim
88*
89*  Authors:
90*  ========
91*
92*> \author Univ. of Tennessee
93*> \author Univ. of California Berkeley
94*> \author Univ. of Colorado Denver
95*> \author NAG Ltd.
96*
97*> \ingroup complex16OTHERauxiliary
98*
99*  =====================================================================
100      DOUBLE PRECISION FUNCTION ZLANHT( NORM, N, D, E )
101*
102*  -- LAPACK auxiliary routine --
103*  -- LAPACK is a software package provided by Univ. of Tennessee,    --
104*  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
105*
106*     .. Scalar Arguments ..
107      CHARACTER          NORM
108      INTEGER            N
109*     ..
110*     .. Array Arguments ..
111      DOUBLE PRECISION   D( * )
112      COMPLEX*16         E( * )
113*     ..
114*
115*  =====================================================================
116*
117*     .. Parameters ..
118      DOUBLE PRECISION   ONE, ZERO
119      PARAMETER          ( ONE = 1.0D+0, ZERO = 0.0D+0 )
120*     ..
121*     .. Local Scalars ..
122      INTEGER            I
123      DOUBLE PRECISION   ANORM, SCALE, SUM
124*     ..
125*     .. External Functions ..
126      LOGICAL            LSAME, DISNAN
127      EXTERNAL           LSAME, DISNAN
128*     ..
129*     .. External Subroutines ..
130      EXTERNAL           DLASSQ, ZLASSQ
131*     ..
132*     .. Intrinsic Functions ..
133      INTRINSIC          ABS, MAX, SQRT
134*     ..
135*     .. Executable Statements ..
136*
137      IF( N.LE.0 ) THEN
138         ANORM = ZERO
139      ELSE IF( LSAME( NORM, 'M' ) ) THEN
140*
141*        Find max(abs(A(i,j))).
142*
143         ANORM = ABS( D( N ) )
144         DO 10 I = 1, N - 1
145            SUM =  ABS( D( I ) )
146            IF( ANORM .LT. SUM .OR. DISNAN( SUM ) ) ANORM = SUM
147            SUM = ABS( E( I ) )
148            IF( ANORM .LT. SUM .OR. DISNAN( SUM ) ) ANORM = SUM
149   10    CONTINUE
150      ELSE IF( LSAME( NORM, 'O' ) .OR. NORM.EQ.'1' .OR.
151     $         LSAME( NORM, 'I' ) ) THEN
152*
153*        Find norm1(A).
154*
155         IF( N.EQ.1 ) THEN
156            ANORM = ABS( D( 1 ) )
157         ELSE
158            ANORM = ABS( D( 1 ) )+ABS( E( 1 ) )
159            SUM = ABS( E( N-1 ) )+ABS( D( N ) )
160            IF( ANORM .LT. SUM .OR. DISNAN( SUM ) ) ANORM = SUM
161            DO 20 I = 2, N - 1
162               SUM = ABS( D( I ) )+ABS( E( I ) )+ABS( E( I-1 ) )
163               IF( ANORM .LT. SUM .OR. DISNAN( SUM ) ) ANORM = SUM
164   20       CONTINUE
165         END IF
166      ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN
167*
168*        Find normF(A).
169*
170         SCALE = ZERO
171         SUM = ONE
172         IF( N.GT.1 ) THEN
173            CALL ZLASSQ( N-1, E, 1, SCALE, SUM )
174            SUM = 2*SUM
175         END IF
176         CALL DLASSQ( N, D, 1, SCALE, SUM )
177         ANORM = SCALE*SQRT( SUM )
178      END IF
179*
180      ZLANHT = ANORM
181      RETURN
182*
183*     End of ZLANHT
184*
185      END
186