318 SUBROUTINE slaebz( IJOB, NITMAX, N, MMAX, MINP, NBMIN, ABSTOL,
319 $ reltol, pivmin, d, e, e2, nval, ab, c, mout,
320 $ nab, work, iwork, info )
328 INTEGER IJOB, INFO, MINP, MMAX, MOUT, N, NBMIN, NITMAX
329 REAL ABSTOL, PIVMIN, RELTOL
332 INTEGER IWORK( * ), NAB( mmax, * ), NVAL( * )
333 REAL AB( mmax, * ), C( * ), D( * ), E( * ), E2( * ),
341 parameter ( zero = 0.0e0, two = 2.0e0,
342 $ half = 1.0e0 / two )
345 INTEGER ITMP1, ITMP2, J, JI, JIT, JP, KF, KFNEW, KL,
350 INTRINSIC abs, max, min
357 IF( ijob.LT.1 .OR. ijob.GT.3 )
THEN
371 tmp1 = d( 1 ) - ab( ji, jp )
372 IF( abs( tmp1 ).LT.pivmin )
379 tmp1 = d( j ) - e2( j-1 ) / tmp1 - ab( ji, jp )
380 IF( abs( tmp1 ).LT.pivmin )
383 $ nab( ji, jp ) = nab( ji, jp ) + 1
386 mout = mout + nab( ji, 2 ) - nab( ji, 1 )
405 c( ji ) = half*( ab( ji, 1 )+ab( ji, 2 ) )
411 DO 130 jit = 1, nitmax
415 IF( kl-kf+1.GE.nbmin .AND. nbmin.GT.0 )
THEN
423 work( ji ) = d( 1 ) - c( ji )
425 IF( work( ji ).LE.pivmin )
THEN
427 work( ji ) = min( work( ji ), -pivmin )
431 work( ji ) = d( j ) - e2( j-1 ) / work( ji ) - c( ji )
432 IF( work( ji ).LE.pivmin )
THEN
433 iwork( ji ) = iwork( ji ) + 1
434 work( ji ) = min( work( ji ), -pivmin )
448 iwork( ji ) = min( nab( ji, 2 ),
449 $ max( nab( ji, 1 ), iwork( ji ) ) )
454 IF( iwork( ji ).EQ.nab( ji, 2 ) )
THEN
459 ab( ji, 2 ) = c( ji )
461 ELSE IF( iwork( ji ).EQ.nab( ji, 1 ) )
THEN
466 ab( ji, 1 ) = c( ji )
469 IF( klnew.LE.mmax )
THEN
474 ab( klnew, 2 ) = ab( ji, 2 )
475 nab( klnew, 2 ) = nab( ji, 2 )
476 ab( klnew, 1 ) = c( ji )
477 nab( klnew, 1 ) = iwork( ji )
478 ab( ji, 2 ) = c( ji )
479 nab( ji, 2 ) = iwork( ji )
494 IF( iwork( ji ).LE.nval( ji ) )
THEN
495 ab( ji, 1 ) = c( ji )
496 nab( ji, 1 ) = iwork( ji )
498 IF( iwork( ji ).GE.nval( ji ) )
THEN
499 ab( ji, 2 ) = c( ji )
500 nab( ji, 2 ) = iwork( ji )
519 IF( tmp2.LE.pivmin )
THEN
521 tmp2 = min( tmp2, -pivmin )
525 tmp2 = d( j ) - e2( j-1 ) / tmp2 - tmp1
526 IF( tmp2.LE.pivmin )
THEN
528 tmp2 = min( tmp2, -pivmin )
538 itmp1 = min( nab( ji, 2 ),
539 $ max( nab( ji, 1 ), itmp1 ) )
544 IF( itmp1.EQ.nab( ji, 2 ) )
THEN
551 ELSE IF( itmp1.EQ.nab( ji, 1 ) )
THEN
557 ELSE IF( klnew.LT.mmax )
THEN
562 ab( klnew, 2 ) = ab( ji, 2 )
563 nab( klnew, 2 ) = nab( ji, 2 )
564 ab( klnew, 1 ) = tmp1
565 nab( klnew, 1 ) = itmp1
577 IF( itmp1.LE.nval( ji ) )
THEN
581 IF( itmp1.GE.nval( ji ) )
THEN
595 tmp1 = abs( ab( ji, 2 )-ab( ji, 1 ) )
596 tmp2 = max( abs( ab( ji, 2 ) ), abs( ab( ji, 1 ) ) )
597 IF( tmp1.LT.max( abstol, pivmin, reltol*tmp2 ) .OR.
598 $ nab( ji, 1 ).GE.nab( ji, 2 ) )
THEN
603 IF( ji.GT.kfnew )
THEN
608 ab( ji, 1 ) = ab( kfnew, 1 )
609 ab( ji, 2 ) = ab( kfnew, 2 )
610 nab( ji, 1 ) = nab( kfnew, 1 )
611 nab( ji, 2 ) = nab( kfnew, 2 )
612 ab( kfnew, 1 ) = tmp1
613 ab( kfnew, 2 ) = tmp2
614 nab( kfnew, 1 ) = itmp1
615 nab( kfnew, 2 ) = itmp2
618 nval( ji ) = nval( kfnew )
619 nval( kfnew ) = itmp1
630 c( ji ) = half*( ab( ji, 1 )+ab( ji, 2 ) )
642 info = max( kl+1-kf, 0 )
subroutine slaebz(IJOB, NITMAX, N, MMAX, MINP, NBMIN, ABSTOL, RELTOL, PIVMIN, D, E, E2, NVAL, AB, C, MOUT, NAB, WORK, IWORK, INFO)
SLAEBZ computes the number of eigenvalues of a real symmetric tridiagonal matrix which are less than ...