139 DOUBLE PRECISION FUNCTION zlantb( NORM, UPLO, DIAG, N, K, AB,
148 CHARACTER diag, norm, uplo
152 DOUBLE PRECISION work( * )
153 COMPLEX*16 ab( ldab, * )
159 DOUBLE PRECISION one, zero
160 parameter( one = 1.0d+0, zero = 0.0d+0 )
165 DOUBLE PRECISION sum, value
168 DOUBLE PRECISION ssq( 2 ), colssq( 2 )
178 INTRINSIC abs, max, min, sqrt
184 ELSE IF(
lsame( norm,
'M' ) )
THEN
188 IF(
lsame( diag,
'U' ) )
THEN
190 IF(
lsame( uplo,
'U' ) )
THEN
192 DO 10 i = max( k+2-j, 1 ), k
193 sum = abs( ab( i, j ) )
194 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
199 DO 30 i = 2, min( n+1-j, k+1 )
200 sum = abs( ab( i, j ) )
201 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
207 IF(
lsame( uplo,
'U' ) )
THEN
209 DO 50 i = max( k+2-j, 1 ), k + 1
210 sum = abs( ab( i, j ) )
211 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
216 DO 70 i = 1, min( n+1-j, k+1 )
217 sum = abs( ab( i, j ) )
218 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
223 ELSE IF( (
lsame( norm,
'O' ) ) .OR. ( norm.EQ.
'1' ) )
THEN
228 udiag =
lsame( diag,
'U' )
229 IF(
lsame( uplo,
'U' ) )
THEN
233 DO 90 i = max( k+2-j, 1 ), k
234 sum = sum + abs( ab( i, j ) )
238 DO 100 i = max( k+2-j, 1 ), k + 1
239 sum = sum + abs( ab( i, j ) )
242 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
248 DO 120 i = 2, min( n+1-j, k+1 )
249 sum = sum + abs( ab( i, j ) )
253 DO 130 i = 1, min( n+1-j, k+1 )
254 sum = sum + abs( ab( i, j ) )
257 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
260 ELSE IF(
lsame( norm,
'I' ) )
THEN
265 IF(
lsame( uplo,
'U' ) )
THEN
266 IF(
lsame( diag,
'U' ) )
THEN
272 DO 160 i = max( 1, j-k ), j - 1
273 work( i ) = work( i ) + abs( ab( l+i, j ) )
282 DO 190 i = max( 1, j-k ), j
283 work( i ) = work( i ) + abs( ab( l+i, j ) )
288 IF(
lsame( diag,
'U' ) )
THEN
294 DO 220 i = j + 1, min( n, j+k )
295 work( i ) = work( i ) + abs( ab( l+i, j ) )
304 DO 250 i = j, min( n, j+k )
305 work( i ) = work( i ) + abs( ab( l+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
329 CALL zlassq( min( j-1, k ),
330 $ ab( max( k+2-j, 1 ), j ), 1,
331 $ colssq( 1 ), colssq( 2 ) )
341 CALL zlassq( min( j, k+1 ), ab( max( k+2-j, 1 ), j ),
342 $ 1, colssq( 1 ), colssq( 2 ) )
347 IF(
lsame( diag,
'U' ) )
THEN
354 CALL zlassq( min( n-j, k ), ab( 2, j ), 1,
355 $ colssq( 1 ), colssq( 2 ) )
365 CALL zlassq( min( n-j+1, k+1 ), ab( 1, j ), 1,
366 $ colssq( 1 ), colssq( 2 ) )
371 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
subroutine zlassq(N, X, INCX, SCALE, SUMSQ)
ZLASSQ updates a sum of squares represented in scaled form.
double precision function zlantb(NORM, UPLO, DIAG, N, K, AB, LDAB, WORK)
ZLANTB returns the value of the 1-norm, or the Frobenius norm, or the infinity norm,...