283 SUBROUTINE dsysvx( 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
295 DOUBLE PRECISION RCOND
298 INTEGER IPIV( * ), IWORK( * )
299 DOUBLE PRECISION A( lda, * ), AF( ldaf, * ), B( ldb, * ),
300 $ berr( * ), ferr( * ), work( * ), x( ldx, * )
306 DOUBLE PRECISION ZERO
307 parameter( zero = 0.0d+0 )
310 LOGICAL LQUERY, NOFACT
312 DOUBLE PRECISION ANORM
317 DOUBLE PRECISION DLAMCH, DLANSY
318 EXTERNAL lsame, ilaenv, dlamch, dlansy
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,
'DSYTRF', uplo, n, -1, -1, -1 )
358 lwkopt = max( lwkopt, n*nb )
364 CALL
xerbla(
'DSYSVX', -info )
366 ELSE IF( lquery )
THEN
374 CALL
dlacpy( uplo, n, n, a, lda, af, ldaf )
375 CALL
dsytrf( uplo, n, af, ldaf, ipiv, work, lwork, info )
387 anorm = dlansy(
'I', uplo, n, a, lda, work )
391 CALL
dsycon( uplo, n, af, ldaf, ipiv, anorm, rcond, work, iwork,
396 CALL
dlacpy(
'Full', n, nrhs, b, ldb, x, ldx )
397 CALL
dsytrs( uplo, n, nrhs, af, ldaf, ipiv, x, ldx, info )
402 CALL
dsyrfs( uplo, n, nrhs, a, lda, af, ldaf, ipiv, b, ldb, x,
403 $ ldx, ferr, berr, work, iwork, info )
407 IF( rcond.LT.dlamch(
'Epsilon' ) )
subroutine dsysvx(FACT, UPLO, N, NRHS, A, LDA, AF, LDAF, IPIV, B, LDB, X, LDX, RCOND, FERR, BERR, WORK, LWORK, IWORK, INFO)
DSYSVX computes the solution to system of linear equations A * X = B for SY matrices ...
subroutine dsycon(UPLO, N, A, LDA, IPIV, ANORM, RCOND, WORK, IWORK, INFO)
DSYCON
subroutine dsyrfs(UPLO, N, NRHS, A, LDA, AF, LDAF, IPIV, B, LDB, X, LDX, FERR, BERR, WORK, IWORK, INFO)
DSYRFS
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine dsytrs(UPLO, N, NRHS, A, LDA, IPIV, B, LDB, INFO)
DSYTRS
subroutine dlacpy(UPLO, M, N, A, LDA, B, LDB)
DLACPY copies all or part of one two-dimensional array to another.
subroutine dsytrf(UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO)
DSYTRF