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