316 SUBROUTINE slaebz( IJOB, NITMAX, N, MMAX, MINP, NBMIN, ABSTOL,
317 $ RELTOL, PIVMIN, D, E, E2, NVAL, AB, C, MOUT,
318 $ NAB, WORK, IWORK, INFO )
325 INTEGER IJOB, INFO, MINP, MMAX, MOUT, N, NBMIN, NITMAX
326 REAL ABSTOL, PIVMIN, RELTOL
329 INTEGER IWORK( * ), NAB( MMAX, * ), NVAL( * )
330 REAL AB( MMAX, * ), C( * ), D( * ), E( * ), E2( * ),
338 PARAMETER ( ZERO = 0.0e0, two = 2.0e0,
339 $ half = 1.0e0 / two )
342 INTEGER ITMP1, ITMP2, J, JI, JIT, JP, KF, KFNEW, KL,
347 INTRINSIC abs, max, min
354 IF( ijob.LT.1 .OR. ijob.GT.3 )
THEN
368 tmp1 = d( 1 ) - ab( ji, jp )
369 IF( abs( tmp1 ).LT.pivmin )
376 tmp1 = d( j ) - e2( j-1 ) / tmp1 - ab( ji, jp )
377 IF( abs( tmp1 ).LT.pivmin )
380 $ nab( ji, jp ) = nab( ji, jp ) + 1
383 mout = mout + nab( ji, 2 ) - nab( ji, 1 )
402 c( ji ) = half*( ab( ji, 1 )+ab( ji, 2 ) )
408 DO 130 jit = 1, nitmax
412 IF( kl-kf+1.GE.nbmin .AND. nbmin.GT.0 )
THEN
420 work( ji ) = d( 1 ) - c( ji )
422 IF( work( ji ).LE.pivmin )
THEN
424 work( ji ) = min( work( ji ), -pivmin )
428 work( ji ) = d( j ) - e2( j-1 ) / work( ji ) - c( ji )
429 IF( work( ji ).LE.pivmin )
THEN
430 iwork( ji ) = iwork( ji ) + 1
431 work( ji ) = min( work( ji ), -pivmin )
445 iwork( ji ) = min( nab( ji, 2 ),
446 $ max( nab( ji, 1 ), iwork( ji ) ) )
451 IF( iwork( ji ).EQ.nab( ji, 2 ) )
THEN
456 ab( ji, 2 ) = c( ji )
458 ELSE IF( iwork( ji ).EQ.nab( ji, 1 ) )
THEN
463 ab( ji, 1 ) = c( ji )
466 IF( klnew.LE.mmax )
THEN
471 ab( klnew, 2 ) = ab( ji, 2 )
472 nab( klnew, 2 ) = nab( ji, 2 )
473 ab( klnew, 1 ) = c( ji )
474 nab( klnew, 1 ) = iwork( ji )
475 ab( ji, 2 ) = c( ji )
476 nab( ji, 2 ) = iwork( ji )
491 IF( iwork( ji ).LE.nval( ji ) )
THEN
492 ab( ji, 1 ) = c( ji )
493 nab( ji, 1 ) = iwork( ji )
495 IF( iwork( ji ).GE.nval( ji ) )
THEN
496 ab( ji, 2 ) = c( ji )
497 nab( ji, 2 ) = iwork( ji )
516 IF( tmp2.LE.pivmin )
THEN
518 tmp2 = min( tmp2, -pivmin )
522 tmp2 = d( j ) - e2( j-1 ) / tmp2 - tmp1
523 IF( tmp2.LE.pivmin )
THEN
525 tmp2 = min( tmp2, -pivmin )
535 itmp1 = min( nab( ji, 2 ),
536 $ max( nab( ji, 1 ), itmp1 ) )
541 IF( itmp1.EQ.nab( ji, 2 ) )
THEN
548 ELSE IF( itmp1.EQ.nab( ji, 1 ) )
THEN
554 ELSE IF( klnew.LT.mmax )
THEN
559 ab( klnew, 2 ) = ab( ji, 2 )
560 nab( klnew, 2 ) = nab( ji, 2 )
561 ab( klnew, 1 ) = tmp1
562 nab( klnew, 1 ) = itmp1
574 IF( itmp1.LE.nval( ji ) )
THEN
578 IF( itmp1.GE.nval( ji ) )
THEN
592 tmp1 = abs( ab( ji, 2 )-ab( ji, 1 ) )
593 tmp2 = max( abs( ab( ji, 2 ) ), abs( ab( ji, 1 ) ) )
594 IF( tmp1.LT.max( abstol, pivmin, reltol*tmp2 ) .OR.
595 $ nab( ji, 1 ).GE.nab( ji, 2 ) )
THEN
600 IF( ji.GT.kfnew )
THEN
605 ab( ji, 1 ) = ab( kfnew, 1 )
606 ab( ji, 2 ) = ab( kfnew, 2 )
607 nab( ji, 1 ) = nab( kfnew, 1 )
608 nab( ji, 2 ) = nab( kfnew, 2 )
609 ab( kfnew, 1 ) = tmp1
610 ab( kfnew, 2 ) = tmp2
611 nab( kfnew, 1 ) = itmp1
612 nab( kfnew, 2 ) = itmp2
615 nval( ji ) = nval( kfnew )
616 nval( kfnew ) = itmp1
627 c( ji ) = half*( ab( ji, 1 )+ab( ji, 2 ) )
639 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 ...