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, SCALE, SUM
67 * ..
68 * .. External Functions ..
69 LOGICAL LSAME
70 EXTERNAL LSAME
71 * ..
72 * .. External Subroutines ..
73 EXTERNAL DLASSQ
74 * ..
75 * .. Intrinsic Functions ..
76 INTRINSIC ABS, MAX, SQRT
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 = MAX( ABS( 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, 1, SCALE, SUM )
114 SUM = 2*SUM
115 END IF
116 CALL DLASSQ( N, D, 1, SCALE, SUM )
117 ANORM = SCALE*SQRT( SUM )
118 END IF
119 *
120 DLANST = ANORM
121 RETURN
122 *
123 * End of DLANST
124 *
125 END
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, SCALE, SUM
67 * ..
68 * .. External Functions ..
69 LOGICAL LSAME
70 EXTERNAL LSAME
71 * ..
72 * .. External Subroutines ..
73 EXTERNAL DLASSQ
74 * ..
75 * .. Intrinsic Functions ..
76 INTRINSIC ABS, MAX, SQRT
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 = MAX( ABS( 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, 1, SCALE, SUM )
114 SUM = 2*SUM
115 END IF
116 CALL DLASSQ( N, D, 1, SCALE, SUM )
117 ANORM = SCALE*SQRT( SUM )
118 END IF
119 *
120 DLANST = ANORM
121 RETURN
122 *
123 * End of DLANST
124 *
125 END