314 SUBROUTINE dlaebz( IJOB, NITMAX, N, MMAX, MINP, NBMIN, ABSTOL,
315 $ RELTOL, PIVMIN, D, E, E2, NVAL, AB, C, MOUT,
316 $ NAB, WORK, IWORK, INFO )
323 INTEGER IJOB, INFO, MINP, MMAX, MOUT, N, NBMIN, NITMAX
324 DOUBLE PRECISION ABSTOL, PIVMIN, RELTOL
327 INTEGER IWORK( * ), NAB( MMAX, * ), NVAL( * )
328 DOUBLE PRECISION AB( MMAX, * ), C( * ), D( * ), E( * ), E2( * ),
335 DOUBLE PRECISION ZERO, TWO, HALF
336 PARAMETER ( ZERO = 0.0d0, two = 2.0d0,
337 $ half = 1.0d0 / two )
340 INTEGER ITMP1, ITMP2, J, JI, JIT, JP, KF, KFNEW, KL,
342 DOUBLE PRECISION TMP1, TMP2
345 INTRINSIC abs, max, min
352 IF( ijob.LT.1 .OR. ijob.GT.3 )
THEN
366 tmp1 = d( 1 ) - ab( ji, jp )
367 IF( abs( tmp1 ).LT.pivmin )
374 tmp1 = d( j ) - e2( j-1 ) / tmp1 - ab( ji, jp )
375 IF( abs( tmp1 ).LT.pivmin )
378 $ nab( ji, jp ) = nab( ji, jp ) + 1
381 mout = mout + nab( ji, 2 ) - nab( ji, 1 )
400 c( ji ) = half*( ab( ji, 1 )+ab( ji, 2 ) )
406 DO 130 jit = 1, nitmax
410 IF( kl-kf+1.GE.nbmin .AND. nbmin.GT.0 )
THEN
418 work( ji ) = d( 1 ) - c( ji )
420 IF( work( ji ).LE.pivmin )
THEN
422 work( ji ) = min( work( ji ), -pivmin )
426 work( ji ) = d( j ) - e2( j-1 ) / work( ji ) - c( ji )
427 IF( work( ji ).LE.pivmin )
THEN
428 iwork( ji ) = iwork( ji ) + 1
429 work( ji ) = min( work( ji ), -pivmin )
443 iwork( ji ) = min( nab( ji, 2 ),
444 $ max( nab( ji, 1 ), iwork( ji ) ) )
449 IF( iwork( ji ).EQ.nab( ji, 2 ) )
THEN
454 ab( ji, 2 ) = c( ji )
456 ELSE IF( iwork( ji ).EQ.nab( ji, 1 ) )
THEN
461 ab( ji, 1 ) = c( ji )
464 IF( klnew.LE.mmax )
THEN
469 ab( klnew, 2 ) = ab( ji, 2 )
470 nab( klnew, 2 ) = nab( ji, 2 )
471 ab( klnew, 1 ) = c( ji )
472 nab( klnew, 1 ) = iwork( ji )
473 ab( ji, 2 ) = c( ji )
474 nab( ji, 2 ) = iwork( ji )
489 IF( iwork( ji ).LE.nval( ji ) )
THEN
490 ab( ji, 1 ) = c( ji )
491 nab( ji, 1 ) = iwork( ji )
493 IF( iwork( ji ).GE.nval( ji ) )
THEN
494 ab( ji, 2 ) = c( ji )
495 nab( ji, 2 ) = iwork( ji )
514 IF( tmp2.LE.pivmin )
THEN
516 tmp2 = min( tmp2, -pivmin )
520 tmp2 = d( j ) - e2( j-1 ) / tmp2 - tmp1
521 IF( tmp2.LE.pivmin )
THEN
523 tmp2 = min( tmp2, -pivmin )
533 itmp1 = min( nab( ji, 2 ),
534 $ max( nab( ji, 1 ), itmp1 ) )
539 IF( itmp1.EQ.nab( ji, 2 ) )
THEN
546 ELSE IF( itmp1.EQ.nab( ji, 1 ) )
THEN
552 ELSE IF( klnew.LT.mmax )
THEN
557 ab( klnew, 2 ) = ab( ji, 2 )
558 nab( klnew, 2 ) = nab( ji, 2 )
559 ab( klnew, 1 ) = tmp1
560 nab( klnew, 1 ) = itmp1
572 IF( itmp1.LE.nval( ji ) )
THEN
576 IF( itmp1.GE.nval( ji ) )
THEN
590 tmp1 = abs( ab( ji, 2 )-ab( ji, 1 ) )
591 tmp2 = max( abs( ab( ji, 2 ) ), abs( ab( ji, 1 ) ) )
592 IF( tmp1.LT.max( abstol, pivmin, reltol*tmp2 ) .OR.
593 $ nab( ji, 1 ).GE.nab( ji, 2 ) )
THEN
598 IF( ji.GT.kfnew )
THEN
603 ab( ji, 1 ) = ab( kfnew, 1 )
604 ab( ji, 2 ) = ab( kfnew, 2 )
605 nab( ji, 1 ) = nab( kfnew, 1 )
606 nab( ji, 2 ) = nab( kfnew, 2 )
607 ab( kfnew, 1 ) = tmp1
608 ab( kfnew, 2 ) = tmp2
609 nab( kfnew, 1 ) = itmp1
610 nab( kfnew, 2 ) = itmp2
613 nval( ji ) = nval( kfnew )
614 nval( kfnew ) = itmp1
625 c( ji ) = half*( ab( ji, 1 )+ab( ji, 2 ) )
637 info = max( kl+1-kf, 0 )
subroutine dlaebz(ijob, nitmax, n, mmax, minp, nbmin, abstol, reltol, pivmin, d, e, e2, nval, ab, c, mout, nab, work, iwork, info)
DLAEBZ computes the number of eigenvalues of a real symmetric tridiagonal matrix which are less than ...