146 SUBROUTINE strexc( COMPQ, N, T, LDT, Q, LDQ, IFST, ILST, WORK,
155 INTEGER IFST, ILST, INFO, LDQ, LDT, N
158 REAL Q( ldq, * ), T( ldt, * ), WORK( * )
165 parameter( zero = 0.0e+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(
'STREXC', -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 slaexc( 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 slaexc( wantq, n, t, ldt, q, ldq, here+1, 1, nbnext,
294 IF( nbnext.EQ.1 )
THEN 298 CALL slaexc( 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 slaexc( wantq, n, t, ldt, q, ldq, here, 1,
312 $ nbnext, work, info )
322 CALL slaexc( wantq, n, t, ldt, q, ldq, here, 1, 1,
324 CALL slaexc( 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 slaexc( 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 slaexc( wantq, n, t, ldt, q, ldq, here-nbnext, nbnext,
380 IF( nbnext.EQ.1 )
THEN 384 CALL slaexc( 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 slaexc( wantq, n, t, ldt, q, ldq, here-1, 2, 1,
408 CALL slaexc( wantq, n, t, ldt, q, ldq, here, 1, 1,
410 CALL slaexc( wantq, n, t, ldt, q, ldq, here-1, 1, 1,
subroutine xerbla(SRNAME, INFO)
XERBLA
subroutine strexc(COMPQ, N, T, LDT, Q, LDQ, IFST, ILST, WORK, INFO)
STREXC
subroutine slaexc(WANTQ, N, T, LDT, Q, LDQ, J1, N1, N2, WORK, INFO)
SLAEXC swaps adjacent diagonal blocks of a real upper quasi-triangular matrix in Schur canonical form...