179 SUBROUTINE zhegv( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK,
180 $ LWORK, RWORK, INFO )
188 INTEGER INFO, ITYPE, LDA, LDB, LWORK, N
191 DOUBLE PRECISION ( * ), W( * )
192 COMPLEX*16 A( LDA, * ), B( LDB, * ), ( * )
199 parameter( one = ( 1.0d+0, 0.0d+0 ) )
202 LOGICAL LQUERY, UPPER, WANTZ
204 INTEGER LWKOPT, NB, NEIG
221 wantz = lsame( jobz,
'V' )
222 upper = lsame( uplo, 'u
' )
223.EQ.
LQUERY = ( LWORK-1 )
226.LT..OR..GT.
IF( ITYPE1 ITYPE3 ) THEN
228.NOT..OR.
ELSE IF( ( WANTZ LSAME( JOBZ, 'n
' ) ) ) THEN
230.NOT..OR.
ELSE IF( ( UPPER LSAME( UPLO, 'l
' ) ) ) THEN
232.LT.
ELSE IF( N0 ) THEN
234.LT.
ELSE IF( LDAMAX( 1, N ) ) THEN
236.LT.
ELSE IF( LDBMAX( 1, N ) ) THEN
241 NB = ILAENV( 1, 'zhetrd', UPLO, N, -1, -1, -1 )
242 LWKOPT = MAX( 1, ( NB + 1 )*N )
245.LT..AND..NOT.
IF( LWORKMAX( 1, 2*N - 1 ) LQUERY ) THEN
251 CALL XERBLA( 'zhegv ', -INFO )
253 ELSE IF( LQUERY ) THEN
264 CALL ZPOTRF( UPLO, N, B, LDB, INFO )
272 CALL ZHEGST( ITYPE, UPLO, N, A, LDA, B, LDB, INFO )
273 CALL ZHEEV( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, RWORK, INFO )
282.EQ..OR..EQ.
IF( ITYPE1 ITYPE2 ) THEN
293 CALL ZTRSM( 'left
', UPLO, TRANS, 'non
', N, NEIG, ONE,
296.EQ.
ELSE IF( ITYPE3 ) THEN
307 CALL ZTRMM( 'left
', UPLO, TRANS, 'non-unit
', N, NEIG, ONE,
integer function ilaenv(ispec, name, opts, n1, n2, n3, n4)
ILAENV
subroutine xerbla(srname, info)
XERBLA
subroutine zhetrd(uplo, n, a, lda, d, e, tau, work, lwork, info)
ZHETRD
subroutine zhegst(itype, uplo, n, a, lda, b, ldb, info)
ZHEGST
subroutine zheev(jobz, uplo, n, a, lda, w, work, lwork, rwork, info)
ZHEEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for HE matrices
subroutine zhegv(itype, jobz, uplo, n, a, lda, b, ldb, w, work, lwork, rwork, info)
ZHEGV
subroutine ztrmm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
ZTRMM
subroutine ztrsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
ZTRSM
subroutine zpotrf(uplo, n, a, lda, info)
ZPOTRF VARIANT: right looking block version of the algorithm, calling Level 3 BLAS.