225 SUBROUTINE sstevx( JOBZ, RANGE, N, D, E, VL, VU, IL, IU, ABSTOL,
226 $ M, W, Z, LDZ, WORK, IWORK, IFAIL, INFO )
233 CHARACTER JOBZ, RANGE
234 INTEGER IL, INFO, IU, LDZ, M, N
238 INTEGER IFAIL( * ), IWORK( * )
239 REAL D( * ), E( * ), W( * ), WORK( * ), Z( LDZ, * )
246 parameter( zero = 0.0e0, one = 1.0e0 )
249 LOGICAL ALLEIG, INDEIG, TEST, VALEIG, WANTZ
251 INTEGER I, IMAX, INDIBL, INDISP, INDIWO, INDWRK,
252 $ iscale, itmp1, j, jj, nsplit
253 REAL BIGNUM, EPS, RMAX, RMIN, SAFMIN, SIGMA, SMLNUM,
254 $ tmp1, tnrm, vll, vuu
259 EXTERNAL lsame, slamch, slanst
266 INTRINSIC max, min, sqrt
272 wantz = lsame( jobz,
'V' )
273 alleig = lsame( range,
'A' )
274 valeig = lsame( range,
'V' )
275 indeig = lsame( range,
'I' )
278 IF( .NOT.( wantz .OR. lsame( jobz,
'N' ) ) )
THEN
280 ELSE IF( .NOT.( alleig .OR. valeig .OR. indeig ) )
THEN
282 ELSE IF( n.LT.0 )
THEN
286 IF( n.GT.0 .AND. vu.LE.vl )
288 ELSE IF( indeig )
THEN
289 IF( il.LT.1 .OR. il.GT.max( 1, n ) )
THEN
291 ELSE IF( iu.LT.min( n, il ) .OR. iu.GT.n )
THEN
297 IF( ldz.LT.1 .OR. ( wantz .AND. ldz.LT.n ) )
302 CALL xerbla(
'SSTEVX', -info )
313 IF( alleig .OR. indeig )
THEN
317 IF( vl.LT.d( 1 ) .AND. vu.GE.d( 1 ) )
THEN
329 safmin = slamch(
'Safe minimum' )
330 eps = slamch(
'Precision' )
331 smlnum = safmin / eps
332 bignum = one / smlnum
333 rmin = sqrt( smlnum )
334 rmax = min( sqrt( bignum ), one / sqrt( sqrt( safmin ) ) )
346 tnrm = slanst(
'M', n, d, e )
347 IF( tnrm.GT.zero .AND. tnrm.LT.rmin )
THEN
350 ELSE IF( tnrm.GT.rmax )
THEN
354 IF( iscale.EQ.1 )
THEN
355 CALL sscal( n, sigma, d, 1 )
356 CALL sscal( n-1, sigma, e( 1 ), 1 )
369 IF( il.EQ.1 .AND. iu.EQ.n )
THEN
373 IF( ( alleig .OR. test ) .AND. ( abstol.LE.zero ) )
THEN
374 CALL scopy( n, d, 1, w, 1 )
375 CALL scopy( n-1, e( 1 ), 1, work( 1 ), 1 )
377 IF( .NOT.wantz )
THEN
378 CALL ssterf( n, w, work, info )
380 CALL ssteqr(
'I', n, w, work, z, ldz, work( indwrk ), info )
405 CALL sstebz( range, order, n, vll, vuu, il, iu, abstol, d, e, m,
406 $ nsplit, w, iwork( indibl ), iwork( indisp ),
407 $ work( indwrk ), iwork( indiwo ), info )
410 CALL sstein( n, d, e, m, w, iwork( indibl ), iwork( indisp ),
411 $ z, ldz, work( indwrk ), iwork( indiwo ), ifail,
418 IF( iscale.EQ.1 )
THEN
424 CALL sscal( imax, one / sigma, w, 1 )
435 IF( w( jj ).LT.tmp1 )
THEN
442 itmp1 = iwork( indibl+i-1 )
444 iwork( indibl+i-1 ) = iwork( indibl+j-1 )
446 iwork( indibl+j-1 ) = itmp1
447 CALL sswap( n, z( 1, i ), 1, z( 1, j ), 1 )
450 ifail( i ) = ifail( j )
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine ssteqr(COMPZ, N, D, E, Z, LDZ, WORK, INFO)
SSTEQR
subroutine ssterf(N, D, E, INFO)
SSTERF
subroutine sstebz(RANGE, ORDER, N, VL, VU, IL, IU, ABSTOL, D, E, M, NSPLIT, W, IBLOCK, ISPLIT, WORK, IWORK, INFO)
SSTEBZ
subroutine sstein(N, D, E, M, W, IBLOCK, ISPLIT, Z, LDZ, WORK, IWORK, IFAIL, INFO)
SSTEIN
subroutine sstevx(JOBZ, RANGE, N, D, E, VL, VU, IL, IU, ABSTOL, M, W, Z, LDZ, WORK, IWORK, IFAIL, INFO)
SSTEVX computes the eigenvalues and, optionally, the left and/or right eigenvectors for OTHER matrice...
subroutine sswap(N, SX, INCX, SY, INCY)
SSWAP
subroutine scopy(N, SX, INCX, SY, INCY)
SCOPY
subroutine sscal(N, SA, SX, INCX)
SSCAL