309 SUBROUTINE zppsvx( FACT, UPLO, N, NRHS, AP, AFP, EQUED, S, B, LDB,
310 $ X, LDX, RCOND, FERR, BERR, WORK, RWORK, INFO )
317 CHARACTER EQUED, FACT,
318 INTEGER INFO, LDB, LDX, N, NRHS
319 DOUBLE PRECISION RCOND
322 DOUBLE PRECISION BERR( * ), FERR( * ), RWORK( * ), S( * )
323 COMPLEX*16 ( * ), AP( * ), B( LDB, * ), WORK( * ),
330 DOUBLE PRECISION ZERO, ONE
331 parameter( zero = 0.0d+0, one = 1.0d+0 )
334 LOGICAL EQUIL, NOFACT, RCEQU
336 DOUBLE PRECISION AMAX, ANORM, BIGNUM, SCOND, SMAX, SMIN, SMLNUM
340 DOUBLE PRECISION DLAMCH, ZLANHP
341 EXTERNAL lsame, dlamch, zlanhp
353 nofact = lsame( fact,
'N' )
354 equil = lsame( fact,
'E' )
355 IF( nofact .OR. equil )
THEN
359 RCEQU = LSAME( EQUED, 'y
' )
360 SMLNUM = DLAMCH( 'safe minimum
' )
361 BIGNUM = ONE / SMLNUM
366.NOT..AND..NOT..AND..NOT.
IF( NOFACT EQUIL LSAME( FACT, 'f
' ) )
369.NOT.
ELSE IF( LSAME( UPLO, 'u.AND..NOT.
' ) LSAME( UPLO, 'l
' ) )
372.LT.
ELSE IF( N0 ) THEN
374.LT.
ELSE IF( NRHS0 ) THEN
376 ELSE IF( LSAME( FACT, 'f.AND..NOT.
' )
377.OR.
$ ( RCEQU LSAME( EQUED, 'n
' ) ) ) THEN
384 SMIN = MIN( SMIN, S( J ) )
385 SMAX = MAX( SMAX, S( J ) )
387.LE.
IF( SMINZERO ) THEN
389.GT.
ELSE IF( N0 ) THEN
390 SCOND = MAX( SMIN, SMLNUM ) / MIN( SMAX, BIGNUM )
396.LT.
IF( LDBMAX( 1, N ) ) THEN
398.LT.
ELSE IF( LDXMAX( 1, N ) ) THEN
405 CALL XERBLA( 'zppsvx', -INFO )
413 CALL ZPPEQU( UPLO, N, AP, S, SCOND, AMAX, INFEQU )
414.EQ.
IF( INFEQU0 ) THEN
418 CALL ZLAQHP( UPLO, N, AP, S, SCOND, AMAX, EQUED )
419 RCEQU = LSAME( EQUED, 'y' )
428 b( i, j ) = s( i )*b( i, j )
433 IF( nofact .OR. equil )
THEN
437 CALL zcopy( n*( n+1 ) / 2, ap, 1, afp, 1 )
438 CALL zpptrf( uplo, n, afp, info )
450 anorm = zlanhp(
'I', uplo, n, ap, rwork )
454 CALL zppcon( uplo, n, afp, anorm, rcond, work, rwork, info )
458 CALL zlacpy(
'Full', n, nrhs, b, ldb, x, ldx )
459 CALL zpptrs( uplo, n, nrhs, afp, x, ldx, info )
464 CALL zpprfs( uplo, n, nrhs, ap, afp, b, ldb, x, ldx, ferr, berr,
465 $ work, rwork, info )
473 x( i, j ) = s( i )*x( i, j )
477 ferr( j ) = ferr( j ) / scond
483 IF( rcond.LT.dlamch(
'Epsilon' ) )
subroutine zlacpy(uplo, m, n, a, lda, b, ldb)
ZLACPY copies all or part of one two-dimensional array to another.
subroutine zlaqhp(uplo, n, ap, s, scond, amax, equed)
ZLAQHP scales a Hermitian matrix stored in packed form.
subroutine zpprfs(uplo, n, nrhs, ap, afp, b, ldb, x, ldx, ferr, berr, work, rwork, info)
ZPPRFS
subroutine zppcon(uplo, n, ap, anorm, rcond, work, rwork, info)
ZPPCON
subroutine zppsvx(fact, uplo, n, nrhs, ap, afp, equed, s, b, ldb, x, ldx, rcond, ferr, berr, work, rwork, info)
ZPPSVX computes the solution to system of linear equations A * X = B for OTHER matrices