179 SUBROUTINE chegv( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK,
180 $ LWORK, RWORK, INFO )
188 INTEGER INFO, ITYPE, LDA, LDB, LWORK, N
191 REAL RWORK( * ), W( * )
192 COMPLEX A( lda, * ), B( ldb, * ), WORK( * )
199 parameter( one = ( 1.0e+0, 0.0e+0 ) )
202 LOGICAL LQUERY, UPPER, WANTZ
204 INTEGER LWKOPT, NB, NEIG
209 EXTERNAL ilaenv, lsame
221 wantz = lsame( jobz,
'V' )
222 upper = lsame( uplo,
'U' )
223 lquery = ( lwork.EQ. -1 )
226 IF( itype.LT.1 .OR. itype.GT.3 )
THEN 228 ELSE IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN 230 ELSE IF( .NOT.( upper .OR. lsame( uplo,
'L' ) ) )
THEN 232 ELSE IF( n.LT.0 )
THEN 234 ELSE IF( lda.LT.max( 1, n ) )
THEN 236 ELSE IF( ldb.LT.max( 1, n ) )
THEN 241 nb = ilaenv( 1,
'CHETRD', uplo, n, -1, -1, -1 )
242 lwkopt = max( 1, ( nb + 1 )*n )
245 IF( lwork.LT.max( 1, 2*n-1 ) .AND. .NOT.lquery )
THEN 251 CALL xerbla(
'CHEGV ', -info )
253 ELSE IF( lquery )
THEN 264 CALL cpotrf( uplo, n, b, ldb, info )
272 CALL chegst( itype, uplo, n, a, lda, b, ldb, info )
273 CALL cheev( jobz, uplo, n, a, lda, w, work, lwork, rwork, info )
282 IF( itype.EQ.1 .OR. itype.EQ.2 )
THEN 293 CALL ctrsm(
'Left', uplo, trans,
'Non-unit', n, neig, one,
296 ELSE IF( itype.EQ.3 )
THEN 307 CALL ctrmm(
'Left', uplo, trans,
'Non-unit', n, neig, one,
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 chegv(ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W, WORK, LWORK, RWORK, INFO)
CHEGV
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 cheev(JOBZ, UPLO, N, A, LDA, W, WORK, LWORK, RWORK, INFO)
CHEEV computes the eigenvalues and, optionally, the left and/or right eigenvectors for HE matrices ...