123 DOUBLE PRECISION FUNCTION zlanhe( NORM, UPLO, N, A, LDA, WORK )
135 DOUBLE PRECISION work( * )
136 COMPLEX*16 a( lda, * )
142 DOUBLE PRECISION one, zero
143 parameter( one = 1.0d+0, zero = 0.0d+0 )
147 DOUBLE PRECISION absa, sum, value
150 DOUBLE PRECISION ssq( 2 ), colssq( 2 )
160 INTRINSIC abs, dble, sqrt
166 ELSE IF(
lsame( norm,
'M' ) )
THEN
171 IF(
lsame( uplo,
'U' ) )
THEN
174 sum = abs( a( i, j ) )
175 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
177 sum = abs( dble( a( j, j ) ) )
178 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
182 sum = abs( dble( a( j, j ) ) )
183 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
185 sum = abs( a( 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 absa = abs( a( i, j ) )
202 work( i ) = work( i ) + absa
204 work( j ) = sum + abs( dble( a( j, j ) ) )
208 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
215 sum = work( j ) + abs( dble( a( j, j ) ) )
217 absa = abs( a( i, j ) )
219 work( i ) = work( i ) + absa
221 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
224 ELSE IF( (
lsame( norm,
'F' ) ) .OR. (
lsame( norm,
'E' ) ) )
THEN
236 IF(
lsame( uplo,
'U' ) )
THEN
240 CALL zlassq( j-1, a( 1, j ), 1,
241 $ colssq( 1 ), colssq( 2 ) )
248 CALL zlassq( n-j, a( j+1, j ), 1,
249 $ colssq( 1 ), colssq( 2 ) )
253 ssq( 2 ) = 2*ssq( 2 )
258 IF( dble( a( i, i ) ).NE.zero )
THEN
259 absa = abs( dble( a( i, i ) ) )
260 IF( ssq( 1 ).LT.absa )
THEN
261 ssq( 2 ) = one + ssq( 2 )*( ssq( 1 ) / absa )**2
264 ssq( 2 ) = ssq( 2 ) + ( absa / ssq( 1 ) )**2
268 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 zlanhe(NORM, UPLO, N, A, LDA, WORK)
ZLANHE 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.