304 $ IL, IU, ABSTOL, M, W, Z, LDZ, WORK,
305 $ LWORK, RWORK, IWORK, IFAIL, INFO )
314 CHARACTER JOBZ, RANGE, UPLO
315 INTEGER IL, INFO, IU, LDA, LDZ, LWORK, M, N
319 INTEGER IFAIL( * ), IWORK( * )
320 REAL RWORK( * ), W( * )
321 COMPLEX A( LDA, * ), WORK( * ), Z( LDZ, * )
328 PARAMETER ( ZERO = 0.0e+0, one = 1.0e+0 )
330 parameter( cone = ( 1.0e+0, 0.0e+0 ) )
333 LOGICAL ALLEIG, INDEIG, LOWER, LQUERY, TEST, VALEIG,
336 INTEGER I, IINFO, , INDD, INDE, INDEE, INDIBL,
337 $ indisp, indiwk, indrwk, indtau, indwrk, iscale,
338 $ itmp1, j, jj, llwork,
339 $ nsplit, lwmin, lhtrd, lwtrd, kd, ib, indhous
340 REAL ABSTLL, ANRM, BIGNUM, EPS, RMAX, RMIN, SAFMIN,
341 $ SIGMA, SMLNUM, TMP1, VLL, VUU
347 EXTERNAL lsame, slamch, clanhe, ilaenv2stage
355 INTRINSIC real,
max,
min, sqrt
361 lower = lsame( uplo,
'L' )
362 wantz = lsame( jobz,
'V' )
363 alleig = lsame( range,
'A' )
364 valeig = lsame( range,
'V' )
365 indeig = lsame( range, 'i
' )
366.EQ.
LQUERY = ( LWORK-1 )
369.NOT.
IF( ( LSAME( JOBZ, 'n
' ) ) ) THEN
371.NOT..OR..OR.
ELSE IF( ( ALLEIG VALEIG INDEIG ) ) THEN
373.NOT..OR.
ELSE IF( ( LOWER LSAME( UPLO, 'u
' ) ) ) THEN
375.LT.
ELSE IF( N0 ) THEN
377.LT.
ELSE IF( LDAMAX( 1, N ) ) THEN
381.GT..AND..LE.
IF( N0 VUVL )
383 ELSE IF( INDEIG ) THEN
384.LT..OR..GT.
IF( IL1 ILMAX( 1, N ) ) THEN
386.LT..OR..GT.
ELSE IF( IUMIN( N, IL ) IUN ) THEN
392.LT..OR..AND..LT.
IF( LDZ1 ( WANTZ LDZN ) ) THEN
410 LWMIN = N + LHTRD + LWTRD
414.LT..AND..NOT.
IF( LWORKLWMIN LQUERY )
421 ELSE IF( LQUERY ) THEN
433.OR.
IF( ALLEIG INDEIG ) THEN
435 W( 1 ) = REAL( A( 1, 1 ) )
436 ELSE IF( VALEIG ) THEN
437.LT..AND..GE.
IF( VLREAL( A( 1, 1 ) ) VUREAL( A( 1, 1 ) ) )
440 W( 1 ) = REAL( A( 1, 1 ) )
450 SAFMIN = SLAMCH( 'safe minimum
' )
451 EPS = SLAMCH( 'precision
' )
452 SMLNUM = SAFMIN / EPS
453 BIGNUM = ONE / SMLNUM
454 RMIN = SQRT( SMLNUM )
455 RMAX = MIN( SQRT( BIGNUM ), ONE / SQRT( SQRT( SAFMIN ) ) )
465 ANRM = CLANHE( 'm
', UPLO, N, A, LDA, RWORK )
466.GT..AND..LT.
IF( ANRMZERO ANRMRMIN ) THEN
469.GT.
ELSE IF( ANRMRMAX ) THEN
473.EQ.
IF( ISCALE1 ) THEN
476 CALL CSSCAL( N-J+1, SIGMA, A( J, J ), 1 )
480 CALL CSSCAL( J, SIGMA, A( 1, J ), 1 )
484 $ ABSTLL = ABSTOL*SIGMA
498 INDWRK = INDHOUS + LHTRD
499 LLWORK = LWORK - INDWRK + 1
501 CALL CHETRD_2STAGE( JOBZ, UPLO, N, A, LDA, RWORK( INDD ),
502 $ RWORK( INDE ), WORK( INDTAU ),
503 $ WORK( INDHOUS ), LHTRD, WORK( INDWRK ),
512.EQ..AND..EQ.
IF( IL1 IUN ) THEN
516.OR..AND..LE.
IF( ( ALLEIG TEST ) ( ABSTOLZERO ) ) THEN
517 CALL SCOPY( N, RWORK( INDD ), 1, W, 1 )
519.NOT.
IF( WANTZ ) THEN
520 CALL SCOPY( N-1, RWORK( INDE ), 1, RWORK( INDEE ), 1 )
521 CALL SSTERF( N, W, RWORK( INDEE ), INFO )
523 CALL CLACPY( 'a
', N, N, A, LDA, Z, LDZ )
524 CALL CUNGTR( UPLO, N, Z, LDZ, WORK( INDTAU ),
525 $ WORK( INDWRK ), LLWORK, IINFO )
526 CALL SCOPY( N-1, RWORK( INDE ), 1, RWORK( INDEE ), 1 )
527 CALL CSTEQR( JOBZ, N, W, RWORK( INDEE ), Z, LDZ,
528 $ RWORK( INDRWK ), INFO )
552 CALL SSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL,
553 $ RWORK( INDD ), RWORK( INDE ), M, NSPLIT, W,
554 $ IWORK( INDIBL ), IWORK( INDISP ), RWORK( INDRWK ),
555 $ IWORK( INDIWK ), INFO )
558 CALL CSTEIN( N, RWORK( INDD ), RWORK( INDE ), M, W,
559 $ IWORK( INDIBL ), IWORK( INDISP ), Z, LDZ,
560 $ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, INFO )
565 CALL CUNMTR( 'l
', UPLO, 'n
', N, M, A, LDA, WORK( INDTAU ), Z,
566 $ LDZ, WORK( INDWRK ), LLWORK, IINFO )
572.EQ.
IF( ISCALE1 ) THEN
578 CALL SSCAL( IMAX, ONE / SIGMA, W, 1 )
589.LT.
IF( W( JJ )TMP1 ) THEN
596 ITMP1 = IWORK( INDIBL+I-1 )
598 IWORK( INDIBL+I-1 ) = IWORK( INDIBL+J-1 )
600 IWORK( INDIBL+J-1 ) = ITMP1
601 CALL CSWAP( N, Z( 1, I ), 1, Z( 1, J ), 1 )
604 IFAIL( I ) = IFAIL( J )
subroutine sstebz(range, order, n, vl, vu, il, iu, abstol, d, e, m, nsplit, w, iblock, isplit, work, iwork, info)
SSTEBZ
subroutine ssterf(n, d, e, info)
SSTERF
subroutine xerbla(srname, info)
XERBLA
subroutine chetrd_2stage(vect, uplo, n, a, lda, d, e, tau, hous2, lhous2, work, lwork, info)
CHETRD_2STAGE
subroutine cheevx_2stage(jobz, range, uplo, n, a, lda, vl, vu, il, iu, abstol, m, w, z, ldz, work, lwork, rwork, iwork, ifail, info)
CHEEVX_2STAGE computes the eigenvalues and, optionally, the left and/or right eigenvectors for HE mat...
subroutine clacpy(uplo, m, n, a, lda, b, ldb)
CLACPY copies all or part of one two-dimensional array to another.
subroutine cunmtr(side, uplo, trans, m, n, a, lda, tau, c, ldc, work, lwork, info)
CUNMTR
subroutine cstein(n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifail, info)
CSTEIN
subroutine cungtr(uplo, n, a, lda, tau, work, lwork, info)
CUNGTR
subroutine csteqr(compz, n, d, e, z, ldz, work, info)
CSTEQR
subroutine cswap(n, cx, incx, cy, incy)
CSWAP
subroutine csscal(n, sa, cx, incx)
CSSCAL
subroutine sscal(n, sa, sx, incx)
SSCAL
subroutine scopy(n, sx, incx, sy, incy)
SCOPY