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 xerbla(SRNAME, INFO)
XERBLA
subroutine ctrmm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
CTRMM
subroutine ctrsm(SIDE, UPLO, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)
CTRSM
subroutine chegst(ITYPE, UPLO, N, A, LDA, B, LDB, INFO)
CHEGST
subroutine chegvd(ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, LWORK, RWORK, LRWORK, IWORK, LIWORK, INFO)
CHEGVD
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 cpotrf(UPLO, N, A, LDA, INFO)
CPOTRF