311 SUBROUTINE sppsvx( FACT, UPLO, N, NRHS, AP, AFP, EQUED, S, B, LDB,
312 $ X, LDX, RCOND, FERR, BERR, WORK, IWORK, INFO )
320 CHARACTER EQUED, FACT, UPLO
321 INTEGER INFO, LDB, LDX, N, NRHS
326 REAL AFP( * ), AP( * ), B( ldb, * ), BERR( * ),
327 $ ferr( * ), s( * ), work( * ), x( ldx, * )
334 parameter( zero = 0.0e+0, one = 1.0e+0 )
337 LOGICAL EQUIL, NOFACT, RCEQU
339 REAL AMAX, ANORM, BIGNUM, SCOND, SMAX, SMIN, SMLNUM
344 EXTERNAL lsame, slamch, slansp
356 nofact = lsame( fact,
'N' )
357 equil = lsame( fact,
'E' )
358 IF( nofact .OR. equil )
THEN 362 rcequ = lsame( equed,
'Y' )
363 smlnum = slamch(
'Safe minimum' )
364 bignum = one / smlnum
369 IF( .NOT.nofact .AND. .NOT.equil .AND. .NOT.lsame( fact,
'F' ) )
372 ELSE IF( .NOT.lsame( uplo,
'U' ) .AND. .NOT.lsame( uplo,
'L' ) )
375 ELSE IF( n.LT.0 )
THEN 377 ELSE IF( nrhs.LT.0 )
THEN 379 ELSE IF( lsame( fact,
'F' ) .AND. .NOT.
380 $ ( rcequ .OR. lsame( equed,
'N' ) ) )
THEN 387 smin = min( smin, s( j ) )
388 smax = max( smax, s( j ) )
390 IF( smin.LE.zero )
THEN 392 ELSE IF( n.GT.0 )
THEN 393 scond = max( smin, smlnum ) / min( smax, bignum )
399 IF( ldb.LT.max( 1, n ) )
THEN 401 ELSE IF( ldx.LT.max( 1, n ) )
THEN 408 CALL xerbla(
'SPPSVX', -info )
416 CALL sppequ( uplo, n, ap, s, scond, amax, infequ )
417 IF( infequ.EQ.0 )
THEN 421 CALL slaqsp( uplo, n, ap, s, scond, amax, equed )
422 rcequ = lsame( equed,
'Y' )
431 b( i, j ) = s( i )*b( i, j )
436 IF( nofact .OR. equil )
THEN 440 CALL scopy( n*( n+1 ) / 2, ap, 1, afp, 1 )
441 CALL spptrf( uplo, n, afp, info )
453 anorm = slansp(
'I', uplo, n, ap, work )
457 CALL sppcon( uplo, n, afp, anorm, rcond, work, iwork, info )
461 CALL slacpy(
'Full', n, nrhs, b, ldb, x, ldx )
462 CALL spptrs( uplo, n, nrhs, afp, x, ldx, info )
467 CALL spprfs( uplo, n, nrhs, ap, afp, b, ldb, x, ldx, ferr, berr,
468 $ work, iwork, info )
476 x( i, j ) = s( i )*x( i, j )
480 ferr( j ) = ferr( j ) / scond
486 IF( rcond.LT.slamch(
'Epsilon' ) )
subroutine spptrs(UPLO, N, NRHS, AP, B, LDB, INFO)
SPPTRS
subroutine sppcon(UPLO, N, AP, ANORM, RCOND, WORK, IWORK, INFO)
SPPCON
subroutine sppequ(UPLO, N, AP, S, SCOND, AMAX, INFO)
SPPEQU
subroutine sppsvx(FACT, UPLO, N, NRHS, AP, AFP, EQUED, S, B, LDB, X, LDX, RCOND, FERR, BERR, WORK, IWORK, INFO)
SPPSVX computes the solution to system of linear equations A * X = B for OTHER matrices ...
subroutine spptrf(UPLO, N, AP, INFO)
SPPTRF
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine slaqsp(UPLO, N, AP, S, SCOND, AMAX, EQUED)
SLAQSP scales a symmetric/Hermitian matrix in packed storage, using scaling factors computed by sppeq...
subroutine slacpy(UPLO, M, N, A, LDA, B, LDB)
SLACPY copies all or part of one two-dimensional array to another.
subroutine scopy(N, SX, INCX, SY, INCY)
SCOPY
subroutine spprfs(UPLO, N, NRHS, AP, AFP, B, LDB, X, LDX, FERR, BERR, WORK, IWORK, INFO)
SPPRFS