163 SUBROUTINE slarrj( N, D, E2, IFIRST, ILAST,
164 $ RTOL, OFFSET, W, WERR, WORK, IWORK,
165 $ PIVMIN, SPDIAM, INFO )
172 INTEGER IFIRST, ILAST, INFO, N, OFFSET
173 REAL PIVMIN, RTOL, SPDIAM
177 REAL D( * ), E2( * ), W( * ),
178 $ werr( * ), work( * )
184 REAL ZERO, ONE, TWO, HALF
185 PARAMETER ( ZERO = 0.0e0, one = 1.0e0, two = 2.0e0,
190 INTEGER CNT, I, I1, I2, II, ITER, J, K, NEXT, NINT,
191 $ OLNINT, P, PREV, SAVI1
192 REAL DPLUS, FAC, LEFT, MID, RIGHT, S, TMP, WIDTH
208 maxitr = int( ( log( spdiam+pivmin )-log( pivmin ) ) /
228 left = w( ii ) - werr( ii )
230 right = w( ii ) + werr( ii )
232 tmp = max( abs( left ), abs( right ) )
235 IF( width.LT.rtol*tmp )
THEN
242 IF((i.EQ.i1).AND.(i.LT.i2)) i1 = i + 1
243 IF((prev.GE.i1).AND.(i.LE.i2)) iwork( 2*prev-1 ) = i + 1
256 IF( dplus.LT.zero ) cnt = cnt + 1
258 dplus = d( j ) - s - e2( j-1 )/dplus
259 IF( dplus.LT.zero ) cnt = cnt + 1
261 IF( cnt.GT.i-1 )
THEN
262 left = left - werr( ii )*fac
274 IF( dplus.LT.zero ) cnt = cnt + 1
276 dplus = d( j ) - s - e2( j-1 )/dplus
277 IF( dplus.LT.zero ) cnt = cnt + 1
280 right = right + werr( ii )*fac
310 mid = half*( left + right )
314 tmp = max( abs( left ), abs( right ) )
316 IF( ( width.LT.rtol*tmp ) .OR.
317 $ (iter.EQ.maxitr) )
THEN
326 IF(prev.GE.i1) iwork( 2*prev-1 ) = next
338 IF( dplus.LT.zero ) cnt = cnt + 1
340 dplus = d( j ) - s - e2( j-1 )/dplus
341 IF( dplus.LT.zero ) cnt = cnt + 1
343 IF( cnt.LE.i-1 )
THEN
355 IF( ( nint.GT.0 ).AND.(iter.LE.maxitr) )
GO TO 80
359 DO 110 i = savi1, ilast
363 IF( iwork( k-1 ).EQ.0 )
THEN
364 w( ii ) = half*( work( k-1 )+work( k ) )
365 werr( ii ) = work( k ) - w( ii )
subroutine slarrj(n, d, e2, ifirst, ilast, rtol, offset, w, werr, work, iwork, pivmin, spdiam, info)
SLARRJ performs refinement of the initial estimates of the eigenvalues of the matrix T.