282 SUBROUTINE zhesvx( FACT, UPLO, N, NRHS, A, LDA, AF, LDAF, IPIV, B,
283 $ LDB, X, LDX, RCOND, FERR, BERR, WORK, LWORK,
292 INTEGER INFO, LDA, LDAF, LDB, LDX, LWORK, N, NRHS
293 DOUBLE PRECISION RCOND
297 DOUBLE PRECISION BERR( * ), FERR( * ), RWORK( * )
298 COMPLEX*16 A( LDA, * ), AF( LDAF, * ), B( LDB, * ),
299 $ work( * ), x( ldx, * )
305 DOUBLE PRECISION ZERO
306 PARAMETER ( ZERO = 0.0d+0 )
309 LOGICAL LQUERY, NOFACT
311 DOUBLE PRECISION ANORM
316 DOUBLE PRECISION DLAMCH, ZLANHE
317 EXTERNAL lsame, ilaenv, dlamch, zlanhe
330 nofact = lsame( fact,
'N' )
331 lquery = ( lwork.EQ.-1 )
332 IF( .NOT.nofact .AND. .NOT.lsame( fact,
'F' ) )
THEN
334 ELSE IF( .NOT.lsame( uplo,
'U' ) .AND. .NOT.lsame( uplo,
'L' ) )
337 ELSE IF( n.LT.0 )
THEN
339 ELSE IF( nrhs.LT.0 )
THEN
341 ELSE IF( lda.LT.max( 1, n ) )
THEN
343 ELSE IF( ldaf.LT.max( 1, n ) )
THEN
345 ELSE IF( ldb.LT.max( 1, n ) )
THEN
347 ELSE IF( ldx.LT.max( 1, n ) )
THEN
349 ELSE IF( lwork.LT.max( 1, 2*n ) .AND. .NOT.lquery )
THEN
354 lwkopt = max( 1, 2*n )
356 nb = ilaenv( 1,
'ZHETRF', uplo, n, -1, -1, -1 )
357 lwkopt = max( lwkopt, n*nb )
363 CALL xerbla(
'ZHESVX', -info )
365 ELSE IF( lquery )
THEN
373 CALL zlacpy( uplo, n, n, a, lda, af, ldaf )
374 CALL zhetrf( uplo, n, af, ldaf, ipiv, work, lwork, info )
386 anorm = zlanhe(
'I', uplo, n, a, lda, rwork )
390 CALL zhecon( uplo, n, af, ldaf, ipiv, anorm, rcond, work, info )
394 CALL zlacpy(
'Full', n, nrhs, b, ldb, x, ldx )
395 CALL zhetrs( uplo, n, nrhs, af, ldaf, ipiv, x, ldx, info )
400 CALL zherfs( uplo, n, nrhs, a, lda, af, ldaf, ipiv, b, ldb, x,
401 $ ldx, ferr, berr, work, rwork, info )
405 IF( rcond.LT.dlamch(
'Epsilon' ) )
subroutine xerbla(srname, info)
subroutine zhecon(uplo, n, a, lda, ipiv, anorm, rcond, work, info)
ZHECON
subroutine zherfs(uplo, n, nrhs, a, lda, af, ldaf, ipiv, b, ldb, x, ldx, ferr, berr, work, rwork, info)
ZHERFS
subroutine zhesvx(fact, uplo, n, nrhs, a, lda, af, ldaf, ipiv, b, ldb, x, ldx, rcond, ferr, berr, work, lwork, rwork, info)
ZHESVX computes the solution to system of linear equations A * X = B for HE matrices
subroutine zhetrf(uplo, n, a, lda, ipiv, work, lwork, info)
ZHETRF
subroutine zhetrs(uplo, n, nrhs, a, lda, ipiv, b, ldb, info)
ZHETRS
subroutine zlacpy(uplo, m, n, a, lda, b, ldb)
ZLACPY copies all or part of one two-dimensional array to another.