275 SUBROUTINE zspsvx( FACT, UPLO, N, NRHS, AP, AFP, IPIV, B, LDB, X,
276 $ LDX, RCOND, FERR, BERR, WORK, RWORK, INFO )
284 INTEGER INFO, LDB, LDX, N, NRHS
285 DOUBLE PRECISION RCOND
289 DOUBLE PRECISION BERR( * ), FERR( * ), RWORK( * )
290 COMPLEX*16 AFP( * ), AP( * ), B( ldb, * ), WORK( * ),
297 DOUBLE PRECISION ZERO
298 parameter( zero = 0.0d+0 )
302 DOUBLE PRECISION ANORM
306 DOUBLE PRECISION DLAMCH, ZLANSP
307 EXTERNAL lsame, dlamch, zlansp
321 nofact = lsame( fact,
'N' )
322 IF( .NOT.nofact .AND. .NOT.lsame( fact,
'F' ) )
THEN 324 ELSE IF( .NOT.lsame( uplo,
'U' ) .AND. .NOT.lsame( uplo,
'L' ) )
327 ELSE IF( n.LT.0 )
THEN 329 ELSE IF( nrhs.LT.0 )
THEN 331 ELSE IF( ldb.LT.max( 1, n ) )
THEN 333 ELSE IF( ldx.LT.max( 1, n ) )
THEN 337 CALL xerbla(
'ZSPSVX', -info )
345 CALL zcopy( n*( n+1 ) / 2, ap, 1, afp, 1 )
346 CALL zsptrf( uplo, n, afp, ipiv, info )
358 anorm = zlansp(
'I', uplo, n, ap, rwork )
362 CALL zspcon( uplo, n, afp, ipiv, anorm, rcond, work, info )
366 CALL zlacpy(
'Full', n, nrhs, b, ldb, x, ldx )
367 CALL zsptrs( uplo, n, nrhs, afp, ipiv, x, ldx, info )
372 CALL zsprfs( uplo, n, nrhs, ap, afp, ipiv, b, ldb, x, ldx, ferr,
373 $ berr, work, rwork, info )
377 IF( rcond.LT.dlamch(
'Epsilon' ) )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zspcon(UPLO, N, AP, IPIV, ANORM, RCOND, WORK, INFO)
ZSPCON
subroutine zsptrs(UPLO, N, NRHS, AP, IPIV, B, LDB, INFO)
ZSPTRS
subroutine zcopy(N, ZX, INCX, ZY, INCY)
ZCOPY
subroutine zlacpy(UPLO, M, N, A, LDA, B, LDB)
ZLACPY copies all or part of one two-dimensional array to another.
subroutine zsptrf(UPLO, N, AP, IPIV, INFO)
ZSPTRF
subroutine zsprfs(UPLO, N, NRHS, AP, AFP, IPIV, B, LDB, X, LDX, FERR, BERR, WORK, RWORK, INFO)
ZSPRFS
subroutine zspsvx(FACT, UPLO, N, NRHS, AP, AFP, IPIV, B, LDB, X, LDX, RCOND, FERR, BERR, WORK, RWORK, INFO)
ZSPSVX computes the solution to system of linear equations A * X = B for OTHER matrices ...