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 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 xerbla(SRNAME, INFO)
XERBLA
subroutine dlacpy(UPLO, M, N, A, LDA, B, LDB)
DLACPY copies all or part of one two-dimensional array to another.
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 dcopy(N, DX, INCX, DY, INCY)
DCOPY