140 DOUBLE PRECISION FUNCTION zlantr( NORM, UPLO, DIAG, M, N, A, LDA,
149 CHARACTER diag, norm, uplo
153 DOUBLE PRECISION work( * )
154 COMPLEX*16 a( lda, * )
160 DOUBLE PRECISION one, zero
161 parameter( one = 1.0d+0, zero = 0.0d+0 )
166 DOUBLE PRECISION sum, value
169 DOUBLE PRECISION ssq( 2 ), colssq( 2 )
179 INTRINSIC abs, min, sqrt
183 IF( min( m, n ).EQ.0 )
THEN
185 ELSE IF(
lsame( norm,
'M' ) )
THEN
189 IF(
lsame( diag,
'U' ) )
THEN
191 IF(
lsame( uplo,
'U' ) )
THEN
193 DO 10 i = 1, min( m, j-1 )
194 sum = abs( a( i, j ) )
195 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
201 sum = abs( a( i, j ) )
202 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
208 IF(
lsame( uplo,
'U' ) )
THEN
210 DO 50 i = 1, min( m, j )
211 sum = abs( a( i, j ) )
212 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
218 sum = abs( a( i, j ) )
219 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
224 ELSE IF( (
lsame( norm,
'O' ) ) .OR. ( norm.EQ.
'1' ) )
THEN
229 udiag =
lsame( diag,
'U' )
230 IF(
lsame( uplo,
'U' ) )
THEN
232 IF( ( udiag ) .AND. ( j.LE.m ) )
THEN
235 sum = sum + abs( a( i, j ) )
239 DO 100 i = 1, min( m, j )
240 sum = sum + abs( a( i, j ) )
243 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
250 sum = sum + abs( a( i, j ) )
255 sum = sum + abs( a( i, j ) )
258 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
261 ELSE IF(
lsame( norm,
'I' ) )
THEN
265 IF(
lsame( uplo,
'U' ) )
THEN
266 IF(
lsame( diag,
'U' ) )
THEN
271 DO 160 i = 1, min( m, j-1 )
272 work( i ) = work( i ) + abs( a( i, j ) )
280 DO 190 i = 1, min( m, j )
281 work( i ) = work( i ) + abs( a( i, j ) )
286 IF(
lsame( diag,
'U' ) )
THEN
287 DO 210 i = 1, min( m, n )
295 work( i ) = work( i ) + abs( a( i, j ) )
304 work( i ) = work( i ) + abs( a( i, j ) )
312 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
314 ELSE IF( (
lsame( norm,
'F' ) ) .OR. (
lsame( norm,
'E' ) ) )
THEN
321 IF(
lsame( uplo,
'U' ) )
THEN
322 IF(
lsame( diag,
'U' ) )
THEN
324 ssq( 2 ) = min( m, n )
328 CALL zlassq( min( m, j-1 ), a( 1, j ), 1,
329 $ colssq( 1 ), colssq( 2 ) )
338 CALL zlassq( min( m, j ), a( 1, j ), 1,
339 $ colssq( 1 ), colssq( 2 ) )
344 IF(
lsame( diag,
'U' ) )
THEN
346 ssq( 2 ) = min( m, n )
350 CALL zlassq( m-j, a( min( m, j+1 ), j ), 1,
351 $ colssq( 1 ), colssq( 2 ) )
360 CALL zlassq( m-j+1, a( j, j ), 1,
361 $ colssq( 1 ), colssq( 2 ) )
366 VALUE = ssq( 1 )*sqrt( ssq( 2 ) )
logical function disnan(DIN)
DISNAN tests input for NaN.
subroutine dcombssq(V1, V2)
DCOMBSSQ adds two scaled sum of squares quantities.
subroutine zlassq(n, x, incx, scl, sumsq)
ZLASSQ updates a sum of squares represented in scaled form.
logical function lsame(CA, CB)
LSAME
double precision function zlantr(NORM, UPLO, DIAG, M, N, A, LDA, WORK)
ZLANTR returns the value of the 1-norm, or the Frobenius norm, or the infinity norm,...