303 SUBROUTINE sstevr( JOBZ, RANGE, N, D, E, VL, VU, IL, IU, ABSTOL,
304 $ M, W, Z, LDZ, ISUPPZ, WORK, LWORK, IWORK,
312 CHARACTER JOBZ, RANGE
313 INTEGER IL, INFO, IU, LDZ, LIWORK, LWORK, M, N
317 INTEGER ISUPPZ( * ), IWORK( * )
318 REAL D( * ), E( * ), W( * ), WORK( * ), Z( LDZ, * )
325 PARAMETER ( ZERO = 0.0e+0, one = 1.0e+0, two = 2.0e+0 )
328 LOGICAL ALLEIG, INDEIG, TEST, LQUERY, VALEIG, WANTZ,
331 INTEGER I, IEEEOK, IMAX, INDIBL, INDIFL, INDISP,
332 $ indiwo, iscale, j, jj, liwmin, lwmin, nsplit
333 REAL BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA, SMLNUM,
334 $ TMP1, TNRM, VLL, VUU
340 EXTERNAL lsame, ilaenv,
slamch, slanst
354 ieeeok = ilaenv( 10,
'SSTEVR',
'N', 1, 2, 3, 4 )
356 wantz = lsame( jobz,
'V' )
357 alleig = lsame( range,
'A' )
358 valeig = lsame( range,
'V' )
359 indeig = lsame( range,
'I' )
361 lquery = ( ( lwork.EQ.-1 ) .OR. ( liwork.EQ.-1 ) )
362 lwmin =
max( 1, 20*n )
363 liwmin =
max(1, 10*n )
367 IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN
369 ELSE IF( .NOT.( alleig .OR. valeig .OR. indeig ) )
THEN
375 IF( n.GT.0 .AND. vu.LE.vl )
377 ELSE IF( indeig )
THEN
378 IF( il.LT.1 .OR. il.GT.
max( 1, n ) )
THEN
380 ELSE IF( iu.LT.
min( n, il ) .OR. iu.GT.n )
THEN
386 IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
THEN
395 IF( lwork.LT.lwmin .AND. .NOT.lquery )
THEN
397 ELSE IF( liwork.LT.liwmin .AND. .NOT.lquery )
THEN
405 ELSE IF( LQUERY ) THEN
416.OR.
IF( ALLEIG INDEIG ) THEN
420.LT..AND..GE.
IF( VLD( 1 ) VUD( 1 ) ) THEN
432 SAFMIN = SLAMCH( 'safe minimum
' )
433 EPS = SLAMCH( 'precision
' )
434 SMLNUM = SAFMIN / EPS
435 BIGNUM = ONE / SMLNUM
436 RMIN = SQRT( SMLNUM )
437 RMAX = MIN( SQRT( BIGNUM ), ONE / SQRT( SQRT( SAFMIN ) ) )
448 TNRM = SLANST( 'm
', N, D, E )
449.GT..AND..LT.
IF( TNRMZERO TNRMRMIN ) THEN
452.GT.
ELSE IF( TNRMRMAX ) THEN
456.EQ.
IF( ISCALE1 ) THEN
457 CALL SSCAL( N, SIGMA, D, 1 )
458 CALL SSCAL( N-1, SIGMA, E( 1 ), 1 )
489.EQ..AND..EQ.
IF( IL1 IUN ) THEN
493.OR..AND..EQ.
IF( ( ALLEIG TEST ) IEEEOK1 ) THEN
494 CALL SCOPY( N-1, E( 1 ), 1, WORK( 1 ), 1 )
495.NOT.
IF( WANTZ ) THEN
496 CALL SCOPY( N, D, 1, W, 1 )
497 CALL SSTERF( N, W, WORK, INFO )
499 CALL SCOPY( N, D, 1, WORK( N+1 ), 1 )
500.LE.
IF (ABSTOL TWO*N*EPS) THEN
505 CALL SSTEMR( JOBZ, 'a
', N, WORK( N+1 ), WORK, VL, VU, IL,
506 $ IU, M, W, Z, LDZ, N, ISUPPZ, TRYRAC,
507 $ WORK( 2*N+1 ), LWORK-2*N, IWORK, LIWORK, INFO )
525 CALL SSTEBZ( RANGE, ORDER, N, VLL, VUU, IL, IU, ABSTOL, D, E, M,
526 $ NSPLIT, W, IWORK( INDIBL ), IWORK( INDISP ), WORK,
527 $ IWORK( INDIWO ), INFO )
530 CALL SSTEIN( N, D, E, M, W, IWORK( INDIBL ), IWORK( INDISP ),
531 $ Z, LDZ, WORK, IWORK( INDIWO ), IWORK( INDIFL ),
538.EQ.
IF( ISCALE1 ) THEN
544 CALL SSCAL( IMAX, ONE / SIGMA, W, 1 )
555.LT.
IF( W( JJ )TMP1 ) THEN
564 CALL SSWAP( N, Z( 1, I ), 1, Z( 1, J ), 1 )
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 sstemr(jobz, range, n, d, e, vl, vu, il, iu, m, w, z, ldz, nzc, isuppz, tryrac, work, lwork, iwork, liwork, info)
SSTEMR
subroutine sstein(n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifail, info)
SSTEIN
subroutine sstevr(jobz, range, n, d, e, vl, vu, il, iu, abstol, m, w, z, ldz, isuppz, work, lwork, iwork, liwork, info)
SSTEVR computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrice...
subroutine sscal(n, sa, sx, incx)
SSCAL
subroutine scopy(n, sx, incx, sy, incy)
SCOPY
subroutine sswap(n, sx, incx, sy, incy)
SSWAP
real function slamch(cmach)
SLAMCH