1 SUBROUTINE bdlaexc( N, T, LDT, J1, N1, N2, ITRAF, DTRAF, WORK,
10 INTEGER INFO, J1, LDT, N, N1, N2
14 DOUBLE PRECISION DTRAF( * ), T( LDT, * ), WORK( * )
82 DOUBLE PRECISION ZERO, ONE
83 parameter( zero = 0.0d+0, one = 1.0d+0 )
85 parameter( ten = 1.0d+1 )
87 parameter( ldd = 4, ldx = 2 )
90 INTEGER IERR, J2, J3, J4, K, LD, LI, ND
91 DOUBLE PRECISION CS, DNORM, EPS, SCALE, SMLNUM, SN, T11, T22,
92 $ t33, tau, tau1, tau2, temp, thresh, wi1, wi2,
96 DOUBLE PRECISION D( LDD, 4 ), X( LDX, 2 )
99 DOUBLE PRECISION DLAMCH, DLANGE
100 EXTERNAL dlamch, dlange
115 IF( n.EQ.0 .OR. n1.EQ.0 .OR. n2.EQ.0 )
124 IF( n1.EQ.1 .AND. n2.EQ.1 )
THEN
133 CALL dlartg( t( j1, j2 ), t22-t11, cs, sn, temp )
138 $
CALL drot( n-j1-1, t( j1, j3 ), ldt, t( j2, j3 ), ldt, cs,
140 CALL drot( j1-1, t( 1, j1 ), 1, t( 1, j2 ), 1, cs, sn )
157 CALL dlamov(
'Full', nd, nd, t( j1, j1 ), ldt, d, ldd )
158 dnorm = dlange(
'Max', nd, nd, d, ldd, work )
164 smlnum = dlamch(
'S' ) / eps
165 thresh =
max( ten*eps*dnorm, smlnum )
169 CALL dlasy2( .false., .false., -1, n1, n2, d, ldd,
170 $ d( n1+1, n1+1 ), ldd, d( 1, n1+1 ), ldd, scale, x,
176 GO TO ( 10, 20, 30 )k
185 dtraf( 2 ) = x( 1, 1 )
186 dtraf( 3 ) = x( 1, 2 )
187 CALL dlarfg( 3, dtraf( 3 ), dtraf, 1, tau )
193 CALL dlarfx(
'Left', 3, 3, dtraf, tau, d, ldd, work )
194 CALL dlarfx(
'Right', 3, 3, dtraf, tau, d, ldd, work )
198 IF(
max( abs( d( 3, 1 ) ), abs( d( 3, 2 ) ), abs( d( 3,
199 $ 3 )-t11 ) ).GT.thresh )
GO TO 50
203 CALL dlarfx(
'Left', 3, n-j1+1, dtraf, tau, t( j1, j1 ), ldt,
205 CALL dlarfx(
'Right', j2, 3, dtraf, tau, t( 1, j1 ), ldt,
212 itraf( 1 ) = 2*n + j1
226 dtraf( 1 ) = -x( 1, 1 )
227 dtraf( 2 ) = -x( 2, 1 )
229 CALL dlarfg( 3, dtraf( 1 ), dtraf( 2 ), 1, tau )
235 CALL dlarfx(
'Left', 3, 3, dtraf, tau, d, ldd, work )
236 CALL dlarfx(
'Right', 3, 3, dtraf, tau, d, ldd, work )
240 IF(
max( abs( d( 2, 1 ) ), abs( d( 3, 1 ) ), abs( d( 1,
241 $ 1 )-t33 ) ).GT.thresh )
GO TO 50
245 CALL dlarfx(
'Right', j3, 3, dtraf, tau, t( 1, j1 ), ldt,
247 CALL dlarfx(
'Left', 3, n-j1, dtraf, tau, t( j1, j2 ), ldt,
270 dtraf( 1 ) = -x( 1, 1 )
271 dtraf( 2 ) = -x( 2, 1 )
273 CALL dlarfg( 3, dtraf( 1 ), dtraf( 2 ), 1, tau1 )
276 temp = -tau1*( x( 1, 2 )+dtraf( 2 )*x( 2, 2 ) )
277 dtraf( 4 ) = -temp*dtraf( 2 ) - x( 2, 2 )
278 dtraf( 5 ) = -temp*dtraf( 3 )
280 CALL dlarfg( 3, dtraf( 4 ), dtraf( 5 ), 1, tau2 )
285 CALL dlarfx(
'Left', 3, 4, dtraf, tau1, d, ldd, work )
286 CALL dlarfx(
'Right', 4, 3, dtraf, tau1, d, ldd, work )
287 CALL dlarfx(
'Left', 3, 4, dtraf( 4 ), tau2, d( 2, 1 ), ldd,
289 CALL dlarfx( 'right
', 4, 3, DTRAF( 4 ), TAU2, D( 1, 2 ), LDD,
294 IF( MAX( ABS( D( 3, 1 ) ), ABS( D( 3, 2 ) ), ABS( D( 4, 1 ) ),
295.GT.
$ ABS( D( 4, 2 ) ) )THRESH )GO TO 50
299 CALL DLARFX( 'left
', 3, N-J1+1, DTRAF, TAU1, T( J1, J1 ), LDT,
301 CALL DLARFX( 'right
', J4, 3, DTRAF, TAU1, T( 1, J1 ), LDT,
303 CALL DLARFX( 'left
', 3, N-J1+1, DTRAF( 4 ), TAU2, T( J2, J1 ),
305 CALL DLARFX( 'right
', J4, 3, DTRAF( 4 ), TAU2, T( 1, J2 ), LDT,
327 CALL DLANV2( T( J1, J1 ), T( J1, J2 ), T( J2, J1 ),
328 $ T( J2, J2 ), WR1, WI1, WR2, WI2, CS, SN )
329 CALL DROT( N-J1-1, T( J1, J1+2 ), LDT, T( J2, J1+2 ), LDT,
331 CALL DROT( J1-1, T( 1, J1 ), 1, T( 1, J2 ), 1, CS, SN )
345 CALL DLANV2( T( J3, J3 ), T( J3, J4 ), T( J4, J3 ),
346 $ T( J4, J4 ), WR1, WI1, WR2, WI2, CS, SN )
348 $ CALL DROT( N-J3-1, T( J3, J3+2 ), LDT, T( J4, J3+2 ),
350 CALL DROT( J3-1, T( 1, J3 ), 1, T( 1, J4 ), 1, CS, SN )