128 DOUBLE PRECISION FUNCTION zlansb( NORM, UPLO, N, K, AB, LDAB,
141 DOUBLE PRECISION work( * )
142 COMPLEX*16 ab( ldab, * )
148 DOUBLE PRECISION one, zero
149 parameter( one = 1.0d+0, zero = 0.0d+0 )
153 DOUBLE PRECISION absa, sum, value
156 DOUBLE PRECISION ssq( 2 ), colssq( 2 )
166 INTRINSIC abs, max, min, sqrt
172 ELSE IF(
lsame( norm,
'M' ) )
THEN
177 IF(
lsame( uplo,
'U' ) )
THEN
179 DO 10 i = max( k+2-j, 1 ), k + 1
180 sum = abs( ab( i, j ) )
181 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
186 DO 30 i = 1, min( n+1-j, k+1 )
187 sum = abs( ab( i, j ) )
188 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
192 ELSE IF( (
lsame( norm,
'I' ) ) .OR. (
lsame( norm,
'O' ) ) .OR.
193 $ ( norm.EQ.
'1' ) )
THEN
198 IF(
lsame( uplo,
'U' ) )
THEN
202 DO 50 i = max( 1, j-k ), j - 1
203 absa = abs( ab( l+i, j ) )
205 work( i ) = work( i ) + absa
207 work( j ) = sum + abs( ab( k+1, j ) )
211 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
218 sum = work( j ) + abs( ab( 1, j ) )
220 DO 90 i = j + 1, min( n, j+k )
221 absa = abs( ab( l+i, j ) )
223 work( i ) = work( i ) + absa
225 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
228 ELSE IF( (
lsame( norm,
'F' ) ) .OR. (
lsame( norm,
'E' ) ) )
THEN
241 IF(
lsame( uplo,
'U' ) )
THEN
245 CALL zlassq( min( j-1, k ), ab( max( k+2-j, 1 ), j ),
246 $ 1, colssq( 1 ), colssq( 2 ) )
254 CALL zlassq( min( n-j, k ), ab( 2, j ), 1,
255 $ colssq( 1 ), colssq( 2 ) )
260 ssq( 2 ) = 2*ssq( 2 )
269 CALL zlassq( n, ab( l, 1 ), ldab, colssq( 1 ), colssq( 2 ) )
271 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 zlansb(NORM, UPLO, N, K, AB, LDAB, WORK)
ZLANSB 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.