165 SUBROUTINE dlarrj( N, D, E2, IFIRST, ILAST,
166 $ RTOL, OFFSET, W, WERR, WORK, IWORK,
167 $ PIVMIN, SPDIAM, INFO )
174 INTEGER IFIRST, ILAST, INFO, N, OFFSET
175 DOUBLE PRECISION PIVMIN, RTOL, SPDIAM
179 DOUBLE PRECISION D( * ), E2( * ), W( * ),
180 $ werr( * ), work( * )
186 DOUBLE PRECISION ZERO, ONE, TWO, HALF
187 PARAMETER ( ZERO = 0.0d0, one = 1.0d0, two = 2.0d0,
192 INTEGER CNT, I, I1, I2, II, ITER, J, K, NEXT, NINT,
193 $ OLNINT, P, PREV, SAVI1
194 DOUBLE PRECISION DPLUS, FAC, LEFT, MID, RIGHT, S, TMP, WIDTH
210 maxitr = int( ( log( spdiam+pivmin )-log( pivmin ) ) /
230 left = w( ii ) - werr( ii )
232 right = w( ii ) + werr( ii )
234 tmp = max( abs( left ), abs( right ) )
237 IF( width.LT.rtol*tmp )
THEN
244 IF((i.EQ.i1).AND.(i.LT.i2)) i1 = i + 1
245 IF((prev.GE.i1).AND.(i.LE.i2)) iwork( 2*prev-1 ) = i + 1
258 IF( dplus.LT.zero ) cnt = cnt + 1
260 dplus = d( j ) - s - e2( j-1 )/dplus
261 IF( dplus.LT.zero ) cnt = cnt + 1
263 IF( cnt.GT.i-1 )
THEN
264 left = left - werr( ii )*fac
276 IF( dplus.LT.zero ) cnt = cnt + 1
278 dplus = d( j ) - s - e2( j-1 )/dplus
279 IF( dplus.LT.zero ) cnt = cnt + 1
282 right = right + werr( ii )*fac
312 mid = half*( left + right )
316 tmp = max( abs( left ), abs( right ) )
318 IF( ( width.LT.rtol*tmp ) .OR.
319 $ (iter.EQ.maxitr) )
THEN
328 IF(prev.GE.i1) iwork( 2*prev-1 ) = next
340 IF( dplus.LT.zero ) cnt = cnt + 1
342 dplus = d( j ) - s - e2( j-1 )/dplus
343 IF( dplus.LT.zero ) cnt = cnt + 1
345 IF( cnt.LE.i-1 )
THEN
357 IF( ( nint.GT.0 ).AND.(iter.LE.maxitr) )
GO TO 80
361 DO 110 i = savi1, ilast
365 IF( iwork( k-1 ).EQ.0 )
THEN
366 w( ii ) = half*( work( k-1 )+work( k ) )
367 werr( ii ) = work( k ) - w( ii )
subroutine dlarrj(n, d, e2, ifirst, ilast, rtol, offset, w, werr, work, iwork, pivmin, spdiam, info)
DLARRJ performs refinement of the initial estimates of the eigenvalues of the matrix T.