274 SUBROUTINE dspsvx( FACT, UPLO, N, NRHS, AP, AFP, IPIV, B, LDB, X,
275 $ LDX, RCOND, FERR, BERR, WORK, IWORK, INFO )
283 INTEGER INFO, LDB, LDX, N, NRHS
284 DOUBLE PRECISION RCOND
287 INTEGER IPIV( * ), IWORK( * )
288 DOUBLE PRECISION AFP( * ), AP( * ), B( LDB, * ), BERR( * ),
289 $ ferr( * ), work( * ), x( ldx, * )
295 DOUBLE PRECISION ZERO
296 parameter( zero = 0.0d+0 )
300 DOUBLE PRECISION ANORM
304 DOUBLE PRECISION DLAMCH, DLANSP
305 EXTERNAL lsame, dlamch, dlansp
319 nofact = lsame( fact,
'N' )
320 IF( .NOT.nofact .AND. .NOT.lsame( fact,
'F' ) )
THEN
322 ELSE IF( .NOT.lsame( uplo,
'U' ) .AND. .NOT.lsame( uplo,
'L' ) )
325 ELSE IF( n.LT.0 )
THEN
327 ELSE IF( nrhs.LT.0 )
THEN
329 ELSE IF( ldb.LT.max( 1, n ) )
THEN
331 ELSE IF( ldx.LT.max( 1, n ) )
THEN
335 CALL xerbla(
'DSPSVX', -info )
343 CALL dcopy( n*( n+1 ) / 2, ap, 1, afp, 1 )
344 CALL dsptrf( uplo, n, afp, ipiv, info )
356 anorm = dlansp(
'I', uplo, n, ap, work )
360 CALL dspcon( uplo, n, afp, ipiv, anorm, rcond, work, iwork, info )
364 CALL dlacpy(
'Full', n, nrhs, b, ldb, x, ldx )
365 CALL dsptrs( uplo, n, nrhs, afp, ipiv, x, ldx, info )
370 CALL dsprfs( uplo, n, nrhs, ap, afp, ipiv, b, ldb, x, ldx, ferr,
371 $ berr, work, iwork, info )
375 IF( rcond.LT.dlamch(
'Epsilon' ) )
subroutine xerbla(srname, info)
subroutine dcopy(n, dx, incx, dy, incy)
DCOPY
subroutine dspcon(uplo, n, ap, ipiv, anorm, rcond, work, iwork, info)
DSPCON
subroutine dsprfs(uplo, n, nrhs, ap, afp, ipiv, b, ldb, x, ldx, ferr, berr, work, iwork, info)
DSPRFS
subroutine dspsvx(fact, uplo, n, nrhs, ap, afp, ipiv, b, ldb, x, ldx, rcond, ferr, berr, work, iwork, info)
DSPSVX computes the solution to system of linear equations A * X = B for OTHER matrices
subroutine dsptrf(uplo, n, ap, ipiv, info)
DSPTRF
subroutine dsptrs(uplo, n, nrhs, ap, ipiv, b, ldb, info)
DSPTRS
subroutine dlacpy(uplo, m, n, a, lda, b, ldb)
DLACPY copies all or part of one two-dimensional array to another.