138 DOUBLE PRECISION FUNCTION dlantb( NORM, UPLO, DIAG, N, K, AB,
147 CHARACTER diag, norm, uplo
151 DOUBLE PRECISION ab( ldab, * ), work( * )
157 DOUBLE PRECISION one, zero
158 parameter( one = 1.0d+0, zero = 0.0d+0 )
163 DOUBLE PRECISION sum, value
166 DOUBLE PRECISION ssq( 2 ), colssq( 2 )
176 INTRINSIC abs, max, min, sqrt
182 ELSE IF(
lsame( norm,
'M' ) )
THEN
186 IF(
lsame( diag,
'U' ) )
THEN
188 IF(
lsame( uplo,
'U' ) )
THEN
190 DO 10 i = max( k+2-j, 1 ), k
191 sum = abs( ab( i, j ) )
192 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
197 DO 30 i = 2, min( n+1-j, k+1 )
198 sum = abs( ab( i, j ) )
199 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
205 IF(
lsame( uplo,
'U' ) )
THEN
207 DO 50 i = max( k+2-j, 1 ), k + 1
208 sum = abs( ab( i, j ) )
209 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
214 DO 70 i = 1, min( n+1-j, k+1 )
215 sum = abs( ab( i, j ) )
216 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
221 ELSE IF( (
lsame( norm,
'O' ) ) .OR. ( norm.EQ.
'1' ) )
THEN
226 udiag =
lsame( diag,
'U' )
227 IF(
lsame( uplo,
'U' ) )
THEN
231 DO 90 i = max( k+2-j, 1 ), k
232 sum = sum + abs( ab( i, j ) )
236 DO 100 i = max( k+2-j, 1 ), k + 1
237 sum = sum + abs( ab( i, j ) )
240 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
246 DO 120 i = 2, min( n+1-j, k+1 )
247 sum = sum + abs( ab( i, j ) )
251 DO 130 i = 1, min( n+1-j, k+1 )
252 sum = sum + abs( ab( i, j ) )
255 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
258 ELSE IF(
lsame( norm,
'I' ) )
THEN
263 IF(
lsame( uplo,
'U' ) )
THEN
264 IF(
lsame( diag,
'U' ) )
THEN
270 DO 160 i = max( 1, j-k ), j - 1
271 work( i ) = work( i ) + abs( ab( l+i, j ) )
280 DO 190 i = max( 1, j-k ), j
281 work( i ) = work( i ) + abs( ab( l+i, j ) )
286 IF(
lsame( diag,
'U' ) )
THEN
292 DO 220 i = j + 1, min( n, j+k )
293 work( i ) = work( i ) + abs( ab( l+i, j ) )
302 DO 250 i = j, min( n, j+k )
303 work( i ) = work( i ) + abs( ab( l+i, j ) )
310 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
312 ELSE IF( (
lsame( norm,
'F' ) ) .OR. (
lsame( norm,
'E' ) ) )
THEN
319 IF(
lsame( uplo,
'U' ) )
THEN
320 IF(
lsame( diag,
'U' ) )
THEN
327 CALL dlassq( min( j-1, k ),
328 $ ab( max( k+2-j, 1 ), j ), 1,
329 $ colssq( 1 ), colssq( 2 ) )
339 CALL dlassq( min( j, k+1 ), ab( max( k+2-j, 1 ), j ),
340 $ 1, colssq( 1 ), colssq( 2 ) )
345 IF(
lsame( diag,
'U' ) )
THEN
352 CALL dlassq( min( n-j, k ), ab( 2, j ), 1,
353 $ colssq( 1 ), colssq( 2 ) )
363 CALL dlassq( min( n-j+1, k+1 ), ab( 1, j ), 1,
364 $ colssq( 1 ), colssq( 2 ) )
369 VALUE = ssq( 1 )*sqrt( ssq( 2 ) )
logical function disnan(DIN)
DISNAN tests input for NaN.
subroutine dlassq(n, x, incx, scl, sumsq)
DLASSQ updates a sum of squares represented in scaled form.
subroutine dcombssq(V1, V2)
DCOMBSSQ adds two scaled sum of squares quantities.
logical function lsame(CA, CB)
LSAME
double precision function dlantb(NORM, UPLO, DIAG, N, K, AB, LDAB, WORK)
DLANTB returns the value of the 1-norm, or the Frobenius norm, or the infinity norm,...