119 SUBROUTINE dlasq6( I0, N0, Z, PP, DMIN, DMIN1, DMIN2, DN,
129 DOUBLE PRECISION DMIN, DMIN1, DMIN2, DN, DNM1, DNM2
132 DOUBLE PRECISION Z( * )
138 DOUBLE PRECISION ZERO
139 parameter ( zero = 0.0d0 )
143 DOUBLE PRECISION D, EMIN, SAFMIN, TEMP
146 DOUBLE PRECISION DLAMCH
154 IF( ( n0-i0-1 ).LE.0 )
157 safmin = dlamch(
'Safe minimum' )
164 DO 10 j4 = 4*i0, 4*( n0-3 ), 4
165 z( j4-2 ) = d + z( j4-1 )
166 IF( z( j4-2 ).EQ.zero )
THEN
171 ELSE IF( safmin*z( j4+1 ).LT.z( j4-2 ) .AND.
172 $ safmin*z( j4-2 ).LT.z( j4+1 ) )
THEN
173 temp = z( j4+1 ) / z( j4-2 )
174 z( j4 ) = z( j4-1 )*temp
177 z( j4 ) = z( j4+1 )*( z( j4-1 ) / z( j4-2 ) )
178 d = z( j4+1 )*( d / z( j4-2 ) )
180 dmin = min( dmin, d )
181 emin = min( emin, z( j4 ) )
184 DO 20 j4 = 4*i0, 4*( n0-3 ), 4
185 z( j4-3 ) = d + z( j4 )
186 IF( z( j4-3 ).EQ.zero )
THEN
191 ELSE IF( safmin*z( j4+2 ).LT.z( j4-3 ) .AND.
192 $ safmin*z( j4-3 ).LT.z( j4+2 ) )
THEN
193 temp = z( j4+2 ) / z( j4-3 )
194 z( j4-1 ) = z( j4 )*temp
197 z( j4-1 ) = z( j4+2 )*( z( j4 ) / z( j4-3 ) )
198 d = z( j4+2 )*( d / z( j4-3 ) )
200 dmin = min( dmin, d )
201 emin = min( emin, z( j4-1 ) )
211 z( j4-2 ) = dnm2 + z( j4p2 )
212 IF( z( j4-2 ).EQ.zero )
THEN
217 ELSE IF( safmin*z( j4p2+2 ).LT.z( j4-2 ) .AND.
218 $ safmin*z( j4-2 ).LT.z( j4p2+2 ) )
THEN
219 temp = z( j4p2+2 ) / z( j4-2 )
220 z( j4 ) = z( j4p2 )*temp
223 z( j4 ) = z( j4p2+2 )*( z( j4p2 ) / z( j4-2 ) )
224 dnm1 = z( j4p2+2 )*( dnm2 / z( j4-2 ) )
226 dmin = min( dmin, dnm1 )
231 z( j4-2 ) = dnm1 + z( j4p2 )
232 IF( z( j4-2 ).EQ.zero )
THEN
237 ELSE IF( safmin*z( j4p2+2 ).LT.z( j4-2 ) .AND.
238 $ safmin*z( j4-2 ).LT.z( j4p2+2 ) )
THEN
239 temp = z( j4p2+2 ) / z( j4-2 )
240 z( j4 ) = z( j4p2 )*temp
243 z( j4 ) = z( j4p2+2 )*( z( j4p2 ) / z( j4-2 ) )
244 dn = z( j4p2+2 )*( dnm1 / z( j4-2 ) )
246 dmin = min( dmin, dn )
subroutine dlasq6(I0, N0, Z, PP, DMIN, DMIN1, DMIN2, DN, DNM1, DNM2)
DLASQ6 computes one dqd transform in ping-pong form. Used by sbdsqr and sstegr.