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