247 SUBROUTINE zhegvd( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK,
248 $ LWORK, RWORK, LRWORK, IWORK, LIWORK, INFO )
256 INTEGER INFO, , LDA, LDB, LIWORK, LRWORK, LWORK, N
260 DOUBLE PRECISION RWORK( * ), W( * )
261 COMPLEX*16 A( , * ), B( LDB, * ), WORK( * )
268 PARAMETER ( cone = ( 1.0d+0, 0.0d+0 ) )
271 LOGICAL LQUERY, UPPER, WANTZ
273 INTEGER LIOPT, LIWMIN, LOPT, LROPT, LRWMIN, LWMIN
289 wantz =
lsame( jobz,
'V' )
290 upper =
lsame( uplo,
'U' )
291 lquery = ( lwork.EQ.-1 .OR. lrwork.EQ.-1 .OR. liwork.EQ.-1 )
298 ELSE IF( wantz )
THEN
300 lrwmin = 1 + 5*n + 2*n*n
310 IF( itype.LT.1 .OR. itype.GT.3 )
THEN
312 ELSE IF( .NOT.( wantz .OR.
lsame( jobz,
'N' ) ) )
THEN
314 ELSE IF( .NOT.
'L'THEN
316 ELSE IF( n.LT.0 )
THEN
318 ELSE IF( lda.LT.
max( 1, n ) )
THEN
320 ELSE IF( ldb.LT.
max( 1, n ) )
THEN
329 IF( lwork.LT.lwmin .AND. .NOT.lquery )
THEN
331 ELSE IF( lrwork.LT.lrwmin .AND. .NOT.lquery )
THEN
333 ELSE IF( liwork.LT.liwmin .AND. .NOT.lquery )
THEN
341 ELSE IF( LQUERY ) THEN
352 CALL ZPOTRF( UPLO, N, B, LDB, INFO )
360 CALL ZHEGST( ITYPE, UPLO, N, A, LDA, B, LDB, INFO )
361 CALL ZHEEVD( JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, RWORK, LRWORK,
362 $ IWORK, LIWORK, INFO )
363 LOPT = MAX( DBLE( LOPT ), DBLE( WORK( 1 ) ) )
364 LROPT = MAX( DBLE( LROPT ), DBLE( RWORK( 1 ) ) )
365 LIOPT = MAX( DBLE( LIOPT ), DBLE( IWORK( 1 ) ) )
367.AND..EQ.
IF( WANTZ INFO0 ) THEN
371.EQ..OR..EQ.
IF( ITYPE1 ITYPE2 ) THEN
382 CALL ZTRSM( 'left', uplo, trans,
'Non-unit', n, n, cone,
385 ELSE IF( itype.EQ.3 )
THEN
396 CALL ztrmm(
'Left', uplo, trans,
'Non-unit', n, n, cone,
subroutine xerbla(srname, info)
XERBLA
logical function lsame(ca, cb)
LSAME
subroutine zhegst(itype, uplo, n, a, lda, b, ldb, info)
ZHEGST
subroutine zhegvd(itype, jobz, uplo, n, a, lda, b, ldb, w, work, lwork, rwork, lrwork, iwork, liwork, info)
ZHEGVD
subroutine zheevd(jobz, uplo, n, a, lda, w, work, lwork, rwork, lrwork, iwork, liwork, info)
ZHEEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for HE matrices
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.