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