157 SUBROUTINE dlagtf( N, A, LAMBDA, B, C, TOL, D, IN, INFO )
166 DOUBLE PRECISION lambda, tol
170 DOUBLE PRECISION a( * ), b( * ), c( * ), d( * )
176 DOUBLE PRECISION zero
177 parameter( zero = 0.0d+0 )
181 DOUBLE PRECISION eps, mult, piv1, piv2, scale1, scale2, temp, tl
198 CALL
xerbla(
'DLAGTF', -info )
205 a( 1 ) = a( 1 ) - lambda
216 scale1 = abs( a( 1 ) ) + abs( b( 1 ) )
218 a( k+1 ) = a( k+1 ) - lambda
219 scale2 = abs( c( k ) ) + abs( a( k+1 ) )
221 $ scale2 = scale2 + abs( b( k+1 ) )
222 IF( a( k ).EQ.zero )
THEN
225 piv1 = abs( a( k ) ) / scale1
227 IF( c( k ).EQ.zero )
THEN
234 piv2 = abs( c( k ) ) / scale2
235 IF( piv2.LE.piv1 )
THEN
238 c( k ) = c( k ) / a( k )
239 a( k+1 ) = a( k+1 ) - c( k )*b( k )
244 mult = a( k ) / c( k )
247 a( k+1 ) = b( k ) - mult*temp
248 IF( k.LT.( n-1 ) )
THEN
250 b( k+1 ) = -mult*d( k )
256 IF( ( max( piv1, piv2 ).LE.tl ) .AND. ( in( n ).EQ.0 ) )
259 IF( ( abs( a( n ) ).LE.scale1*tl ) .AND. ( in( n ).EQ.0 ) )