309 SUBROUTINE cppsvx( FACT, UPLO, N, NRHS, AP, AFP, EQUED, S, B, LDB,
310 $ X, LDX, RCOND, FERR, BERR, WORK, RWORK, INFO )
317 CHARACTER EQUED, FACT, UPLO
318 INTEGER INFO, , LDX, N, NRHS
322 REAL BERR( * ), FERR( * ), RWORK( * ), S( * )
323 COMPLEX AFP( * ), AP( * ), B( LDB, * ), WORK( * ),
331 parameter( zero = 0.0e+0, one = 1.0e+0 )
334 LOGICAL EQUIL, NOFACT, RCEQU
336 REAL AMAX, ANORM, BIGNUM, SCOND, SMAX, SMIN, SMLNUM
341 EXTERNAL lsame, clanhp, slamch
353 nofact = lsame( fact,
'N' )
354 equil = lsame( fact,
'E' )
355 IF( nofact .OR. equil )
THEN
359 RCEQU = LSAME( EQUED, 'y
' )
360 SMLNUM = SLAMCH( '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( 'cppsvx', -INFO )
413 CALL CPPEQU( UPLO, N, AP, S, SCOND, AMAX, INFEQU )
414.EQ.
IF( INFEQU0 ) THEN
418 CALL CLAQHP( UPLO, N, AP, S, SCOND, AMAX, EQUED )
419 RCEQU = LSAME( EQUED, 'y
' )
428 B( I, J ) = S( I )*B( I, J )
433.OR.
IF( NOFACT EQUIL ) THEN
437 CALL CCOPY( N*( N+1 ) / 2, AP, 1, AFP, 1 )
438 CALL CPPTRF( UPLO, N, AFP, INFO )
450 ANORM = CLANHP( 'i
', UPLO, N, AP, RWORK )
454 CALL CPPCON( UPLO, N, AFP, ANORM, RCOND, WORK, RWORK, INFO )
458 CALL CLACPY( 'full
', N, NRHS, B, LDB, X, LDX )
459 CALL CPPTRS( UPLO, N, NRHS, AFP, X, LDX, INFO )
464 CALL CPPRFS( 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.LT.
IF( RCONDSLAMCH( 'epsilon
' ) )
subroutine xerbla(srname, info)
XERBLA
subroutine clacpy(uplo, m, n, a, lda, b, ldb)
CLACPY copies all or part of one two-dimensional array to another.
subroutine claqhp(uplo, n, ap, s, scond, amax, equed)
CLAQHP scales a Hermitian matrix stored in packed form.
subroutine cppcon(uplo, n, ap, anorm, rcond, work, rwork, info)
CPPCON
subroutine cpptrf(uplo, n, ap, info)
CPPTRF
subroutine cppequ(uplo, n, ap, s, scond, amax, info)
CPPEQU
subroutine cpprfs(uplo, n, nrhs, ap, afp, b, ldb, x, ldx, ferr, berr, work, rwork, info)
CPPRFS
subroutine cpptrs(uplo, n, nrhs, ap, b, ldb, info)
CPPTRS
subroutine cppsvx(fact, uplo, n, nrhs, ap, afp, equed, s, b, ldb, x, ldx, rcond, ferr, berr, work, rwork, info)
CPPSVX computes the solution to system of linear equations A * X = B for OTHER matrices
subroutine ccopy(n, cx, incx, cy, incy)
CCOPY