275 SUBROUTINE chpsvx( 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
289 REAL BERR( * ), FERR( * ), RWORK( * )
290 COMPLEX AFP( * ), AP( * ), B( ldb, * ), WORK( * ),
298 parameter( zero = 0.0e+0 )
307 EXTERNAL lsame, clanhp, slamch
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(
'CHPSVX', -info )
345 CALL ccopy( n*( n+1 ) / 2, ap, 1, afp, 1 )
346 CALL chptrf( uplo, n, afp, ipiv, info )
358 anorm = clanhp(
'I', uplo, n, ap, rwork )
362 CALL chpcon( uplo, n, afp, ipiv, anorm, rcond, work, info )
366 CALL clacpy(
'Full', n, nrhs, b, ldb, x, ldx )
367 CALL chptrs( uplo, n, nrhs, afp, ipiv, x, ldx, info )
372 CALL chprfs( uplo, n, nrhs, ap, afp, ipiv, b, ldb, x, ldx, ferr,
373 $ berr, work, rwork, info )
377 IF( rcond.LT.slamch(
'Epsilon' ) )
subroutine clacpy(UPLO, M, N, A, LDA, B, LDB)
CLACPY copies all or part of one two-dimensional array to another.
subroutine chprfs(UPLO, N, NRHS, AP, AFP, IPIV, B, LDB, X, LDX, FERR, BERR, WORK, RWORK, INFO)
CHPRFS
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine ccopy(N, CX, INCX, CY, INCY)
CCOPY
subroutine chptrf(UPLO, N, AP, IPIV, INFO)
CHPTRF
subroutine chptrs(UPLO, N, NRHS, AP, IPIV, B, LDB, INFO)
CHPTRS
subroutine chpsvx(FACT, UPLO, N, NRHS, AP, AFP, IPIV, B, LDB, X, LDX, RCOND, FERR, BERR, WORK, RWORK, INFO)
CHPSVX computes the solution to system of linear equations A * X = B for OTHER matrices ...
subroutine chpcon(UPLO, N, AP, IPIV, ANORM, RCOND, WORK, INFO)
CHPCON