CTGEX2  -  swap  adjacent diagonal 1 by 1 blocks (A11,B11)
       and (A22,B22)


SYNOPSIS

       SUBROUTINE CTGEX2( WANTQ, WANTZ, N, A,  LDA,  B,  LDB,  Q,
                          LDQ, Z, LDZ, J1, INFO )

           LOGICAL        WANTQ, WANTZ

           INTEGER        INFO, J1, LDA, LDB, LDQ, LDZ, N

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


PURPOSE

       CTGEX2 swaps adjacent diagonal 1 by 1 blocks (A11,B11) and
       (A22,B22)  in an upper triangular matrix pair (A, B) by an
       unitary equivalence transformation.

       (A, B) must be in generalized Schur canonical  form,  that
       is, A and B are both upper triangular.

       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) COMPLEX arrays, dimensions (LDA,N)
               On entry, the matrix A in the  pair  (A,  B).   On
               exit, the updated matrix A.

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

       B       (input/output) COMPLEX arrays, dimensions (LDB,N)
               On entry, the matrix B in the  pair  (A,  B).   On
               exit, the updated matrix B.

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

               If WANTQ = .TRUE, on entry, the unitary matrix  Q.
               On  exit, the updated matrix Q.  Not referenced if
               WANTQ = .FALSE..

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

       Z       (input/output) COMPLEX array, dimension (LDZ,N)
               If  WANTZ = .TRUE, on entry, the unitary matrix Z.
               On exit, the updated matrix Z.  Not referenced  if
               WANTZ = .FALSE..

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

       J1      (input) INTEGER
               The index to the first block (A11, B11).

       INFO    (output) INTEGER
               =0:  Successful exit.
               =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.

       In the current code both weak and strong  stability  tests
       are performed. The user can omit the strong stability test
       by  changing  the  internal  logical  parameter  WANDS  to
       .FALSE.. See ref. [2] for details.

       [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.

       [2] B. Kagstrom and P. Poromaa; Computing Eigenspaces with
       Specified
           Eigenvalues of a Regular Matrix Pair (A, B) and Condi­
       tion
           Estimation:  Theory,  Algorithms  and Software, Report

           Department  of  Computing  Science,  Umea  University,
       S-901 87 Umea,
           Sweden,  1994.  Also  as  LAPACK  Working  Note 87. To
       appear in
           Numerical Algorithms, 1996.


Man(1) output converted with man2html