127 DOUBLE PRECISION FUNCTION dlansb( NORM, UPLO, N, K, AB, LDAB,
140 DOUBLE PRECISION ab( ldab, * ), work( * )
146 DOUBLE PRECISION one, zero
147 parameter( one = 1.0d+0, zero = 0.0d+0 )
151 DOUBLE PRECISION absa, sum, value
154 DOUBLE PRECISION ssq( 2 ), colssq( 2 )
164 INTRINSIC abs, max, min, sqrt
170 ELSE IF(
lsame( norm,
'M' ) )
THEN
175 IF(
lsame( uplo,
'U' ) )
THEN
177 DO 10 i = max( k+2-j, 1 ), k + 1
178 sum = abs( ab( i, j ) )
179 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
184 DO 30 i = 1, min( n+1-j, k+1 )
185 sum = abs( ab( i, j ) )
186 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
190 ELSE IF( (
lsame( norm,
'I' ) ) .OR. (
lsame( norm,
'O' ) ) .OR.
191 $ ( norm.EQ.
'1' ) )
THEN
196 IF(
lsame( uplo,
'U' ) )
THEN
200 DO 50 i = max( 1, j-k ), j - 1
201 absa = abs( ab( l+i, j ) )
203 work( i ) = work( i ) + absa
205 work( j ) = sum + abs( ab( k+1, j ) )
209 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
216 sum = work( j ) + abs( ab( 1, j ) )
218 DO 90 i = j + 1, min( n, j+k )
219 absa = abs( ab( l+i, j ) )
221 work( i ) = work( i ) + absa
223 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
226 ELSE IF( (
lsame( norm,
'F' ) ) .OR. (
lsame( norm,
'E' ) ) )
THEN
239 IF(
lsame( uplo,
'U' ) )
THEN
243 CALL dlassq( min( j-1, k ), ab( max( k+2-j, 1 ), j ),
244 $ 1, colssq( 1 ), colssq( 2 ) )
252 CALL dlassq( min( n-j, k ), ab( 2, j ), 1,
253 $ colssq( 1 ), colssq( 2 ) )
258 ssq( 2 ) = 2*ssq( 2 )
267 CALL dlassq( n, ab( l, 1 ), ldab, colssq( 1 ), colssq( 2 ) )
269 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 dlansb(NORM, UPLO, N, K, AB, LDAB, WORK)
DLANSB returns the value of the 1-norm, or the Frobenius norm, or the infinity norm,...