247 SUBROUTINE zhegvd( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK,
248 $ LWORK, RWORK, LRWORK, IWORK, LIWORK, INFO )
256 INTEGER INFO, ITYPE, LDA, LDB, LIWORK, LRWORK, LWORK, N
260 DOUBLE PRECISION RWORK( * ), W( * )
261 COMPLEX*16 A( lda, * ), 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.( upper .OR. lsame( uplo,
'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 339 CALL xerbla(
'ZHEGVD', -info )
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 = int( max( dble( lopt ), dble( work( 1 ) ) ) )
364 lropt = int( max( dble( lropt ), dble( rwork( 1 ) ) ) )
365 liopt = int( max( dble( liopt ), dble( iwork( 1 ) ) ) )
367 IF( wantz .AND. info.EQ.0 )
THEN 371 IF( itype.EQ.1 .OR. itype.EQ.2 )
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 zhegst(ITYPE, UPLO, N, A, LDA, B, LDB, INFO)
ZHEGST
subroutine ztrmm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
ZTRMM
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine zpotrf(UPLO, N, A, LDA, INFO)
ZPOTRF
subroutine ztrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
ZTRSM
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 ...