DTGEXC  - 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 DTGEXC( 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

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


PURPOSE

       DTGEXC  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 DGGES), 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) DOUBLE PRECISION 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  >=


       B       (input/output) DOUBLE PRECISION array, dimension
               (LDB,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) DOUBLE PRECISION 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) DOUBLE PRECISION 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)  DOUBLE  PRECISION  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.

               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.

       INFO    (output) INTEGER
               =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