276 SUBROUTINE sspsvx( FACT, UPLO, N, NRHS, AP, AFP, IPIV, B, LDB, X,
277 $ LDX, RCOND, FERR, BERR, WORK, IWORK, INFO )
286 INTEGER INFO, LDB, LDX, N, NRHS
290 INTEGER IPIV( * ), IWORK( * )
291 REAL AFP( * ), AP( * ), B( LDB, * ), BERR( * ),
292 $ ferr( * ), work( * ), x( ldx, * )
299 parameter( zero = 0.0e+0 )
308 EXTERNAL lsame, slamch, slansp
322 nofact = lsame( fact,
'N' )
323 IF( .NOT.nofact .AND. .NOT.lsame( fact,
'F' ) )
THEN
325 ELSE IF( .NOT.lsame( uplo,
'U' ) .AND. .NOT.lsame( uplo,
'L' ) )
328 ELSE IF( n.LT.0 )
THEN
330 ELSE IF( nrhs.LT.0 )
THEN
332 ELSE IF( ldb.LT.max( 1, n ) )
THEN
334 ELSE IF( ldx.LT.max( 1, n ) )
THEN
338 CALL xerbla(
'SSPSVX', -info )
346 CALL scopy( n*( n+1 ) / 2, ap, 1, afp, 1 )
347 CALL ssptrf( uplo, n, afp, ipiv, info )
359 anorm = slansp(
'I', uplo, n, ap, work )
363 CALL sspcon( uplo, n, afp, ipiv, anorm, rcond, work, iwork, info )
367 CALL slacpy(
'Full', n, nrhs, b, ldb, x, ldx )
368 CALL ssptrs( uplo, n, nrhs, afp, ipiv, x, ldx, info )
373 CALL ssprfs( uplo, n, nrhs, ap, afp, ipiv, b, ldb, x, ldx, ferr,
374 $ berr, work, iwork, info )
378 IF( rcond.LT.slamch(
'Epsilon' ) )