ZGEES(3)              LAPACK driver routine (version 3.1)             ZGEES(3)



NAME
       ZGEES  -  for an N-by-N complex nonsymmetric matrix A, the eigenvalues,
       the Schur form T, and, optionally, the matrix of Schur vectors Z

SYNOPSIS
       SUBROUTINE ZGEES( JOBVS, SORT, SELECT, N, A, LDA, SDIM,  W,  VS,  LDVS,
                         WORK, LWORK, RWORK, BWORK, INFO )

           CHARACTER     JOBVS, SORT

           INTEGER       INFO, LDA, LDVS, LWORK, N, SDIM

           LOGICAL       BWORK( * )

           DOUBLE        PRECISION RWORK( * )

           COMPLEX*16    A( LDA, * ), VS( LDVS, * ), W( * ), WORK( * )

           LOGICAL       SELECT

           EXTERNAL      SELECT

PURPOSE
       ZGEES  computes for an N-by-N complex nonsymmetric matrix A, the eigen-
       values, the Schur form T, and, optionally, the matrix of Schur  vectors
       Z.  This gives the Schur factorization A = Z*T*(Z**H).

       Optionally, it also orders the eigenvalues on the diagonal of the Schur
       form so that selected eigenvalues are at the  top  left.   The  leading
       columns  of Z then form an orthonormal basis for the invariant subspace
       corresponding to the selected eigenvalues.

       A complex matrix is in Schur form if it is upper triangular.


ARGUMENTS
       JOBVS   (input) CHARACTER*1
               = 'N': Schur vectors are not computed;
               = 'V': Schur vectors are computed.

       SORT    (input) CHARACTER*1
               Specifies whether or not to order the eigenvalues on the diago-
               nal of the Schur form.  = 'N': Eigenvalues are not ordered:
               = 'S': Eigenvalues are ordered (see SELECT).

       SELECT   (external  procedure) LOGICAL FUNCTION of one COMPLEX*16 argu-
       ment
               SELECT must be declared EXTERNAL in the calling subroutine.  If
               SORT = 'S', SELECT is used to select eigenvalues  to  order  to
               the  top  left of the Schur form.  IF SORT = 'N', SELECT is not
               referenced.  The eigenvalue W(j) is selected if SELECT(W(j)) is
               true.

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

       A       (input/output) COMPLEX*16 array, dimension (LDA,N)
               On entry, the N-by-N matrix A.  On exit, A has been overwritten
               by its Schur form T.

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

       SDIM    (output) INTEGER
               If SORT = 'N', SDIM = 0.  If SORT  =  'S',  SDIM  =  number  of
               eigenvalues for which SELECT is true.

       W       (output) COMPLEX*16 array, dimension (N)
               W  contains  the  computed  eigenvalues, in the same order that
               they appear on the diagonal of the output Schur form T.

       VS      (output) COMPLEX*16 array, dimension (LDVS,N)
               If JOBVS = 'V', VS contains the unitary matrix Z of Schur  vec-
               tors.  If JOBVS = 'N', VS is not referenced.

       LDVS    (input) INTEGER
               The  leading  dimension of the array VS.  LDVS >= 1; if JOBVS =
               'V', LDVS >= N.

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

       LWORK   (input) INTEGER
               The dimension of the array WORK.   LWORK  >=  max(1,2*N).   For
               good performance, LWORK must generally be larger.

               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.

       RWORK   (workspace) DOUBLE PRECISION array, dimension (N)

       BWORK   (workspace) LOGICAL array, dimension (N)
               Not referenced if SORT = 'N'.

       INFO    (output) INTEGER
               = 0: successful exit
               < 0: if INFO = -i, the i-th argument had an illegal value.
               > 0: if INFO = i, and i is
               <= N:  the QR algorithm failed to compute all the
               eigenvalues; elements 1:ILO-1 and  i+1:N  of  W  contain  those
               eigenvalues  which  have converged; if JOBVS = 'V', VS contains
               the matrix which reduces A to  its  partially  converged  Schur
               form.   =  N+1:  the eigenvalues could not be reordered because
               some eigenvalues were too close to  separate  (the  problem  is
               very   ill-conditioned);  =  N+2:  after  reordering,  roundoff
               changed values of some  complex  eigenvalues  so  that  leading
               eigenvalues  in  the  Schur  form  no  longer  satisfy SELECT =
               .TRUE..  This could also be caused by underflow due to scaling.



 LAPACK driver routine (version 3.N1o)vember 2006                        ZGEES(3)