146 SUBROUTINE dtrexc( COMPQ, N, T, LDT, Q, LDQ, IFST, ILST, WORK,
155 INTEGER IFST, ILST, INFO, LDQ, LDT, N
158 DOUBLE PRECISION Q( LDQ, * ), T( LDT, * ), WORK( * )
164 DOUBLE PRECISION ZERO
165 parameter( zero = 0.0d+0 )
169 INTEGER HERE, NBF, NBL, NBNEXT
186 wantq = lsame( compq,
'V' )
187 IF( .NOT.wantq .AND. .NOT.lsame( compq,
'N' ) )
THEN
189 ELSE IF( n.LT.0 )
THEN
191 ELSE IF( ldt.LT.max( 1, n ) )
THEN
193 ELSE IF( ldq.LT.1 .OR. ( wantq .AND. ldq.LT.max( 1, n ) ) )
THEN
195 ELSE IF(( ifst.LT.1 .OR. ifst.GT.n ).AND.( n.GT.0 ))
THEN
197 ELSE IF(( ilst.LT.1 .OR. ilst.GT.n ).AND.( n.GT.0 ))
THEN
201 CALL xerbla(
'DTREXC', -info )
214 IF( t( ifst, ifst-1 ).NE.zero )
219 IF( t( ifst+1, ifst ).NE.zero )
227 IF( t( ilst, ilst-1 ).NE.zero )
232 IF( t( ilst+1, ilst ).NE.zero )
239 IF( ifst.LT.ilst )
THEN
243 IF( nbf.EQ.2 .AND. nbl.EQ.1 )
245 IF( nbf.EQ.1 .AND. nbl.EQ.2 )
254 IF( nbf.EQ.1 .OR. nbf.EQ.2 )
THEN
259 IF( here+nbf+1.LE.n )
THEN
260 IF( t( here+nbf+1, here+nbf ).NE.zero )
263 CALL dlaexc( wantq, n, t, ldt, q, ldq, here, nbf, nbnext,
274 IF( t( here+1, here ).EQ.zero )
284 IF( here+3.LE.n )
THEN
285 IF( t( here+3, here+2 ).NE.zero )
288 CALL dlaexc( wantq, n, t, ldt, q, ldq, here+1, 1, nbnext,
294 IF( nbnext.EQ.1 )
THEN
298 CALL dlaexc( wantq, n, t, ldt, q, ldq, here, 1, nbnext,
305 IF( t( here+2, here+1 ).EQ.zero )
307 IF( nbnext.EQ.2 )
THEN
311 CALL dlaexc( wantq, n, t, ldt, q, ldq, here, 1,
312 $ nbnext, work, info )
322 CALL dlaexc( wantq, n, t, ldt, q, ldq, here, 1, 1,
324 CALL dlaexc( wantq, n, t, ldt, q, ldq, here+1, 1, 1,
340 IF( nbf.EQ.1 .OR. nbf.EQ.2 )
THEN
346 IF( t( here-1, here-2 ).NE.zero )
349 CALL dlaexc( wantq, n, t, ldt, q, ldq, here-nbnext, nbnext,
360 IF( t( here+1, here ).EQ.zero )
371 IF( t( here-1, here-2 ).NE.zero )
374 CALL dlaexc( wantq, n, t, ldt, q, ldq, here-nbnext, nbnext,
380 IF( nbnext.EQ.1 )
THEN
384 CALL dlaexc( wantq, n, t, ldt, q, ldq, here, nbnext, 1,
391 IF( t( here, here-1 ).EQ.zero )
393 IF( nbnext.EQ.2 )
THEN
397 CALL dlaexc( wantq, n, t, ldt, q, ldq, here-1, 2, 1,
408 CALL dlaexc( wantq, n, t, ldt, q, ldq, here, 1, 1,
410 CALL dlaexc( wantq, n, t, ldt, q, ldq, here-1, 1, 1,
subroutine xerbla(srname, info)
subroutine dlaexc(wantq, n, t, ldt, q, ldq, j1, n1, n2, work, info)
DLAEXC swaps adjacent diagonal blocks of a real upper quasi-triangular matrix in Schur canonical form...
subroutine dtrexc(compq, n, t, ldt, q, ldq, ifst, ilst, work, info)
DTREXC