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.
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,...
subroutine zlassq(N, X, INCX, SCALE, SUMSQ)
ZLASSQ updates a sum of squares represented in scaled form.