277 SUBROUTINE dspsvx( FACT, UPLO, N, NRHS, AP, AFP, IPIV, B, LDB, X,
278 $ ldx, rcond, ferr, berr, work, iwork, info )
287 INTEGER info, ldb, ldx, n, nrhs
288 DOUBLE PRECISION rcond
291 INTEGER ipiv( * ), iwork( * )
292 DOUBLE PRECISION afp( * ), ap( * ), b( ldb, * ), berr( * ),
293 $ ferr( * ), work( * ), x( ldx, * )
299 DOUBLE PRECISION zero
300 parameter( zero = 0.0d+0 )
304 DOUBLE PRECISION anorm
323 nofact =
lsame( fact,
'N' )
324 IF( .NOT.nofact .AND. .NOT.
lsame( fact,
'F' ) )
THEN
326 ELSE IF( .NOT.
lsame( uplo,
'U' ) .AND. .NOT.
lsame( uplo,
'L' ) )
329 ELSE IF( n.LT.0 )
THEN
331 ELSE IF( nrhs.LT.0 )
THEN
333 ELSE IF( ldb.LT.max( 1, n ) )
THEN
335 ELSE IF( ldx.LT.max( 1, n ) )
THEN
339 CALL
xerbla(
'DSPSVX', -info )
347 CALL
dcopy( n*( n+1 ) / 2, ap, 1, afp, 1 )
348 CALL
dsptrf( uplo, n, afp, ipiv, info )
360 anorm =
dlansp(
'I', uplo, n, ap, work )
364 CALL
dspcon( uplo, n, afp, ipiv, anorm, rcond, work, iwork, info )
368 CALL
dlacpy(
'Full', n, nrhs, b, ldb, x, ldx )
369 CALL
dsptrs( uplo, n, nrhs, afp, ipiv, x, ldx, info )
374 CALL
dsprfs( uplo, n, nrhs, ap, afp, ipiv, b, ldb, x, ldx, ferr,
375 $ berr, work, iwork, info )
379 IF( rcond.LT.
dlamch(
'Epsilon' ) )