177 SUBROUTINE slasq3( I0, N0, Z, PP, DMIN, SIGMA, DESIG, QMAX,
179 $ ITER, NDIV, IEEE, TTYPE, DMIN1, DMIN2, DN, DN1,
188 INTEGER I0, ITER, N0, NDIV, NFAIL, PP
189 REAL DESIG, DMIN, DMIN1, DMIN2, DN, DN1, DN2, G,
200 PARAMETER ( CBIAS = 1.50e0 )
201 REAL ZERO, QURTR, HALF, ONE, TWO, HUNDRD
202 parameter( zero = 0.0e0, qurtr = 0.250e0, half = 0.5e0,
203 $ one = 1.0e0, two = 2.0e0, hundrd = 100.0e0 )
206 INTEGER IPN4, J4, N0IN, NN, TTYPE
207 REAL EPS, S, T, TEMP, TOL, TOL2
215 EXTERNAL SISNAN, SLAMCH
218 INTRINSIC abs, max, min, sqrt
223 eps = slamch(
'Precision' )
241 IF( z( nn-5 ).GT.tol2*( sigma+z( nn-3 ) ) .AND.
242 $ z( nn-2*pp-4 ).GT.tol2*z( nn-7 ) )
247 z( 4*n0-3 ) = z( 4*n0+pp-3 ) + sigma
255 IF( z( nn-9 ).GT.tol2*sigma .AND.
256 $ z( nn-2*pp-8 ).GT.tol2*z( nn-11 ) )
261 IF( z( nn-3 ).GT.z( nn-7 ) )
THEN
263 z( nn-3 ) = z( nn-7 )
266 t = half*( ( z( nn-7 )-z( nn-3 ) )+z( nn-5 ) )
267 IF( z( nn-5 ).GT.z( nn-3 )*tol2.AND.t.NE.zero )
THEN
268 s = z( nn-3 )*( z( nn-5 ) / t )
270 s = z( nn-3 )*( z( nn-5 ) /
271 $ ( t*( one+sqrt( one+s / t ) ) ) )
273 s = z( nn-3 )*( z( nn-5 ) / ( t+sqrt( t )*sqrt( t+s ) ) )
275 t = z( nn-7 ) + ( s+z( nn-5 ) )
276 z( nn-3 ) = z( nn-3 )*( z( nn-7 ) / t )
279 z( 4*n0-7 ) = z( nn-7 ) + sigma
280 z( 4*n0-3 ) = z( nn-3 ) + sigma
290 IF( dmin.LE.zero .OR. n0.LT.n0in )
THEN
291 IF( cbias*z( 4*i0+pp-3 ).LT.z( 4*n0+pp-3 ) )
THEN
293 DO 60 j4 = 4*i0, 2*( i0+n0-1 ), 4
295 z( j4-3 ) = z( ipn4-j4-3 )
296 z( ipn4-j4-3 ) = temp
298 z( j4-2 ) = z( ipn4-j4-2 )
299 z( ipn4-j4-2 ) = temp
301 z( j4-1 ) = z( ipn4-j4-5 )
302 z( ipn4-j4-5 ) = temp
304 z( j4 ) = z( ipn4-j4-4 )
305 z( ipn4-j4-4 ) = temp
307 IF( n0-i0.LE.4 )
THEN
308 z( 4*n0+pp-1 ) = z( 4*i0+pp-1 )
309 z( 4*n0-pp ) = z( 4*i0-pp )
311 dmin2 = min( dmin2, z( 4*n0+pp-1 ) )
312 z( 4*n0+pp-1 ) = min( z( 4*n0+pp-1 ), z( 4*i0+pp-1 ),
314 z( 4*n0-pp ) = min( z( 4*n0-pp ), z( 4*i0-pp ),
316 qmax = max( qmax, z( 4*i0+pp-3 ), z( 4*i0+pp+1 ) )
323 CALL slasq4( i0, n0, z, pp, n0in, dmin, dmin1, dmin2, dn, dn1,
324 $ dn2, tau, ttype, g )
330 CALL slasq5( i0, n0, z, pp, tau, sigma, dmin, dmin1, dmin2, dn,
331 $ dn1, dn2, ieee, eps )
333 ndiv = ndiv + ( n0-i0+2 )
338 IF( dmin.GE.zero .AND. dmin1.GE.zero )
THEN
344 ELSE IF( dmin.LT.zero .AND. dmin1.GT.zero .AND.
345 $ z( 4*( n0-1 )-pp ).LT.tol*( sigma+dn1 ) .AND.
346 $ abs( dn ).LT.tol*sigma )
THEN
350 z( 4*( n0-1 )-pp+2 ) = zero
353 ELSE IF( dmin.LT.zero )
THEN
358 IF( ttype.LT.-22 )
THEN
363 ELSE IF( dmin1.GT.zero )
THEN
367 tau = ( tau+dmin )*( one-two*eps )
377 ELSE IF( sisnan( dmin ) )
THEN
381 IF( tau.EQ.zero )
THEN
397 CALL slasq6( i0, n0, z, pp, dmin, dmin1, dmin2, dn, dn1, dn2 )
398 ndiv = ndiv + ( n0-i0+2 )
403 IF( tau.LT.sigma )
THEN
406 desig = desig - ( t-sigma )
409 desig = sigma - ( t-tau ) + desig
subroutine slasq3(i0, n0, z, pp, dmin, sigma, desig, qmax, nfail, iter, ndiv, ieee, ttype, dmin1, dmin2, dn, dn1, dn2, g, tau)
SLASQ3 checks for deflation, computes a shift and calls dqds. Used by sbdsqr.
subroutine slasq4(i0, n0, z, pp, n0in, dmin, dmin1, dmin2, dn, dn1, dn2, tau, ttype, g)
SLASQ4 computes an approximation to the smallest eigenvalue using values of d from the previous trans...
subroutine slasq5(i0, n0, z, pp, tau, sigma, dmin, dmin1, dmin2, dn, dnm1, dnm2, ieee, eps)
SLASQ5 computes one dqds transform in ping-pong form. Used by sbdsqr and sstegr.