146 SUBROUTINE dtrexc( COMPQ, N, T, LDT, Q, LDQ, IFST, ILST, WORK,
156 INTEGER ifst, ilst, info, ldq, ldt, n
159 DOUBLE PRECISION q( ldq, * ), t( ldt, * ), work( * )
165 DOUBLE PRECISION zero
166 parameter( zero = 0.0d+0 )
170 INTEGER here, nbf, nbl, nbnext
187 wantq =
lsame( compq,
'V' )
188 IF( .NOT.wantq .AND. .NOT.
lsame( compq,
'N' ) )
THEN
190 ELSE IF( n.LT.0 )
THEN
192 ELSE IF( ldt.LT.max( 1, n ) )
THEN
194 ELSE IF( ldq.LT.1 .OR. ( wantq .AND. ldq.LT.max( 1, n ) ) )
THEN
196 ELSE IF( ifst.LT.1 .OR. ifst.GT.n )
THEN
198 ELSE IF( ilst.LT.1 .OR. ilst.GT.n )
THEN
202 CALL
xerbla(
'DTREXC', -info )
215 IF( t( ifst, ifst-1 ).NE.zero )
220 IF( t( ifst+1, ifst ).NE.zero )
228 IF( t( ilst, ilst-1 ).NE.zero )
233 IF( t( ilst+1, ilst ).NE.zero )
240 IF( ifst.LT.ilst )
THEN
244 IF( nbf.EQ.2 .AND. nbl.EQ.1 )
246 IF( nbf.EQ.1 .AND. nbl.EQ.2 )
255 IF( nbf.EQ.1 .OR. nbf.EQ.2 )
THEN
260 IF( here+nbf+1.LE.n )
THEN
261 IF( t( here+nbf+1, here+nbf ).NE.zero )
264 CALL
dlaexc( wantq, n, t, ldt, q, ldq, here, nbf, nbnext,
275 IF( t( here+1, here ).EQ.zero )
285 IF( here+3.LE.n )
THEN
286 IF( t( here+3, here+2 ).NE.zero )
289 CALL
dlaexc( wantq, n, t, ldt, q, ldq, here+1, 1, nbnext,
295 IF( nbnext.EQ.1 )
THEN
299 CALL
dlaexc( wantq, n, t, ldt, q, ldq, here, 1, nbnext,
306 IF( t( here+2, here+1 ).EQ.zero )
308 IF( nbnext.EQ.2 )
THEN
312 CALL
dlaexc( wantq, n, t, ldt, q, ldq, here, 1,
313 $ nbnext, work, info )
323 CALL
dlaexc( wantq, n, t, ldt, q, ldq, here, 1, 1,
325 CALL
dlaexc( wantq, n, t, ldt, q, ldq, here+1, 1, 1,
341 IF( nbf.EQ.1 .OR. nbf.EQ.2 )
THEN
347 IF( t( here-1, here-2 ).NE.zero )
350 CALL
dlaexc( wantq, n, t, ldt, q, ldq, here-nbnext, nbnext,
361 IF( t( here+1, here ).EQ.zero )
372 IF( t( here-1, here-2 ).NE.zero )
375 CALL
dlaexc( wantq, n, t, ldt, q, ldq, here-nbnext, nbnext,
381 IF( nbnext.EQ.1 )
THEN
385 CALL
dlaexc( wantq, n, t, ldt, q, ldq, here, nbnext, 1,
392 IF( t( here, here-1 ).EQ.zero )
394 IF( nbnext.EQ.2 )
THEN
398 CALL
dlaexc( wantq, n, t, ldt, q, ldq, here-1, 2, 1,
409 CALL
dlaexc( wantq, n, t, ldt, q, ldq, here, 1, 1,
411 CALL
dlaexc( wantq, n, t, ldt, q, ldq, here-1, 1, 1,