230 $ WORK, LWORK, RWORK, INFO )
240 INTEGER INFO, ITYPE, LDA, LDB, LWORK, N
243 REAL RWORK( * ), W( * )
244 COMPLEX A( LDA, * ), B( LDB, * ), WORK( * )
251 PARAMETER ( ONE = ( 1.0e+0, 0.0e+0 ) )
254 LOGICAL LQUERY, UPPER, WANTZ
256 INTEGER NEIG, LWMIN, LHTRD, LWTRD, KD, IB
262 EXTERNAL lsame, ilaenv2stage, sroundup_lwork
276 wantz = lsame( jobz,
'V' )
277 upper = lsame( uplo,
'U' )
278 lquery = ( lwork.EQ.-1 )
281 IF( itype.LT.1 .OR. itype.GT.3 )
THEN
283 ELSE IF( .NOT.( lsame( jobz,
'N' ) ) )
THEN
285 ELSE IF( .NOT.( upper .OR. lsame( uplo,
'L' ) ) )
THEN
287 ELSE IF( n.LT.0 )
THEN
289 ELSE IF( lda.LT.max( 1, n ) )
THEN
291 ELSE IF( ldb.LT.max( 1, n ) )
THEN
296 kd = ilaenv2stage( 1,
'CHETRD_2STAGE', jobz, n, -1, -1,
298 ib = ilaenv2stage( 2,
'CHETRD_2STAGE', jobz, n, kd, -1,
300 lhtrd = ilaenv2stage( 3,
'CHETRD_2STAGE', jobz, n, kd, ib,
302 lwtrd = ilaenv2stage( 4,
'CHETRD_2STAGE', jobz, n, kd, ib,
304 lwmin = n + lhtrd + lwtrd
305 work( 1 ) = sroundup_lwork(lwmin)
307 IF( lwork.LT.lwmin .AND. .NOT.lquery )
THEN
313 CALL xerbla(
'CHEGV_2STAGE ', -info )
315 ELSE IF( lquery )
THEN
326 CALL cpotrf( uplo, n, b, ldb, info )
334 CALL chegst( itype, uplo, n, a, lda, b, ldb, info )
336 $ work, lwork, rwork, info )
345 IF( itype.EQ.1 .OR. itype.EQ.2 )
THEN
356 CALL ctrsm(
'Left', uplo, trans,
'Non-unit', n, neig,
360 ELSE IF( itype.EQ.3 )
THEN
371 CALL ctrmm(
'Left', uplo, trans,
'Non-unit', n, neig,
377 work( 1 ) = sroundup_lwork(lwmin)
subroutine cheev_2stage(jobz, uplo, n, a, lda, w, work, lwork, rwork, info)
CHEEV_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for HE matr...
subroutine chegst(itype, uplo, n, a, lda, b, ldb, info)
CHEGST
subroutine chegv_2stage(itype, jobz, uplo, n, a, lda, b, ldb, w, work, lwork, rwork, info)
CHEGV_2STAGE
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