301      SUBROUTINE zposvx( FACT, UPLO, N, NRHS, A, LDA, AF, LDAF,
 
  303     $                   S, B, LDB, X, LDX, RCOND, FERR, BERR, WORK,
 
  311      CHARACTER          EQUED, FACT, UPLO
 
  312      INTEGER            INFO, LDA, LDAF, LDB, LDX, N, NRHS
 
  313      DOUBLE PRECISION   RCOND
 
  316      DOUBLE PRECISION   BERR( * ), FERR( * ), RWORK( * ), S( * )
 
  317      COMPLEX*16         A( LDA, * ), AF( LDAF, * ), B( LDB, * ),
 
  318     $                   WORK( * ), X( LDX, * )
 
  324      DOUBLE PRECISION   ZERO, ONE
 
  325      PARAMETER          ( ZERO = 0.0d+0, one = 1.0d+0 )
 
  328      LOGICAL            EQUIL, NOFACT, RCEQU
 
  330      DOUBLE PRECISION   AMAX, ANORM, BIGNUM, SCOND, SMAX, SMIN, SMLNUM
 
  334      DOUBLE PRECISION   DLAMCH, ZLANHE
 
  335      EXTERNAL           LSAME, DLAMCH, ZLANHE
 
  348      nofact = lsame( fact, 
'N' )
 
  349      equil = lsame( fact, 
'E' )
 
  350      IF( nofact .OR. equil ) 
THEN 
  354         rcequ = lsame( equed, 
'Y' )
 
  355         smlnum = dlamch( 
'Safe minimum' )
 
  356         bignum = one / smlnum
 
  361      IF( .NOT.nofact .AND.
 
  363     $    .NOT.lsame( fact, 
'F' ) )
 
  366      ELSE IF( .NOT.lsame( uplo, 
'U' ) .AND.
 
  367     $         .NOT.lsame( uplo, 
'L' ) )
 
  370      ELSE IF( n.LT.0 ) 
THEN 
  372      ELSE IF( nrhs.LT.0 ) 
THEN 
  374      ELSE IF( lda.LT.max( 1, n ) ) 
THEN 
  376      ELSE IF( ldaf.LT.max( 1, n ) ) 
THEN 
  378      ELSE IF( lsame( fact, 
'F' ) .AND. .NOT.
 
  379     $         ( rcequ .OR. lsame( equed, 
'N' ) ) ) 
THEN 
  386               smin = min( smin, s( j ) )
 
  387               smax = max( smax, s( j ) )
 
  389            IF( smin.LE.zero ) 
THEN 
  391            ELSE IF( n.GT.0 ) 
THEN 
  392               scond = max( smin, smlnum ) / min( smax, bignum )
 
  398            IF( ldb.LT.max( 1, n ) ) 
THEN 
  400            ELSE IF( ldx.LT.max( 1, n ) ) 
THEN 
  407         CALL xerbla( 
'ZPOSVX', -info )
 
  415         CALL zpoequ( n, a, lda, s, scond, amax, infequ )
 
  416         IF( infequ.EQ.0 ) 
THEN 
  420            CALL zlaqhe( uplo, n, a, lda, s, scond, amax, equed )
 
  421            rcequ = lsame( equed, 
'Y' )
 
  430               b( i, j ) = s( i )*b( i, j )
 
  435      IF( nofact .OR. equil ) 
THEN 
  439         CALL zlacpy( uplo, n, n, a, lda, af, ldaf )
 
  440         CALL zpotrf( uplo, n, af, ldaf, info )
 
  452      anorm = zlanhe( 
'1', uplo, n, a, lda, rwork )
 
  456      CALL zpocon( uplo, n, af, ldaf, anorm, rcond, work, rwork,
 
  461      CALL zlacpy( 
'Full', n, nrhs, b, ldb, x, ldx )
 
  462      CALL zpotrs( uplo, n, nrhs, af, ldaf, x, ldx, info )
 
  467      CALL zporfs( uplo, n, nrhs, a, lda, af, ldaf, b, ldb, x, ldx,
 
  468     $             ferr, berr, work, rwork, info )
 
  476               x( i, j ) = s( i )*x( i, j )
 
  480            ferr( j ) = ferr( j ) / scond
 
  486      IF( rcond.LT.dlamch( 
'Epsilon' ) )
 
 
subroutine zporfs(uplo, n, nrhs, a, lda, af, ldaf, b, ldb, x, ldx, ferr, berr, work, rwork, info)
ZPORFS
subroutine zposvx(fact, uplo, n, nrhs, a, lda, af, ldaf, equed, s, b, ldb, x, ldx, rcond, ferr, berr, work, rwork, info)
ZPOSVX computes the solution to system of linear equations A * X = B for PO matrices