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 xerbla(srname, info)
subroutine ccopy(n, cx, incx, cy, incy)
CCOPY
subroutine chpcon(uplo, n, ap, ipiv, anorm, rcond, work, info)
CHPCON
subroutine chprfs(uplo, n, nrhs, ap, afp, ipiv, b, ldb, x, ldx, ferr, berr, work, rwork, info)
CHPRFS
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 chptrf(uplo, n, ap, ipiv, info)
CHPTRF
subroutine chptrs(uplo, n, nrhs, ap, ipiv, b, ldb, info)
CHPTRS
subroutine clacpy(uplo, m, n, a, lda, b, ldb)
CLACPY copies all or part of one two-dimensional array to another.