177 SUBROUTINE chegv( ITYPE, JOBZ, UPLO, N, A, LDA, B, LDB, W,
179 $ LWORK, RWORK, INFO )
187 INTEGER INFO, ITYPE, LDA, LDB, LWORK, N
190 REAL RWORK( * ), W( * )
191 COMPLEX A( LDA, * ), B( LDB, * ), WORK( * )
198 PARAMETER ( ONE = ( 1.0e+0, 0.0e+0 ) )
201 LOGICAL LQUERY, UPPER, WANTZ
203 INTEGER LWKOPT, NB, NEIG
209 EXTERNAL ilaenv, lsame, sroundup_lwork
222 wantz = lsame( jobz,
'V' )
223 upper = lsame( uplo,
'U' )
224 lquery = ( lwork.EQ. -1 )
227 IF( itype.LT.1 .OR. itype.GT.3 )
THEN
229 ELSE IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN
231 ELSE IF( .NOT.( upper .OR. lsame( uplo,
'L' ) ) )
THEN
233 ELSE IF( n.LT.0 )
THEN
235 ELSE IF( lda.LT.max( 1, n ) )
THEN
237 ELSE IF( ldb.LT.max( 1, n ) )
THEN
242 nb = ilaenv( 1,
'CHETRD', uplo, n, -1, -1, -1 )
243 lwkopt = max( 1, ( nb + 1 )*n )
244 work( 1 ) = sroundup_lwork(lwkopt)
246 IF( lwork.LT.max( 1, 2*n-1 ) .AND. .NOT.lquery )
THEN
252 CALL xerbla(
'CHEGV ', -info )
254 ELSE IF( lquery )
THEN
265 CALL cpotrf( uplo, n, b, ldb, info )
273 CALL chegst( itype, uplo, n, a, lda, b, ldb, info )
274 CALL cheev( jobz, uplo, n, a, lda, w, work, lwork, rwork,
284 IF( itype.EQ.1 .OR. itype.EQ.2 )
THEN
295 CALL ctrsm(
'Left', uplo, trans,
'Non-unit', n, neig,
299 ELSE IF( itype.EQ.3 )
THEN
310 CALL ctrmm(
'Left', uplo, trans,
'Non-unit', n, neig,
316 work( 1 ) = sroundup_lwork(lwkopt)
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
subroutine chegst(itype, uplo, n, a, lda, b, ldb, info)
CHEGST
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 ctrsm(side, uplo, transa, diag, m, n, alpha, a, lda, b, ldb)
CTRSM