148 SUBROUTINE dtrexc( COMPQ, N, T, LDT, Q, LDQ, IFST, ILST, WORK,
158 INTEGER IFST, ILST, INFO, LDQ, LDT, N
161 DOUBLE PRECISION Q( LDQ, * ), T( LDT, * ), WORK( * )
167 DOUBLE PRECISION ZERO
168 parameter( zero = 0.0d+0 )
172 INTEGER HERE, NBF, NBL, NBNEXT
189 wantq = lsame( compq,
'V' )
190 IF( .NOT.wantq .AND. .NOT.lsame( compq,
'N' ) )
THEN
192 ELSE IF( n.LT.0 )
THEN
194 ELSE IF( ldt.LT.max( 1, n ) )
THEN
196 ELSE IF( ldq.LT.1 .OR. ( wantq .AND. ldq.LT.max( 1, n ) ) )
THEN
198 ELSE IF(( ifst.LT.1 .OR. ifst.GT.n ).AND.( n.GT.0 ))
THEN
200 ELSE IF(( ilst.LT.1 .OR. ilst.GT.n ).AND.( n.GT.0 ))
THEN
204 CALL xerbla(
'DTREXC', -info )
217 IF( t( ifst, ifst-1 ).NE.zero )
222 IF( t( ifst+1, ifst ).NE.zero )
230 IF( t( ilst, ilst-1 ).NE.zero )
235 IF( t( ilst+1, ilst ).NE.zero )
242 IF( ifst.LT.ilst )
THEN
246 IF( nbf.EQ.2 .AND. nbl.EQ.1 )
248 IF( nbf.EQ.1 .AND. nbl.EQ.2 )
257 IF( nbf.EQ.1 .OR. nbf.EQ.2 )
THEN
262 IF( here+nbf+1.LE.n )
THEN
263 IF( t( here+nbf+1, here+nbf ).NE.zero )
266 CALL dlaexc( wantq, n, t, ldt, q, ldq, here, nbf, nbnext,
277 IF( t( here+1, here ).EQ.zero )
287 IF( here+3.LE.n )
THEN
288 IF( t( here+3, here+2 ).NE.zero )
291 CALL dlaexc( wantq, n, t, ldt, q, ldq, here+1, 1, nbnext,
297 IF( nbnext.EQ.1 )
THEN
301 CALL dlaexc( wantq, n, t, ldt, q, ldq, here, 1, nbnext,
308 IF( t( here+2, here+1 ).EQ.zero )
310 IF( nbnext.EQ.2 )
THEN
314 CALL dlaexc( wantq, n, t, ldt, q, ldq, here, 1,
315 $ nbnext, work, info )
325 CALL dlaexc( wantq, n, t, ldt, q, ldq, here, 1, 1,
327 CALL dlaexc( wantq, n, t, ldt, q, ldq, here+1, 1, 1,
343 IF( nbf.EQ.1 .OR. nbf.EQ.2 )
THEN
349 IF( t( here-1, here-2 ).NE.zero )
352 CALL dlaexc( wantq, n, t, ldt, q, ldq, here-nbnext, nbnext,
363 IF( t( here+1, here ).EQ.zero )
374 IF( t( here-1, here-2 ).NE.zero )
377 CALL dlaexc( wantq, n, t, ldt, q, ldq, here-nbnext, nbnext,
383 IF( nbnext.EQ.1 )
THEN
387 CALL dlaexc( wantq, n, t, ldt, q, ldq, here, nbnext, 1,
394 IF( t( here, here-1 ).EQ.zero )
396 IF( nbnext.EQ.2 )
THEN
400 CALL dlaexc( wantq, n, t, ldt, q, ldq, here-1, 2, 1,
411 CALL dlaexc( wantq, n, t, ldt, q, ldq, here, 1, 1,
413 CALL dlaexc( wantq, n, t, ldt, q, ldq, here-1, 1, 1,