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.
subroutine zlassq(n, x, incx, scl, sumsq)
ZLASSQ updates a sum of squares represented in scaled form.
logical function lsame(CA, CB)
LSAME
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,...