275 SUBROUTINE zhpsvx( 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, ZLANHP
307 EXTERNAL lsame, dlamch, zlanhp
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
345 CALL ZCOPY( N*( N+1 ) / 2, AP, 1, AFP, 1 )
346 CALL ZHPTRF( UPLO, N, AFP, IPIV, INFO )
358 ANORM = ZLANHP( 'i
', UPLO, N, AP, RWORK )
362 CALL ZHPCON( UPLO, N, AFP, IPIV, ANORM, RCOND, WORK, INFO )
366 CALL ZLACPY( 'full
', N, NRHS, B, LDB, X, LDX )
367 CALL ZHPTRS( UPLO, N, NRHS, AFP, IPIV, X, LDX, INFO )
372 CALL ZHPRFS( UPLO, N, NRHS, AP, AFP, IPIV, B, LDB, X, LDX, FERR,
373 $ BERR, WORK, RWORK, INFO )
377.LT.
IF( RCONDDLAMCH( 'epsilon
' ) )
subroutine xerbla(srname, info)
XERBLA
subroutine zlacpy(uplo, m, n, a, lda, b, ldb)
ZLACPY copies all or part of one two-dimensional array to another.
subroutine zhptrs(uplo, n, nrhs, ap, ipiv, b, ldb, info)
ZHPTRS
subroutine zhpcon(uplo, n, ap, ipiv, anorm, rcond, work, info)
ZHPCON
subroutine zhprfs(uplo, n, nrhs, ap, afp, ipiv, b, ldb, x, ldx, ferr, berr, work, rwork, info)
ZHPRFS
subroutine zhptrf(uplo, n, ap, ipiv, info)
ZHPTRF
subroutine zhpsvx(fact, uplo, n, nrhs, ap, afp, ipiv, b, ldb, x, ldx, rcond, ferr, berr, work, rwork, info)
ZHPSVX computes the solution to system of linear equations A * X = B for OTHER matrices
subroutine zcopy(n, zx, incx, zy, incy)
ZCOPY