STREXC  -  reorder  the real Schur factorization of a real
       matrix A = Q*T*Q**T, so that the diagonal block of T  with
       row index IFST is moved to row ILST


SYNOPSIS

       SUBROUTINE STREXC( COMPQ,  N,  T, LDT, Q, LDQ, IFST, ILST,
                          WORK, INFO )

           CHARACTER      COMPQ

           INTEGER        IFST, ILST, INFO, LDQ, LDT, N

           REAL           Q( LDQ, * ), T( LDT, * ), WORK( * )


PURPOSE

       STREXC reorders the real Schur  factorization  of  a  real
       matrix  A = Q*T*Q**T, so that the diagonal block of T with
       row index IFST is moved to row ILST.  The real Schur  form
       T  is reordered by an orthogonal similarity transformation
       Z**T*T*Z, and optionally the matrix Q of Schur vectors  is
       updated by postmultiplying it with Z.

       T must be in Schur canonical form (as returned by SHSEQR),
       that is, block upper triangular  with  1-by-1  and  2-by-2
       diagonal blocks; each 2-by-2 diagonal block has its diago­
       nal elements equal and its off-diagonal elements of  oppo­
       site sign.


ARGUMENTS

       COMPQ   (input) CHARACTER*1
               = 'V':  update the matrix Q of Schur vectors;
               = 'N':  do not update Q.

       N       (input) INTEGER
               The order of the matrix T. N >= 0.

       T       (input/output) REAL array, dimension (LDT,N)
               On  entry, the upper quasi-triangular matrix T, in
               Schur  Schur  canonical  form.    On   exit,   the
               reordered  upper quasi-triangular matrix, again in
               Schur canonical form.

       LDT     (input) INTEGER
               The leading dimension  of  the  array  T.  LDT  >=
               max(1,N).

       Q       (input/output) REAL array, dimension (LDQ,N)
               On  entry,  if  COMPQ = 'V', the matrix Q of Schur
               vectors.  On exit, if COMPQ  =  'V',  Q  has  been
               postmultiplied  by  the  orthogonal transformation
               matrix Z which reorders T.  If COMPQ = 'N',  Q  is
               not referenced.

               The  leading  dimension  of  the  array Q.  LDQ >=
               max(1,N).

       IFST    (input/output) INTEGER
               ILST      (input/output)   INTEGER   Specify   the
               reordering of the diagonal blocks of T.  The block
               with row index IFST is moved to  row  ILST,  by  a
               sequence   of   transpositions   between  adjacent
               blocks.  On exit, if IFST pointed on entry to  the
               second  row  of  a  2-by-2 block, it is changed to
               point to the first row; ILST always points to  the
               first  row  of  the  block  in  its final position
               (which may differ from its input value  by  +1  or
               -1).  1 <= IFST <= N; 1 <= ILST <= N.

       WORK    (workspace) REAL array, dimension (N)

       INFO    (output) INTEGER
               = 0:  successful exit
               < 0:  if INFO = -i, the i-th argument had an ille­
               gal value
               = 1:  two adjacent blocks were too close  to  swap
               (the  problem is very ill-conditioned); T may have
               been partially reordered, and ILST points  to  the
               first  row  of  the  current position of the block
               being moved.


Man(1) output converted with man2html