304 SUBROUTINE chegvx( ITYPE, JOBZ, RANGE, UPLO, N, A, LDA, B, LDB,
305 $ VL, VU, IL, IU, ABSTOL, M, W, Z, LDZ, WORK,
306 $ LWORK, RWORK, IWORK, IFAIL, INFO )
313 CHARACTER JOBZ, RANGE, UPLO
314 INTEGER IL, INFO, ITYPE, IU, LDA, LDB, LDZ, LWORK, M, N
318 INTEGER IFAIL( * ), IWORK( * )
319 REAL RWORK( * ), W( * )
320 COMPLEX A( LDA, * ), B( LDB, * ), WORK( * ),
328 PARAMETER ( CONE = ( 1.0e+0, 0.0e+0 ) )
331 LOGICAL ALLEIG, INDEIG, LQUERY, UPPER, VALEIG, WANTZ
338 EXTERNAL ilaenv, lsame
350 wantz = lsame( jobz,
'V' )
351 upper = lsame( uplo,
'U' )
352 alleig = lsame( range,
'A' )
353 valeig = lsame( range,
'V' )
354 indeig = lsame( range,
'I' )
355 lquery = ( lwork.EQ.-1 )
358 IF( itype.LT.1 .OR. itype.GT.3 )
THEN
360 ELSE IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN
362 ELSE IF( .NOT.( alleig .OR. valeig .OR. indeig ) )
THEN
364 ELSE IF( .NOT.( upper .OR. lsame( uplo,
'L' ) ) )
THEN
366 ELSE IF( n.LT.0 )
THEN
368 ELSE IF( lda.LT.
max( 1, n ) )
THEN
370 ELSE IF( ldb.LT.
max( 1, n ) )
THEN
374 IF( n.GT.0 .AND. vu.LE.vl )
376 ELSE IF( indeig )
THEN
377 IF( il.LT.1 .OR. il.GT.
max( 1, n ) )
THEN
379 ELSE IF( iu.LT.
min( n, il ) .OR. iu.GT.n )
THEN
385 IF (ldz.LT.1 .OR. (wantz .AND. ldz.LT.n))
THEN
391 nb = ilaenv( 1,
'CHETRD', uplo, n, -1, -1, -1 )
392 lwkopt =
max( 1, ( nb + 1 )*n )
395 IF( lwork.LT.
max( 1, 2*n ) .AND. .NOT.lquery )
THEN
401 CALL xerbla(
'CHEGVX', -info )
403 ELSE IF( lquery )
THEN
416 CALL cpotrf( uplo, n, b, ldb, info )
424 CALL chegst( itype, uplo, n, a, lda, b, ldb, info )
425 CALL cheevx( jobz, range, uplo, n, a, lda, vl, vu, il, iu, abstol,
426 $ m, w, z, ldz, work, lwork, rwork, iwork, ifail,
435 IF( itype.EQ.1 .OR. itype.EQ.2 )
THEN
446 CALL ctrsm(
'Left', uplo, trans,
'Non-unit', n, m, cone, b,
449 ELSE IF( itype.EQ.3 )
THEN
460 CALL ctrmm(
'Left', uplo, trans,
'Non-unit', n, m, cone, b,
subroutine cheevx(jobz, range, uplo, n, a, lda, vl, vu, il, iu, abstol, m, w, z, ldz, work, lwork, rwork, iwork, ifail, info)
CHEEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for HE matrices
subroutine chegvx(itype, jobz, range, uplo, n, a, lda, b, ldb, vl, vu, il, iu, abstol, m, w, z, ldz, work, lwork, rwork, iwork, ifail, info)
CHEGVX
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