136 SUBROUTINE slaexc( WANTQ, N, T, LDT, Q, LDQ, J1, N1, N2, WORK,
145 INTEGER INFO, J1, LDQ, LDT, N, N1, N2
148 REAL Q( LDQ, * ), T( LDT, * ), WORK( * )
155 parameter( zero = 0.0e+0, one = 1.0e+0 )
157 parameter( ten = 1.0e+1 )
159 parameter( ldd = 4, ldx = 2 )
162 INTEGER IERR, J2, J3, J4, K, ND
163 REAL , DNORM, EPS, SCALE, SMLNUM, SN, T11, T22,
164 $ t33, tau, tau1, tau2, temp, thresh, wi1, wi2,
168 REAL D( LDD, 4 ), U( 3 ), U1( 3 ), U2( 3 ),
173 EXTERNAL slamch, slange
188 IF( n.EQ.0 .OR. n1.EQ.0 .OR. n2.EQ.0 )
197 IF( n1.EQ.1 .AND. n2.EQ.1 )
THEN
206 CALL slartg( t( j1, j2 ), t22-t11, cs, sn, temp )
211 $
CALL srot( n-j1-1, t( j1, j3 ), ldt, t( j2, j3 ), ldt, cs,
213 CALL srot( j1-1, t( 1, j1 ), 1, t( 1, j2 ), 1, cs, sn )
222 CALL srot( n, q( 1, j1 ), 1, q( 1, j2 ), 1, cs, sn )
233 CALL slacpy(
'Full', nd, nd, t( j1, j1 ), ldt, d, ldd )
234 dnorm = slange(
'Max', nd, nd, d, ldd, work )
240 smlnum = slamch(
'S' ) / eps
241 thresh =
max( ten*eps*dnorm, smlnum )
245 CALL slasy2( .false., .false., -1, n1, n2, d, ldd,
246 $ d( n1+1, n1+1 ), ldd, d( 1, n1+1 ), ldd, scale, x,
252 GO TO ( 10, 20, 30 )k
263 CALL slarfg( 3, u( 3 ), u, 1, tau )
269 CALL slarfx( 'l
', 3, 3, U, TAU, D, LDD, WORK )
270 CALL SLARFX( 'r
', 3, 3, U, TAU, D, LDD, WORK )
274 IF( MAX( ABS( D( 3, 1 ) ), ABS( D( 3, 2 ) ), ABS( D( 3,
275.GT.
$ 3 )-T11 ) )THRESH )GO TO 50
279 CALL SLARFX( 'l
', 3, N-J1+1, U, TAU, T( J1, J1 ), LDT, WORK )
280 CALL SLARFX( 'r
', J2, 3, U, TAU, T( 1, J1 ), LDT, WORK )
290 CALL SLARFX( 'r
', N, 3, U, TAU, Q( 1, J1 ), LDQ, WORK )
305 CALL SLARFG( 3, U( 1 ), U( 2 ), 1, TAU )
311 CALL SLARFX( 'l
', 3, 3, U, TAU, D, LDD, WORK )
312 CALL SLARFX( 'r
', 3, 3, U, TAU, D, LDD, WORK )
316 IF( MAX( ABS( D( 2, 1 ) ), ABS( D( 3, 1 ) ), ABS( D( 1,
317.GT.
$ 1 )-T33 ) )THRESH )GO TO 50
321 CALL SLARFX( 'r
', J3, 3, U, TAU, T( 1, J1 ), LDT, WORK )
322 CALL SLARFX( 'l
', 3, N-J1, U, TAU, T( J1, J2 ), LDT, WORK )
332 CALL SLARFX( 'r
', N, 3, U, TAU, Q( 1, J1 ), LDQ, WORK )
349 CALL SLARFG( 3, U1( 1 ), U1( 2 ), 1, TAU1 )
352 TEMP = -TAU1*( X( 1, 2 )+U1( 2 )*X( 2, 2 ) )
353 U2( 1 ) = -TEMP*U1( 2 ) - X( 2, 2 )
354 U2( 2 ) = -TEMP*U1( 3 )
356 CALL SLARFG( 3, U2( 1 ), U2( 2 ), 1, TAU2 )
361 CALL SLARFX( 'l
', 3, 4, U1, TAU1, D, LDD, WORK )
362 CALL SLARFX( 'r
', 4, 3, U1, TAU1, D, LDD, WORK )
363 CALL SLARFX( 'l
', 3, 4, U2, TAU2, D( 2, 1 ), LDD, WORK )
364 CALL SLARFX( 'r
', 4, 3, U2, TAU2, D( 1, 2 ), LDD, WORK )
368 IF( MAX( ABS( D( 3, 1 ) ), ABS( D( 3, 2 ) ), ABS( D( 4, 1 ) ),
369.GT.
$ ABS( D( 4, 2 ) ) )THRESH )GO TO 50
373 CALL SLARFX( 'l', 3, n-j1+1, u1, tau1, t( j1, j1 ), ldt, work )
374 CALL slarfx(
'R', j4, 3, u1, tau1, t( 1, j1 ), ldt, work )
375 CALL slarfx(
'L', 3, n-j1+1, u2, tau2, t( j2, j1 ), ldt, work )
376 CALL slarfx(
'R', j4, 3, u2, tau2, t( 1, j2 ), ldt, work )
387 CALL slarfx(
'R', n, 3, u1, tau1, q( 1, j1 ), ldq, work )
388 CALL slarfx(
'R', n, 3, u2, tau2, q( 1, j2 ), ldq, work )
397 CALL slanv2( t( j1, j1 ), t( j1, j2 ), t( j2, j1 ),
398 $ t( j2, j2 ), wr1, wi1, wr2, wi2, cs, sn )
399 CALL srot( n-j1-1, t( j1, j1+2 ), ldt, t( j2, j1+2 ), ldt,
401 CALL srot( j1-1, t( 1, j1 ), 1, t( 1, j2 ), 1, cs, sn )
415 $
CALL srot( n-j3-1, t( j3, j3+2 ), ldt, t( j4, j3+2 ),
417 CALL srot( j3-1, t( 1, j3 ), 1, t( 1, j4 ), 1, cs, sn )
419 $
CALL srot( n, q( 1, j3 ), 1, q( 1, j4 ), 1, cs, sn )