193 SUBROUTINE dlarrb( N, D, LLD, IFIRST, ILAST, RTOL1,
194 $ RTOL2, OFFSET, W, WGAP, WERR, WORK, IWORK,
195 $ PIVMIN, SPDIAM, TWIST, INFO )
202 INTEGER IFIRST, ILAST, INFO, N, OFFSET, TWIST
203 DOUBLE PRECISION PIVMIN, RTOL1, RTOL2, SPDIAM
207 DOUBLE PRECISION D( * ), LLD( * ), W( * ),
208 $ werr( * ), wgap( * ), work( * )
214 DOUBLE PRECISION ZERO, TWO, HALF
215 PARAMETER ( ZERO = 0.0d0, two = 2.0d0,
220 INTEGER I, I1, II, IP, ITER, K, NEGCNT, NEXT, NINT,
222 DOUBLE PRECISION BACK, CVRGD, GAP, LEFT, LGAP, MID, MNWDTH,
223 $ RGAP, RIGHT, TMP, WIDTH
231 INTRINSIC abs, max, min
243 maxitr = int( ( log( spdiam+pivmin )-log( pivmin ) ) /
245 mnwdth = two * pivmin
248 IF((r.LT.1).OR.(r.GT.n)) r = n
263 rgap = wgap( i1-offset )
267 left = w( ii ) - werr( ii )
268 right = w( ii ) + werr( ii )
271 gap = min( lgap, rgap )
280 negcnt = dlaneg( n, d, lld, left, pivmin, r )
281 IF( negcnt.GT.i-1 )
THEN
293 negcnt = dlaneg( n, d, lld, right, pivmin, r )
294 IF( negcnt.LT.i )
THEN
299 width = half*abs( left - right )
300 tmp = max( abs( left ), abs( right ) )
301 cvrgd = max(rtol1*gap,rtol2*tmp)
302 IF( width.LE.cvrgd .OR. width.LE.mnwdth )
THEN
309 IF((i.EQ.i1).AND.(i.LT.ilast)) i1 = i + 1
310 IF((prev.GE.i1).AND.(i.LE.ilast)) iwork( 2*prev-1 ) = i + 1
332 DO 100 ip = 1, olnint
337 IF(ii.GT.1) lgap = wgap( ii-1 )
338 gap = min( lgap, rgap )
342 mid = half*( left + right )
346 tmp = max( abs( left ), abs( right ) )
347 cvrgd = max(rtol1*gap,rtol2*tmp)
348 IF( ( width.LE.cvrgd ) .OR. ( width.LE.mnwdth ).OR.
349 $ ( iter.EQ.maxitr ) )
THEN
358 IF(prev.GE.i1) iwork( 2*prev-1 ) = next
367 negcnt = dlaneg( n, d, lld, mid, pivmin, r )
368 IF( negcnt.LE.i-1 )
THEN
379 IF( ( nint.GT.0 ).AND.(iter.LE.maxitr) )
GO TO 80
383 DO 110 i = ifirst, ilast
387 IF( iwork( k-1 ).EQ.0 )
THEN
388 w( ii ) = half*( work( k-1 )+work( k ) )
389 werr( ii ) = work( k ) - w( ii )
393 DO 111 i = ifirst+1, ilast
396 wgap( ii-1 ) = max( zero,
397 $ w(ii) - werr(ii) - w( ii-1 ) - werr( ii-1 ))
subroutine dlarrb(n, d, lld, ifirst, ilast, rtol1, rtol2, offset, w, wgap, werr, work, iwork, pivmin, spdiam, twist, info)
DLARRB provides limited bisection to locate eigenvalues for more accuracy.