280 SUBROUTINE zhesvx( FACT, UPLO, N, NRHS, A, LDA, AF, LDAF, IPIV,
282 $ LDB, X, LDX, RCOND, FERR, BERR, WORK, LWORK,
291 INTEGER INFO, LDA, LDAF, LDB, LDX, LWORK, N, NRHS
292 DOUBLE PRECISION RCOND
296 DOUBLE PRECISION BERR( * ), FERR( * ), RWORK( * )
297 COMPLEX*16 A( LDA, * ), AF( LDAF, * ), B( LDB, * ),
298 $ work( * ), x( ldx, * )
304 DOUBLE PRECISION ZERO
305 PARAMETER ( ZERO = 0.0d+0 )
308 LOGICAL LQUERY, NOFACT
309 INTEGER LWKOPT, LWKMIN, NB
310 DOUBLE PRECISION ANORM
315 DOUBLE PRECISION DLAMCH, ZLANHE
316 EXTERNAL lsame, ilaenv, dlamch, zlanhe
330 nofact = lsame( fact,
'N' )
331 lquery = ( lwork.EQ.-1 )
332 lwkmin = max( 1, 2*n )
333 IF( .NOT.nofact .AND. .NOT.lsame( fact,
'F' ) )
THEN
335 ELSE IF( .NOT.lsame( uplo,
'U' ) .AND.
336 $ .NOT.lsame( uplo,
'L' ) )
339 ELSE IF( n.LT.0 )
THEN
341 ELSE IF( nrhs.LT.0 )
THEN
343 ELSE IF( lda.LT.max( 1, n ) )
THEN
345 ELSE IF( ldaf.LT.max( 1, n ) )
THEN
347 ELSE IF( ldb.LT.max( 1, n ) )
THEN
349 ELSE IF( ldx.LT.max( 1, n ) )
THEN
351 ELSE IF( lwork.LT.lwkmin .AND. .NOT.lquery )
THEN
358 nb = ilaenv( 1,
'ZHETRF', uplo, n, -1, -1, -1 )
359 lwkopt = max( lwkopt, n*nb )
365 CALL xerbla(
'ZHESVX', -info )
367 ELSE IF( lquery )
THEN
375 CALL zlacpy( uplo, n, n, a, lda, af, ldaf )
376 CALL zhetrf( uplo, n, af, ldaf, ipiv, work, lwork, info )
388 anorm = zlanhe(
'I', uplo, n, a, lda, rwork )
392 CALL zhecon( uplo, n, af, ldaf, ipiv, anorm, rcond, work,
397 CALL zlacpy(
'Full', n, nrhs, b, ldb, x, ldx )
398 CALL zhetrs( uplo, n, nrhs, af, ldaf, ipiv, x, ldx, info )
403 CALL zherfs( 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 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 zlacpy(uplo, m, n, a, lda, b, ldb)
ZLACPY copies all or part of one two-dimensional array to another.