284 SUBROUTINE zsysvx( FACT, UPLO, N, NRHS, A, LDA, AF, LDAF, IPIV, B,
285 $ LDB, X, LDX, RCOND, FERR, BERR, WORK, LWORK,
295 INTEGER INFO, LDA, LDAF, LDB, LDX, LWORK, N, NRHS
296 DOUBLE PRECISION RCOND
300 DOUBLE PRECISION BERR( * ), FERR( * ), RWORK( * )
301 COMPLEX*16 A( lda, * ), AF( ldaf, * ), B( ldb, * ),
302 $ work( * ), x( ldx, * )
308 DOUBLE PRECISION ZERO
309 parameter( zero = 0.0d+0 )
312 LOGICAL LQUERY, NOFACT
314 DOUBLE PRECISION ANORM
319 DOUBLE PRECISION DLAMCH, ZLANSY
320 EXTERNAL lsame, ilaenv, dlamch, zlansy
333 nofact = lsame( fact,
'N' )
334 lquery = ( lwork.EQ.-1 )
335 IF( .NOT.nofact .AND. .NOT.lsame( fact,
'F' ) )
THEN 337 ELSE IF( .NOT.lsame( uplo,
'U' ) .AND. .NOT.lsame( uplo,
'L' ) )
340 ELSE IF( n.LT.0 )
THEN 342 ELSE IF( nrhs.LT.0 )
THEN 344 ELSE IF( lda.LT.max( 1, n ) )
THEN 346 ELSE IF( ldaf.LT.max( 1, n ) )
THEN 348 ELSE IF( ldb.LT.max( 1, n ) )
THEN 350 ELSE IF( ldx.LT.max( 1, n ) )
THEN 352 ELSE IF( lwork.LT.max( 1, 2*n ) .AND. .NOT.lquery )
THEN 357 lwkopt = max( 1, 2*n )
359 nb = ilaenv( 1,
'ZSYTRF', uplo, n, -1, -1, -1 )
360 lwkopt = max( lwkopt, n*nb )
366 CALL xerbla(
'ZSYSVX', -info )
368 ELSE IF( lquery )
THEN 376 CALL zlacpy( uplo, n, n, a, lda, af, ldaf )
377 CALL zsytrf( uplo, n, af, ldaf, ipiv, work, lwork, info )
389 anorm = zlansy(
'I', uplo, n, a, lda, rwork )
393 CALL zsycon( uplo, n, af, ldaf, ipiv, anorm, rcond, work, info )
397 CALL zlacpy(
'Full', n, nrhs, b, ldb, x, ldx )
398 CALL zsytrs( uplo, n, nrhs, af, ldaf, ipiv, x, ldx, info )
403 CALL zsyrfs( uplo, n, nrhs, a, lda, af, ldaf, ipiv, b, ldb, x,
404 $ ldx, ferr, berr, work, rwork, info )
408 IF( rcond.LT.dlamch(
'Epsilon' ) )
subroutine zsycon(UPLO, N, A, LDA, IPIV, ANORM, RCOND, WORK, INFO)
ZSYCON
subroutine zlacpy(UPLO, M, N, A, LDA, B, LDB)
ZLACPY copies all or part of one two-dimensional array to another.
subroutine zsytrf(UPLO, N, A, LDA, IPIV, WORK, LWORK, INFO)
ZSYTRF
subroutine zsyrfs(UPLO, N, NRHS, A, LDA, AF, LDAF, IPIV, B, LDB, X, LDX, FERR, BERR, WORK, RWORK, INFO)
ZSYRFS
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zsysvx(FACT, UPLO, N, NRHS, A, LDA, AF, LDAF, IPIV, B, LDB, X, LDX, RCOND, FERR, BERR, WORK, LWORK, RWORK, INFO)
ZSYSVX computes the solution to system of linear equations A * X = B for SY matrices ...
subroutine zsytrs(UPLO, N, NRHS, A, LDA, IPIV, B, LDB, INFO)
ZSYTRS