113 DOUBLE PRECISION FUNCTION dlansp( NORM, UPLO, N, AP, WORK )
125 DOUBLE PRECISION ap( * ), work( * )
131 DOUBLE PRECISION one, zero
132 parameter( one = 1.0d+0, zero = 0.0d+0 )
136 DOUBLE PRECISION absa, sum, value
139 DOUBLE PRECISION ssq( 2 ), colssq( 2 )
155 ELSE IF(
lsame( norm,
'M' ) )
THEN
160 IF(
lsame( uplo,
'U' ) )
THEN
163 DO 10 i = k, k + j - 1
165 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
172 DO 30 i = k, k + n - j
174 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
179 ELSE IF( (
lsame( norm,
'I' ) ) .OR. (
lsame( norm,
'O' ) ) .OR.
180 $ ( norm.EQ.
'1' ) )
THEN
186 IF(
lsame( uplo,
'U' ) )
THEN
190 absa = abs( ap( k ) )
192 work( i ) = work( i ) + absa
195 work( j ) = sum + abs( ap( k ) )
200 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
207 sum = work( j ) + abs( ap( k ) )
210 absa = abs( ap( k ) )
212 work( i ) = work( i ) + absa
215 IF(
VALUE .LT. sum .OR.
disnan( sum ) )
VALUE = sum
218 ELSE IF( (
lsame( norm,
'F' ) ) .OR. (
lsame( norm,
'E' ) ) )
THEN
231 IF(
lsame( uplo,
'U' ) )
THEN
235 CALL dlassq( j-1, ap( k ), 1, colssq( 1 ), colssq( 2 ) )
243 CALL dlassq( n-j, ap( k ), 1, colssq( 1 ), colssq( 2 ) )
248 ssq( 2 ) = 2*ssq( 2 )
256 IF( ap( k ).NE.zero )
THEN
257 absa = abs( ap( k ) )
258 IF( colssq( 1 ).LT.absa )
THEN
259 colssq( 2 ) = one + colssq(2)*( colssq(1) / absa )**2
262 colssq( 2 ) = colssq( 2 ) + ( absa / colssq( 1 ) )**2
265 IF(
lsame( uplo,
'U' ) )
THEN
272 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 dlansp(NORM, UPLO, N, AP, WORK)
DLANSP returns the value of the 1-norm, or the Frobenius norm, or the infinity norm,...