130 DOUBLE PRECISION FUNCTION zlanhb( NORM, UPLO, N, K, AB, LDAB,
143 DOUBLE PRECISION work( * )
144 COMPLEX*16 ab( ldab, * )
150 DOUBLE PRECISION one, zero
151 parameter( one = 1.0d+0, zero = 0.0d+0 )
155 DOUBLE PRECISION absa, sum, value
158 DOUBLE PRECISION ssq( 2 ), colssq( 2 )
168 INTRINSIC abs, dble, max, min, sqrt
174 ELSE IF(
lsame( norm,
'M' ) )
THEN
179 IF(
lsame( uplo,
'U' ) )
THEN
181 DO 10 i = max( k+2-j, 1 ), k
182 sum = abs( ab( i, j ) )
183 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
185 sum = abs( dble( ab( k+1, j ) ) )
186 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
190 sum = abs( dble( ab( 1, j ) ) )
191 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
192 DO 30 i = 2, min( n+1-j, k+1 )
193 sum = abs( ab( i, j ) )
194 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
198 ELSE IF( (
lsame( norm,
'I' ) ) .OR. (
lsame( norm,
'O' ) ) .OR.
199 $ ( norm.EQ.
'1' ) )
THEN
204 IF(
lsame( uplo,
'U' ) )
THEN
208 DO 50 i = max( 1, j-k ), j - 1
209 absa = abs( ab( l+i, j ) )
211 work( i ) = work( i ) + absa
213 work( j ) = sum + abs( dble( ab( k+1, j ) ) )
217 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
224 sum = work( j ) + abs( dble( ab( 1, j ) ) )
226 DO 90 i = j + 1, min( n, j+k )
227 absa = abs( ab( l+i, j ) )
229 work( i ) = work( i ) + absa
231 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
234 ELSE IF( (
lsame( norm,
'F' ) ) .OR. (
lsame( norm,
'E' ) ) )
THEN
247 IF(
lsame( uplo,
'U' ) )
THEN
251 CALL zlassq( min( j-1, k ), ab( max( k+2-j, 1 ), j ),
252 $ 1, colssq( 1 ), colssq( 2 ) )
260 CALL zlassq( min( n-j, k ), ab( 2, j ), 1,
261 $ colssq( 1 ), colssq( 2 ) )
266 ssq( 2 ) = 2*ssq( 2 )
276 IF( dble( ab( l, j ) ).NE.zero )
THEN
277 absa = abs( dble( ab( l, j ) ) )
278 IF( colssq( 1 ).LT.absa )
THEN
279 colssq( 2 ) = one + colssq(2)*( colssq(1) / absa )**2
282 colssq( 2 ) = colssq( 2 ) + ( absa / colssq( 1 ) )**2
287 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 zlanhb(NORM, UPLO, N, K, AB, LDAB, WORK)
ZLANHB returns the value of the 1-norm, or the Frobenius norm, or the infinity norm,...