1       DOUBLE PRECISION FUNCTION DLANST( 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( * ), E( * )
 14 *     ..
 15 *
 16 *  Purpose
 17 *  =======
 18 *
 19 *  DLANST  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 *  real symmetric tridiagonal matrix A.
 22 *
 23 *  Description
 24 *  ===========
 25 *
 26 *  DLANST returns the value
 27 *
 28 *     DLANST = ( 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 DLANST as described
 46 *          above.
 47 *
 48 *  N       (input) INTEGER
 49 *          The order of the matrix A.  N >= 0.  When N = 0, DLANST is
 50 *          set to zero.
 51 *
 52 *  D       (input) DOUBLE PRECISION array, dimension (N)
 53 *          The diagonal elements of A.
 54 *
 55 *  E       (input) DOUBLE PRECISION array, dimension (N-1)
 56 *          The (n-1) sub-diagonal or super-diagonal elements of A.
 57 *
 58 *  =====================================================================
 59 *
 60 *     .. Parameters ..
 61       DOUBLE PRECISION   ONE, ZERO
 62       PARAMETER          ( ONE = 1.0D+0, ZERO = 0.0D+0 )
 63 *     ..
 64 *     .. Local Scalars ..
 65       INTEGER            I
 66       DOUBLE PRECISION   ANORM, SCALESUM
 67 *     ..
 68 *     .. External Functions ..
 69       LOGICAL            LSAME
 70       EXTERNAL           LSAME
 71 *     ..
 72 *     .. External Subroutines ..
 73       EXTERNAL           DLASSQ
 74 *     ..
 75 *     .. Intrinsic Functions ..
 76       INTRINSIC          ABSMAXSQRT
 77 *     ..
 78 *     .. Executable Statements ..
 79 *
 80       IF( N.LE.0 ) THEN
 81          ANORM = ZERO
 82       ELSE IF( LSAME( NORM, 'M' ) ) THEN
 83 *
 84 *        Find max(abs(A(i,j))).
 85 *
 86          ANORM = ABS( D( N ) )
 87          DO 10 I = 1, N - 1
 88             ANORM = MAX( ANORM, ABS( D( I ) ) )
 89             ANORM = MAX( ANORM, ABS( E( I ) ) )
 90    10    CONTINUE
 91       ELSE IF( LSAME( NORM, 'O' ) .OR. NORM.EQ.'1' .OR.
 92      $         LSAME( NORM, 'I' ) ) THEN
 93 *
 94 *        Find norm1(A).
 95 *
 96          IF( N.EQ.1 ) THEN
 97             ANORM = ABS( D( 1 ) )
 98          ELSE
 99             ANORM = MAXABS( D( 1 ) )+ABS( E( 1 ) ),
100      $              ABS( E( N-1 ) )+ABS( D( N ) ) )
101             DO 20 I = 2, N - 1
102                ANORM = MAX( ANORM, ABS( D( I ) )+ABS( E( I ) )+
103      $                 ABS( E( I-1 ) ) )
104    20       CONTINUE
105          END IF
106       ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN
107 *
108 *        Find normF(A).
109 *
110          SCALE = ZERO
111          SUM = ONE
112          IF( N.GT.1 ) THEN
113             CALL DLASSQ( N-1, E, 1SCALESUM )
114             SUM = 2*SUM
115          END IF
116          CALL DLASSQ( N, D, 1SCALESUM )
117          ANORM = SCALE*SQRTSUM )
118       END IF
119 *
120       DLANST = ANORM
121       RETURN
122 *
123 *     End of DLANST
124 *
125       END