306 SUBROUTINE sposvx( FACT, UPLO, N, NRHS, A, LDA, AF, LDAF, EQUED,
307 $ s,
b, ldb,
x, ldx, rcond, ferr, berr, work,
316 CHARACTER equed, fact, uplo
317 INTEGER info, lda, ldaf, ldb, ldx, n, nrhs
322 REAL a( lda, * ), af( ldaf, * ),
b( ldb, * ),
323 $ berr( * ), ferr( * ), s( * ), 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
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 IF( .NOT.nofact .AND. .NOT.equil .AND. .NOT.
lsame( fact,
'F' ) )
369 ELSE IF( .NOT.
lsame( uplo,
'U' ) .AND. .NOT.
lsame( uplo,
'L' ) )
372 ELSE IF( n.LT.0 )
THEN
374 ELSE IF( nrhs.LT.0 )
THEN
376 ELSE IF( lda.LT.max( 1, n ) )
THEN
378 ELSE IF( ldaf.LT.max( 1, n ) )
THEN
380 ELSE IF(
lsame( fact,
'F' ) .AND. .NOT.
381 $ ( rcequ .OR.
lsame( equed,
'N' ) ) )
THEN
388 smin = min( smin, s(
j ) )
389 smax = max( smax, s(
j ) )
391 IF( smin.LE.zero )
THEN
393 ELSE IF( n.GT.0 )
THEN
394 scond = max( smin, smlnum ) / min( smax, bignum )
400 IF( ldb.LT.max( 1, n ) )
THEN
402 ELSE IF( ldx.LT.max( 1, n ) )
THEN
409 CALL
xerbla(
'SPOSVX', -info )
417 CALL
spoequ( n, a, lda, s, scond, amax, infequ )
418 IF( infequ.EQ.0 )
THEN
422 CALL
slaqsy( uplo, n, a, lda, s, scond, amax, equed )
423 rcequ =
lsame( equed,
'Y' )
432 b( i,
j ) = s( i )*
b( i,
j )
437 IF( nofact .OR. equil )
THEN
441 CALL
slacpy( uplo, n, n, a, lda, af, ldaf )
442 CALL
spotrf( uplo, n, af, ldaf, info )
454 anorm =
slansy(
'1', uplo, n, a, lda, work )
458 CALL
spocon( uplo, n, af, ldaf, anorm, rcond, work, iwork, info )
462 CALL
slacpy(
'Full', n, nrhs,
b, ldb,
x, ldx )
463 CALL
spotrs( uplo, n, nrhs, af, ldaf,
x, ldx, info )
468 CALL
sporfs( uplo, n, nrhs, a, lda, af, ldaf,
b, ldb,
x, ldx,
469 $ ferr, berr, work, iwork, info )
477 x( i,
j ) = s( i )*
x( i,
j )
481 ferr(
j ) = ferr(
j ) / scond
487 IF( rcond.LT.
slamch(
'Epsilon' ) )
REAL function slansy(NORM, UPLO, N, A, LDA, WORK)
SLANSY returns the value of the 1-norm, or the Frobenius norm, or the infinity norm, or the element of largest absolute value of a real symmetric matrix.
LOGICAL function lsame(CA, CB)
LSAME
REAL function slamch(CMACH)
SLAMCH
subroutine xerbla(SRNAME, INFO)
XERBLA
set ue cd $ADTTMP cat<< EOF > tmp f Program LinearEquations Implicit none Real b(3) integer i
subroutine sporfs(UPLO, N, NRHS, A, LDA, AF, LDAF, B, LDB, X, LDX, FERR, BERR, WORK, IWORK, INFO)
SPORFS
subroutine slaqsy(UPLO, N, A, LDA, S, SCOND, AMAX, EQUED)
SLAQSY scales a symmetric/Hermitian matrix, using scaling factors computed by spoequ.
subroutine slacpy(UPLO, M, N, A, LDA, B, LDB)
SLACPY copies all or part of one two-dimensional array to another.
subroutine sposvx(FACT, UPLO, N, NRHS, A, LDA, AF, LDAF, EQUED, S, B, LDB, X, LDX, RCOND, FERR, BERR, WORK, IWORK, INFO)
SPOSVX computes the solution to system of linear equations A * X = B for PO matrices ...
subroutine spocon(UPLO, N, A, LDA, ANORM, RCOND, WORK, IWORK, INFO)
SPOCON
subroutine spoequ(N, A, LDA, S, SCOND, AMAX, INFO)
SPOEQU
set ue cd $ADTTMP cat<< EOF > tmp f Program LinearEquations Implicit none Real j
subroutine spotrs(UPLO, N, NRHS, A, LDA, B, LDB, INFO)
SPOTRS
subroutine spotrf(UPLO, N, A, LDA, INFO)
SPOTRF