276 SUBROUTINE dspsvx( FACT, UPLO, N, NRHS, AP, AFP, IPIV, B, LDB, X,
277 $ LDX, RCOND, FERR, BERR, WORK, IWORK, INFO )
286 INTEGER INFO, LDB, LDX, N, NRHS
287 DOUBLE PRECISION RCOND
290 INTEGER IPIV( * ), IWORK( * )
291 DOUBLE PRECISION AFP( * ), AP( * ), B( ldb, * ), BERR( * ),
292 $ ferr( * ), work( * ), x( ldx, * )
298 DOUBLE PRECISION ZERO
299 parameter( zero = 0.0d+0 )
303 DOUBLE PRECISION ANORM
307 DOUBLE PRECISION DLAMCH, DLANSP
308 EXTERNAL lsame, dlamch, dlansp
322 nofact = lsame( fact,
'N' )
323 IF( .NOT.nofact .AND. .NOT.lsame( fact,
'F' ) )
THEN 325 ELSE IF( .NOT.lsame( uplo,
'U' ) .AND. .NOT.lsame( uplo,
'L' ) )
328 ELSE IF( n.LT.0 )
THEN 330 ELSE IF( nrhs.LT.0 )
THEN 332 ELSE IF( ldb.LT.max( 1, n ) )
THEN 334 ELSE IF( ldx.LT.max( 1, n ) )
THEN 338 CALL xerbla(
'DSPSVX', -info )
346 CALL dcopy( n*( n+1 ) / 2, ap, 1, afp, 1 )
347 CALL dsptrf( uplo, n, afp, ipiv, info )
359 anorm = dlansp(
'I', uplo, n, ap, work )
363 CALL dspcon( uplo, n, afp, ipiv, anorm, rcond, work, iwork, info )
367 CALL dlacpy(
'Full', n, nrhs, b, ldb, x, ldx )
368 CALL dsptrs( uplo, n, nrhs, afp, ipiv, x, ldx, info )
373 CALL dsprfs( uplo, n, nrhs, ap, afp, ipiv, b, ldb, x, ldx, ferr,
374 $ berr, work, iwork, info )
378 IF( rcond.LT.dlamch(
'Epsilon' ) )
subroutine dlacpy(UPLO, M, N, A, LDA, B, LDB)
DLACPY copies all or part of one two-dimensional array to another.
subroutine dsprfs(UPLO, N, NRHS, AP, AFP, IPIV, B, LDB, X, LDX, FERR, BERR, WORK, IWORK, INFO)
DSPRFS
subroutine dcopy(N, DX, INCX, DY, INCY)
DCOPY
subroutine xerbla(SRNAME, INFO)
XERBLA
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 dsptrs(UPLO, N, NRHS, AP, IPIV, B, LDB, INFO)
DSPTRS
subroutine dsptrf(UPLO, N, AP, IPIV, INFO)
DSPTRF
subroutine dspcon(UPLO, N, AP, IPIV, ANORM, RCOND, WORK, IWORK, INFO)
DSPCON