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,
subroutine dtrexc(COMPQ, N, T, LDT, Q, LDQ, IFST, ILST, WORK, INFO)
DTREXC
subroutine xerbla(SRNAME, INFO)
XERBLA
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...