STGEXC  - reorder the generalized real Schur decomposition
       of a real matrix pair (A,B) using  an  orthogonal  equiva­
       lence transformation  (A, B) = Q * (A, B) * Z',


SYNOPSIS

       SUBROUTINE STGEXC( WANTQ,  WANTZ,  N,  A,  LDA, B, LDB, Q,
                          LDQ, Z, LDZ, IFST, ILST,  WORK,  LWORK,
                          INFO )

           LOGICAL        WANTQ, WANTZ

           INTEGER        IFST,  ILST,  INFO, LDA, LDB, LDQ, LDZ,
                          LWORK, N

           REAL           A( LDA, * ), B( LDB, * ), Q( LDQ, *  ),
                          WORK( * ), Z( LDZ, * )


PURPOSE

       STGEXC  reorders  the generalized real Schur decomposition
       of a real matrix pair (A,B) using  an  orthogonal  equiva­
       lence transformation (A, B) = Q * (A, B) * Z', so that the
       diagonal block of (A, B) with row index IFST is  moved  to
       row ILST.

       (A,  B)  must  be in generalized real Schur canonical form
       (as returned by SGGES), i.e. A is block  upper  triangular
       with  1-by-1 and 2-by-2 diagonal blocks. B is upper trian­
       gular.

       Optionally, the matrices Q and Z of generalized Schur vec­
       tors are updated.

              Q(in) * A(in) * Z(in)' = Q(out) * A(out) * Z(out)'
              Q(in) * B(in) * Z(in)' = Q(out) * B(out) * Z(out)'


ARGUMENTS

       WANTQ   (input) LOGICAL

       WANTZ   (input) LOGICAL

       N       (input) INTEGER
               The order of the matrices A and B. N >= 0.

       A       (input/output) REAL array, dimension (LDA,N)
               On  entry,  the matrix A in generalized real Schur
               canonical form.  On exit, the  updated  matrix  A,
               again in generalized real Schur canonical form.

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

               On entry, the matrix B in generalized  real  Schur
               canonical form (A,B).  On exit, the updated matrix
               B, again in generalized real Schur canonical  form
               (A,B).

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

       Q       (input/output) REAL array, dimension (LDZ,N)
               On entry, if WANTQ = .TRUE., the orthogonal matrix
               Q.   On  exit,  the  updated matrix Q.  If WANTQ =
               .FALSE., Q is not referenced.

       LDQ     (input) INTEGER
               The leading dimension of the array Q.  LDQ  >=  1.
               If WANTQ = .TRUE., LDQ >= N.

       Z       (input/output) REAL array, dimension (LDZ,N)
               On entry, if WANTZ = .TRUE., the orthogonal matrix
               Z.  On exit, the updated matrix  Z.   If  WANTZ  =
               .FALSE., Z is not referenced.

       LDZ     (input) INTEGER
               The  leading  dimension  of the array Z. LDZ >= 1.
               If WANTZ = .TRUE., LDZ >= N.

       IFST    (input/output) INTEGER
               ILST      (input/output)   INTEGER   Specify   the
               reordering  of the diagonal blocks of (A, B).  The
               block with row index IFST is moved to row ILST, by
               a  sequence  of  swapping 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 dif­
               fer from its input value by +1 or -1). 1 <=  IFST,
               ILST <= N.

       WORK    (workspace/output) REAL array, dimension (LWORK)
               On  exit, if INFO = 0, WORK(1) returns the optimal
               LWORK.

       LWORK   (input) INTEGER
               The dimension of the array WORK. LWORK  >=  4*N  +
               16.

               If  LWORK = -1, then a workspace query is assumed;
               the routine only calculates the  optimal  size  of
               the  WORK  array,  returns this value as the first
               entry of the WORK  array,  and  no  error  message
               related to LWORK is issued by XERBLA.

               =0:  successful exit.
               <0:   if INFO = -i, the i-th argument had an ille­
               gal value.
               =1:  The transformed matrix pair (A, B)  would  be
               too  far  from generalized Schur form; the problem
               is ill- conditioned. (A, B)  may  have  been  par­
               tially reordered, and ILST points to the first row
               of the current position of the block being  moved.


FURTHER DETAILS

       Based on contributions by
          Bo  Kagstrom and Peter Poromaa, Department of Computing
       Science,
          Umea University, S-901 87 Umea, Sweden.

       [1] B. Kagstrom; A Direct Method for Reordering  Eigenval­
       ues in the
           Generalized  Real  Schur Form of a Regular Matrix Pair
       (A, B), in
           M.S. Moonen et al  (eds),  Linear  Algebra  for  Large
       Scale and
           Real-Time Applications, Kluwer Academic Publ. 1993, pp
       195-218.


Man(1) output converted with man2html