00001 REAL FUNCTION CLANTR( NORM, UPLO, DIAG, M, N, A, LDA,
00002 $ WORK )
00003
00004
00005
00006
00007
00008
00009
00010 CHARACTER DIAG, NORM, UPLO
00011 INTEGER LDA, M, N
00012
00013
00014 REAL WORK( * )
00015 COMPLEX A( LDA, * )
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090 REAL ONE, ZERO
00091 PARAMETER ( ONE = 1.0E+0, ZERO = 0.0E+0 )
00092
00093
00094 LOGICAL UDIAG
00095 INTEGER I, J
00096 REAL SCALE, SUM, VALUE
00097
00098
00099 LOGICAL LSAME
00100 EXTERNAL LSAME
00101
00102
00103 EXTERNAL CLASSQ
00104
00105
00106 INTRINSIC ABS, MAX, MIN, SQRT
00107
00108
00109
00110 IF( MIN( M, N ).EQ.0 ) THEN
00111 VALUE = ZERO
00112 ELSE IF( LSAME( NORM, 'M' ) ) THEN
00113
00114
00115
00116 IF( LSAME( DIAG, 'U' ) ) THEN
00117 VALUE = ONE
00118 IF( LSAME( UPLO, 'U' ) ) THEN
00119 DO 20 J = 1, N
00120 DO 10 I = 1, MIN( M, J-1 )
00121 VALUE = MAX( VALUE, ABS( A( I, J ) ) )
00122 10 CONTINUE
00123 20 CONTINUE
00124 ELSE
00125 DO 40 J = 1, N
00126 DO 30 I = J + 1, M
00127 VALUE = MAX( VALUE, ABS( A( I, J ) ) )
00128 30 CONTINUE
00129 40 CONTINUE
00130 END IF
00131 ELSE
00132 VALUE = ZERO
00133 IF( LSAME( UPLO, 'U' ) ) THEN
00134 DO 60 J = 1, N
00135 DO 50 I = 1, MIN( M, J )
00136 VALUE = MAX( VALUE, ABS( A( I, J ) ) )
00137 50 CONTINUE
00138 60 CONTINUE
00139 ELSE
00140 DO 80 J = 1, N
00141 DO 70 I = J, M
00142 VALUE = MAX( VALUE, ABS( A( I, J ) ) )
00143 70 CONTINUE
00144 80 CONTINUE
00145 END IF
00146 END IF
00147 ELSE IF( ( LSAME( NORM, 'O' ) ) .OR. ( NORM.EQ.'1' ) ) THEN
00148
00149
00150
00151 VALUE = ZERO
00152 UDIAG = LSAME( DIAG, 'U' )
00153 IF( LSAME( UPLO, 'U' ) ) THEN
00154 DO 110 J = 1, N
00155 IF( ( UDIAG ) .AND. ( J.LE.M ) ) THEN
00156 SUM = ONE
00157 DO 90 I = 1, J - 1
00158 SUM = SUM + ABS( A( I, J ) )
00159 90 CONTINUE
00160 ELSE
00161 SUM = ZERO
00162 DO 100 I = 1, MIN( M, J )
00163 SUM = SUM + ABS( A( I, J ) )
00164 100 CONTINUE
00165 END IF
00166 VALUE = MAX( VALUE, SUM )
00167 110 CONTINUE
00168 ELSE
00169 DO 140 J = 1, N
00170 IF( UDIAG ) THEN
00171 SUM = ONE
00172 DO 120 I = J + 1, M
00173 SUM = SUM + ABS( A( I, J ) )
00174 120 CONTINUE
00175 ELSE
00176 SUM = ZERO
00177 DO 130 I = J, M
00178 SUM = SUM + ABS( A( I, J ) )
00179 130 CONTINUE
00180 END IF
00181 VALUE = MAX( VALUE, SUM )
00182 140 CONTINUE
00183 END IF
00184 ELSE IF( LSAME( NORM, 'I' ) ) THEN
00185
00186
00187
00188 IF( LSAME( UPLO, 'U' ) ) THEN
00189 IF( LSAME( DIAG, 'U' ) ) THEN
00190 DO 150 I = 1, M
00191 WORK( I ) = ONE
00192 150 CONTINUE
00193 DO 170 J = 1, N
00194 DO 160 I = 1, MIN( M, J-1 )
00195 WORK( I ) = WORK( I ) + ABS( A( I, J ) )
00196 160 CONTINUE
00197 170 CONTINUE
00198 ELSE
00199 DO 180 I = 1, M
00200 WORK( I ) = ZERO
00201 180 CONTINUE
00202 DO 200 J = 1, N
00203 DO 190 I = 1, MIN( M, J )
00204 WORK( I ) = WORK( I ) + ABS( A( I, J ) )
00205 190 CONTINUE
00206 200 CONTINUE
00207 END IF
00208 ELSE
00209 IF( LSAME( DIAG, 'U' ) ) THEN
00210 DO 210 I = 1, N
00211 WORK( I ) = ONE
00212 210 CONTINUE
00213 DO 220 I = N + 1, M
00214 WORK( I ) = ZERO
00215 220 CONTINUE
00216 DO 240 J = 1, N
00217 DO 230 I = J + 1, M
00218 WORK( I ) = WORK( I ) + ABS( A( I, J ) )
00219 230 CONTINUE
00220 240 CONTINUE
00221 ELSE
00222 DO 250 I = 1, M
00223 WORK( I ) = ZERO
00224 250 CONTINUE
00225 DO 270 J = 1, N
00226 DO 260 I = J, M
00227 WORK( I ) = WORK( I ) + ABS( A( I, J ) )
00228 260 CONTINUE
00229 270 CONTINUE
00230 END IF
00231 END IF
00232 VALUE = ZERO
00233 DO 280 I = 1, M
00234 VALUE = MAX( VALUE, WORK( I ) )
00235 280 CONTINUE
00236 ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN
00237
00238
00239
00240 IF( LSAME( UPLO, 'U' ) ) THEN
00241 IF( LSAME( DIAG, 'U' ) ) THEN
00242 SCALE = ONE
00243 SUM = MIN( M, N )
00244 DO 290 J = 2, N
00245 CALL CLASSQ( MIN( M, J-1 ), A( 1, J ), 1, SCALE, SUM )
00246 290 CONTINUE
00247 ELSE
00248 SCALE = ZERO
00249 SUM = ONE
00250 DO 300 J = 1, N
00251 CALL CLASSQ( MIN( M, J ), A( 1, J ), 1, SCALE, SUM )
00252 300 CONTINUE
00253 END IF
00254 ELSE
00255 IF( LSAME( DIAG, 'U' ) ) THEN
00256 SCALE = ONE
00257 SUM = MIN( M, N )
00258 DO 310 J = 1, N
00259 CALL CLASSQ( M-J, A( MIN( M, J+1 ), J ), 1, SCALE,
00260 $ SUM )
00261 310 CONTINUE
00262 ELSE
00263 SCALE = ZERO
00264 SUM = ONE
00265 DO 320 J = 1, N
00266 CALL CLASSQ( M-J+1, A( J, J ), 1, SCALE, SUM )
00267 320 CONTINUE
00268 END IF
00269 END IF
00270 VALUE = SCALE*SQRT( SUM )
00271 END IF
00272
00273 CLANTR = VALUE
00274 RETURN
00275
00276
00277
00278 END