DSTEDC  -  compute all eigenvalues and, optionally, eigen­
       vectors of a symmetric tridiagonal matrix using the divide
       and conquer method


SYNOPSIS

       SUBROUTINE DSTEDC( COMPZ,  N,  D,  E, Z, LDZ, WORK, LWORK,
                          IWORK, LIWORK, INFO )

           CHARACTER      COMPZ

           INTEGER        INFO, LDZ, LIWORK, LWORK, N

           INTEGER        IWORK( * )

           DOUBLE         PRECISION D( * ), E( * ), WORK( * ), Z(
                          LDZ, * )


PURPOSE

       DSTEDC computes all eigenvalues and, optionally, eigenvec­
       tors of a symmetric tridiagonal matrix  using  the  divide
       and  conquer  method.  The  eigenvectors of a full or band
       real symmetric matrix can also be found if DSYTRD or  DSP­
       TRD  or  DSBTRD  has  been  used  to reduce this matrix to
       tridiagonal form.

       This code makes very mild assumptions about floating point
       arithmetic. It will work on machines with a guard digit in
       add/subtract, or on those binary  machines  without  guard
       digits  which subtract like the Cray X-MP, Cray Y-MP, Cray
       C-90, or Cray-2.  It could conceivably fail on hexadecimal
       or  decimal  machines without guard digits, but we know of
       none.  See DLAED3 for details.


ARGUMENTS

       COMPZ   (input) CHARACTER*1
               = 'N':  Compute eigenvalues only.
               = 'I':  Compute eigenvectors of tridiagonal matrix
               also.
               =  'V':   Compute  eigenvectors  of original dense
               symmetric matrix also.  On entry, Z  contains  the
               orthogonal  matrix  used  to  reduce  the original
               matrix to tridiagonal form.

       N       (input) INTEGER
               The dimension of the symmetric tridiagonal matrix.
               N >= 0.

       D       (input/output) DOUBLE PRECISION array, dimension
               (N)
               On entry, the diagonal elements of the tridiagonal
               matrix.   On exit, if INFO = 0, the eigenvalues in
               ascending order.

               (N-1)
               On entry, the subdiagonal elements of the tridiag­
               onal matrix.  On exit, E has been destroyed.

       Z       (input/output) DOUBLE PRECISION array, dimension
               (LDZ,N)
               On  entry,  if  COMPZ  =  'V', then Z contains the
               orthogonal matrix used in the reduction to  tridi­
               agonal  form.  On exit, if INFO = 0, then if COMPZ
               = 'V', Z contains the orthonormal eigenvectors  of
               the original symmetric matrix, and if COMPZ = 'I',
               Z contains the  orthonormal  eigenvectors  of  the
               symmetric  tridiagonal  matrix.   If  COMPZ = 'N',
               then Z is not referenced.

       LDZ     (input) INTEGER
               The leading dimension of the array Z.  LDZ  >=  1.
               If eigenvectors are desired, then LDZ >= max(1,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.  If COMPZ = 'N'
               or N <= 1 then LWORK must be at least 1.  If COMPZ
               =  'V' and N > 1 then LWORK must be at least ( 1 +
               3*N + 2*N*lg N + 3*N**2 ), where lg( N ) =  small­
               est integer k such that 2**k >= N.  If COMPZ = 'I'
               and N > 1 then LWORK must be at least ( 1 + 4*N  +
               N**2 ).

               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.

       IWORK   (workspace/output) INTEGER array, dimension
               (LIWORK)
               On exit, if INFO = 0, IWORK(1) returns the optimal
               LIWORK.

       LIWORK  (input) INTEGER
               The  dimension of the array IWORK.  If COMPZ = 'N'
               or N <= 1 then LIWORK must  be  at  least  1.   If
               COMPZ = 'V' and N > 1 then LIWORK must be at least
               ( 6 + 6*N + 5*N*lg N ).  If COMPZ = 'I' and N >  1
               then LIWORK must be at least ( 3 + 5*N ).

               If LIWORK = -1, then a workspace query is assumed;
               the routine only calculates the  optimal  size  of
               the  IWORK  array, returns this value as the first

               related to LIWORK is issued by XERBLA.

       INFO    (output) INTEGER
               = 0:  successful exit.
               < 0:  if INFO = -i, the i-th argument had an ille­
               gal value.
               > 0:  The algorithm failed to  compute  an  eigen­
               value while working on the submatrix lying in rows
               and columns INFO/(N+1) through mod(INFO,N+1).


FURTHER DETAILS

       Based on contributions by
          Jeff Rutter, Computer Science Division,  University  of
       California
          at Berkeley, USA
       Modified by Francoise Tisseur, University of Tennessee.


Man(1) output converted with man2html