283 SUBROUTINE ssysvx( FACT, UPLO, N, NRHS, A, LDA, AF, LDAF, IPIV, B,
284 $ LDB, X, LDX, RCOND, FERR, BERR, WORK, LWORK,
294 INTEGER INFO, LDA, LDAF, LDB, LDX, LWORK, N, NRHS
298 INTEGER IPIV( * ), IWORK( * )
299 REAL A( LDA, * ), AF( LDAF, * ), B( LDB, * ),
300 $ berr( * ), ferr( * ), work( * ), x( ldx, * )
307 PARAMETER ( ZERO = 0.0e+0 )
310 LOGICAL LQUERY, NOFACT
318 EXTERNAL ilaenv, lsame, slamch, slansy
331 nofact = lsame( fact,
'N' )
332 lquery = ( lwork.EQ.-1 )
333 IF( .NOT.nofact .AND. .NOT.lsame( fact,
'F' ) )
THEN
335 ELSE IF( .NOT.lsame( uplo,
'U' ) .AND. .NOT.lsame( uplo,
'L' ) )
338 ELSE IF( n.LT.0 )
THEN
340 ELSE IF( nrhs.LT.0 )
THEN
342 ELSE IF( lda.LT.max( 1, n ) )
THEN
344 ELSE IF( ldaf.LT.max( 1, n ) )
THEN
346 ELSE IF( ldb.LT.max( 1, n ) )
THEN
348 ELSE IF( ldx.LT.max( 1, n ) )
THEN
350 ELSE IF( lwork.LT.max( 1, 3*n ) .AND. .NOT.lquery )
THEN
355 lwkopt = max( 1, 3*n )
357 nb = ilaenv( 1,
'SSYTRF', uplo, n, -1, -1, -1 )
358 lwkopt = max( lwkopt, n*nb )
364 CALL xerbla(
'SSYSVX', -info )
366 ELSE IF( lquery )
THEN
374 CALL slacpy( uplo, n, n, a, lda, af, ldaf )
375 CALL ssytrf( uplo, n, af, ldaf, ipiv, work, lwork, info )
387 anorm = slansy(
'I', uplo, n, a, lda, work )
391 CALL ssycon( uplo, n, af, ldaf, ipiv, anorm, rcond, work, iwork,
396 CALL slacpy(
'Full', n, nrhs, b, ldb, x, ldx )
397 CALL ssytrs( uplo, n, nrhs, af, ldaf, ipiv, x, ldx, info )
402 CALL ssyrfs( uplo, n, nrhs, a, lda, af, ldaf, ipiv, b, ldb, x,
403 $ ldx, ferr, berr, work, iwork, info )
407 IF( rcond.LT.slamch(
'Epsilon' ) )