247 SUBROUTINE chegvd( 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 REAL RWORK( * ), W( * )
261 COMPLEX A( lda, * ), B( ldb, * ), WORK( * )
268 parameter( cone = ( 1.0e+0, 0.0e+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(
'CHEGVD', -info )
341 ELSE IF( lquery )
THEN 352 CALL cpotrf( uplo, n, b, ldb, info )
360 CALL chegst( itype, uplo, n, a, lda, b, ldb, info )
361 CALL cheevd( jobz, uplo, n, a, lda, w, work, lwork, rwork, lrwork,
362 $ iwork, liwork, info )
363 lopt = int( max(
REAL( LOPT ),
REAL( WORK( 1 ) ) ) )
364 lropt = int( max(
REAL( LROPT ),
REAL( RWORK( 1 ) ) ) )
365 liopt = int( max(
REAL( LIOPT ),
REAL( IWORK( 1 ) ) ) )
367 IF( wantz .AND. info.EQ.0 )
THEN 371 IF( itype.EQ.1 .OR. itype.EQ.2 )
THEN 382 CALL ctrsm(
'Left', uplo, trans,
'Non-unit', n, n, cone,
385 ELSE IF( itype.EQ.3 )
THEN 396 CALL ctrmm(
'Left', uplo, trans,
'Non-unit', n, n, cone,
subroutine cpotrf(UPLO, N, A, LDA, INFO)
CPOTRF
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine ctrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
CTRSM
subroutine ctrmm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
CTRMM
subroutine chegst(ITYPE, UPLO, N, A, LDA, B, LDB, INFO)
CHEGST
subroutine cheevd(JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, RWORK, LRWORK, IWORK, LIWORK, INFO)
CHEEVD computes the eigenvalues and, optionally, the left and/or right eigenvectors for HE matrices ...
subroutine chegvd(ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, LWORK, RWORK, LRWORK, IWORK, LIWORK, INFO)
CHEGVD