264 SUBROUTINE chbevx( JOBZ, RANGE, UPLO, N, KD, AB, LDAB, Q, LDQ, VL,
265 $ VU, IL, IU, ABSTOL, M, W, Z, LDZ, WORK, RWORK,
266 $ IWORK, IFAIL, INFO )
273 CHARACTER JOBZ, RANGE, UPLO
274 INTEGER IL, INFO, IU, KD, LDAB, LDQ, LDZ, M, N
278 INTEGER IFAIL( * ), IWORK( * )
279 REAL RWORK( * ), W( * )
280 COMPLEX AB( LDAB, * ), Q( LDQ, * ), WORK( * ),
288 PARAMETER ( ZERO = 0.0e0, one = 1.0e0 )
290 parameter( czero = ( 0.0e0, 0.0e0 ),
291 $ cone = ( 1.0e0, 0.0e0 ) )
294 LOGICAL ALLEIG, INDEIG, LOWER, TEST, VALEIG, WANTZ
296 INTEGER I, IINFO, IMAX, INDD, INDE, INDEE, INDIBL,
297 $ indisp, indiwk, indrwk, indwrk, iscale, itmp1,
299 REAL , ANRM, BIGNUM, EPS, RMAX, RMIN, SAFMIN,
300 $ SIGMA, SMLNUM, TMP1, VLL, VUU
306 EXTERNAL lsame, clanhb, slamch
314 INTRINSIC max,
min, real, sqrt
320 wantz = lsame( jobz,
'V' )
321 alleig = lsame( range,
'A' )
322 valeig = lsame( range,
'V' )
323 indeig = lsame( range,
'I' )
324 lower = lsame( uplo,
'L' )
327 IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN
329 ELSE IF( .NOT.( alleig .OR. valeig .OR. indeig ) )
THEN
331 ELSE IF( .NOT.( lower .OR. lsame( uplo,
'U' ) ) )
THEN
333 ELSE IF( n.LT.0 )
THEN
335 ELSE IF( kd.LT.0 )
THEN
337 ELSE IF( ldab.LT.kd+1 )
THEN
339 ELSE IF( wantz .AND. ldq.LT.
max( 1, n ) )
THEN
343 IF( n.GT.0 .AND. vu.LE.vl )
345 ELSE IF( indeig )
THEN
346 IF( il.LT.1 .OR. il.GT.
max( 1, n ) )
THEN
348 ELSE IF( iu.LT.
min( n, il ) .OR. iu.GT.n )
THEN
354 IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
374 CTMP1 = AB( KD+1, 1 )
378.NOT..LT..AND..GE.
IF( ( VLTMP1 VUTMP1 ) )
382 W( 1 ) = REAL( CTMP1 )
391 SAFMIN = SLAMCH( 'safe minimum
' )
392 EPS = SLAMCH( 'precision
' )
393 SMLNUM = SAFMIN / EPS
394 BIGNUM = ONE / SMLNUM
395 RMIN = SQRT( SMLNUM )
396 RMAX = MIN( SQRT( BIGNUM ), ONE / SQRT( SQRT( SAFMIN ) ) )
409 ANRM = CLANHB( 'm
', UPLO, N, KD, AB, LDAB, RWORK )
410.GT..AND..LT.
IF( ANRMZERO ANRMRMIN ) THEN
413.GT.
ELSE IF( ANRMRMAX ) THEN
417.EQ.
IF( ISCALE1 ) THEN
419 CALL CLASCL( 'b
', KD, KD, ONE, SIGMA, N, N, AB, LDAB, INFO )
421 CALL CLASCL( 'q
', KD, KD, ONE, SIGMA, N, N, AB, LDAB, INFO )
424 $ ABSTLL = ABSTOL*SIGMA
437 CALL CHBTRD( JOBZ, UPLO, N, KD, AB, LDAB, RWORK( INDD ),
438 $ RWORK( INDE ), Q, LDQ, WORK( INDWRK ), IINFO )
446.EQ..AND..EQ.
IF (IL1 IUN) THEN
450.OR..AND..LE.
IF ((ALLEIG TEST) (ABSTOLZERO)) THEN
451 CALL SCOPY( N, RWORK( INDD ), 1, W, 1 )
453.NOT.
IF( WANTZ ) THEN
454 CALL SCOPY( N-1, RWORK( INDE ), 1, RWORK( INDEE ), 1 )
455 CALL SSTERF( N, W, RWORK( INDEE ), INFO )
457 CALL CLACPY( 'a
', N, N, Q, LDQ, Z, LDZ )
458 CALL SCOPY( N-1, RWORK( INDE ), 1, RWORK( INDEE ), 1 )
459 CALL CSTEQR( JOBZ, N, W, RWORK( INDEE ), Z, LDZ,
460 $ RWORK( INDRWK ), INFO )
484 CALL SSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTLL,
485 $ RWORK( INDD ), RWORK( INDE ), M, NSPLIT, W,
486 $ IWORK( INDIBL ), IWORK( INDISP ), RWORK( INDRWK ),
487 $ IWORK( INDIWK ), INFO )
490 CALL CSTEIN( N, RWORK( INDD ), RWORK( INDE ), M, W,
491 $ IWORK( INDIBL ), IWORK( INDISP ), Z, LDZ,
492 $ RWORK( INDRWK ), IWORK( INDIWK ), IFAIL, INFO )
498 CALL CCOPY( N, Z( 1, J ), 1, WORK( 1 ), 1 )
499 CALL CGEMV( 'n
', N, N, CONE, Q, LDQ, WORK, 1, CZERO,
507.EQ.
IF( ISCALE1 ) THEN
513 CALL SSCAL( IMAX, ONE / SIGMA, W, 1 )
524.LT.
IF( W( JJ )TMP1 ) THEN
531 ITMP1 = IWORK( INDIBL+I-1 )
533 IWORK( INDIBL+I-1 ) = IWORK( INDIBL+J-1 )
535 IWORK( INDIBL+J-1 ) = ITMP1
536 CALL CSWAP( N, Z( 1, I ), 1, Z( 1, J ), 1 )
539 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 clascl(type, kl, ku, cfrom, cto, m, n, a, lda, info)
CLASCL multiplies a general rectangular matrix by a real scalar defined as cto/cfrom.
subroutine clacpy(uplo, m, n, a, lda, b, ldb)
CLACPY copies all or part of one two-dimensional array to another.
subroutine cstein(n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifail, info)
CSTEIN
subroutine chbtrd(vect, uplo, n, kd, ab, ldab, d, e, q, ldq, work, info)
CHBTRD
subroutine csteqr(compz, n, d, e, z, ldz, work, info)
CSTEQR
subroutine chbevx(jobz, range, uplo, n, kd, ab, ldab, q, ldq, vl, vu, il, iu, abstol, m, w, z, ldz, work, rwork, iwork, ifail, info)
CHBEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrice...
subroutine cswap(n, cx, incx, cy, incy)
CSWAP
subroutine ccopy(n, cx, incx, cy, incy)
CCOPY
subroutine cgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy)
CGEMV
subroutine sscal(n, sa, sx, incx)
SSCAL
subroutine scopy(n, sx, incx, sy, incy)
SCOPY