1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      73
      74
      75
      76
      77
      78
      79
      80
      81
      82
      83
      84
      85
      86
      87
      88
      89
      90
      91
      92
      93
      94
      95
      96
      97
      98
      99
     100
     101
     102
     103
     104
     105
     106
     107
     108
     109
     110
     111
     112
     113
     114
     115
     116
     117
     118
     119
     120
     121
     122
     123
     124
     125
      REAL             FUNCTION SLANSTNORMNDE )
*
*  -- LAPACK auxiliary routine (version 3.2) --
*  -- LAPACK is a software package provided by Univ. of Tennessee,    --
*  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
*     November 2006
*
*     .. Scalar Arguments ..
      CHARACTER          NORM
      INTEGER            N
*     ..
*     .. Array Arguments ..
      REAL               D* ), E* )
*     ..
*
*  Purpose
*  =======
*
*  SLANST  returns the value of the one norm,  or the Frobenius norm, or
*  the  infinity norm,  or the  element of  largest absolute value  of a
*  real symmetric tridiagonal matrix A.
*
*  Description
*  ===========
*
*  SLANST returns the value
*
*     SLANST = ( max(abs(A(i,j))), NORM = 'M' or 'm'
*              (
*              ( norm1(A),         NORM = '1', 'O' or 'o'
*              (
*              ( normI(A),         NORM = 'I' or 'i'
*              (
*              ( normF(A),         NORM = 'F', 'f', 'E' or 'e'
*
*  where  norm1  denotes the  one norm of a matrix (maximum column sum),
*  normI  denotes the  infinity norm  of a matrix  (maximum row sum) and
*  normF  denotes the  Frobenius norm of a matrix (square root of sum of
*  squares).  Note that  max(abs(A(i,j)))  is not a consistent matrix norm.
*
*  Arguments
*  =========
*
*  NORM    (input) CHARACTER*1
*          Specifies the value to be returned in SLANST as described
*          above.
*
*  N       (input) INTEGER
*          The order of the matrix A.  N >= 0.  When N = 0, SLANST is
*          set to zero.
*
*  D       (input) REAL array, dimension (N)
*          The diagonal elements of A.
*
*  E       (input) REAL array, dimension (N-1)
*          The (n-1) sub-diagonal or super-diagonal elements of A.
*
*  =====================================================================
*
*     .. Parameters ..
      REAL               ONEZERO
      PARAMETER          ( ONE = 1.0E+0ZERO = 0.0E+0 )
*     ..
*     .. Local Scalars ..
      INTEGER            I
      REAL               ANORMSCALESUM
*     ..
*     .. External Functions ..
      LOGICAL            LSAME
      EXTERNAL           LSAME
*     ..
*     .. External Subroutines ..
      EXTERNAL           SLASSQ
*     ..
*     .. Intrinsic Functions ..
      INTRINSIC          ABSMAXSQRT
*     ..
*     .. Executable Statements ..
*
      IFN.LE.0 ) THEN
         ANORM = ZERO
      ELSE IFLSAMENORM'M' ) ) THEN
*
*        Find max(abs(A(i,j))).
*
         ANORM = ABSDN ) )
         DO 10 I = 1N - 1
            ANORM = MAXANORMABSDI ) ) )
            ANORM = MAXANORMABSEI ) ) )
   10    CONTINUE
      ELSE IFLSAMENORM'O' ) .OR. NORM.EQ.'1' .OR.
     $         LSAMENORM'I' ) ) THEN
*
*        Find norm1(A).
*
         IFN.EQ.1 ) THEN
            ANORM = ABSD1 ) )
         ELSE
            ANORM = MAXABSD1 ) )+ABSE1 ) ),
     $              ABSEN-1 ) )+ABSDN ) ) )
            DO 20 I = 2N - 1
               ANORM = MAXANORMABSDI ) )+ABSEI ) )+
     $                 ABSEI-1 ) ) )
   20       CONTINUE
         END IF
      ELSE IF( ( LSAMENORM'F' ) ) .OR. ( LSAMENORM'E' ) ) ) THEN
*
*        Find normF(A).
*
         SCALE = ZERO
         SUM = ONE
         IFN.GT.1 ) THEN
            CALL SLASSQN-1E1SCALESUM )
            SUM = 2*SUM
         END IF
         CALL SLASSQND1SCALESUM )
         ANORM = SCALE*SQRTSUM )
      END IF
*
      SLANST = ANORM
      RETURN
*
*     End of SLANST
*
      END