121 DOUBLE PRECISION FUNCTION dlansy( NORM, UPLO, N, A, LDA, WORK )
133 DOUBLE PRECISION a( lda, * ), work( * )
139 DOUBLE PRECISION one, zero
140 parameter( one = 1.0d+0, zero = 0.0d+0 )
144 DOUBLE PRECISION absa, sum, value
147 DOUBLE PRECISION ssq( 2 ), colssq( 2 )
163 ELSE IF(
lsame( norm,
'M' ) )
THEN
168 IF(
lsame( uplo,
'U' ) )
THEN
171 sum = abs( a( i, j ) )
172 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
178 sum = abs( a( i, j ) )
179 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
183 ELSE IF( (
lsame( norm,
'I' ) ) .OR. (
lsame( norm,
'O' ) ) .OR.
184 $ ( norm.EQ.
'1' ) )
THEN
189 IF(
lsame( uplo,
'U' ) )
THEN
193 absa = abs( a( i, j ) )
195 work( i ) = work( i ) + absa
197 work( j ) = sum + abs( a( j, j ) )
201 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
208 sum = work( j ) + abs( a( j, j ) )
210 absa = abs( a( i, j ) )
212 work( i ) = work( i ) + absa
214 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
217 ELSE IF( (
lsame( norm,
'F' ) ) .OR. (
lsame( norm,
'E' ) ) )
THEN
229 IF(
lsame( uplo,
'U' ) )
THEN
233 CALL dlassq( j-1, a( 1, j ), 1, colssq(1), colssq(2) )
240 CALL dlassq( n-j, a( j+1, j ), 1, colssq(1), colssq(2) )
244 ssq( 2 ) = 2*ssq( 2 )
250 CALL dlassq( n, a, lda+1, colssq( 1 ), colssq( 2 ) )
252 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 dlansy(NORM, UPLO, N, A, LDA, WORK)
DLANSY returns the value of the 1-norm, or the Frobenius norm, or the infinity norm,...