DSTEVD  -  compute all eigenvalues and, optionally, eigen­
       vectors of a real symmetric tridiagonal matrix


SYNOPSIS

       SUBROUTINE DSTEVD( JOBZ, N, D, E,  Z,  LDZ,  WORK,  LWORK,
                          IWORK, LIWORK, INFO )

           CHARACTER      JOBZ

           INTEGER        INFO, LDZ, LIWORK, LWORK, N

           INTEGER        IWORK( * )

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


PURPOSE

       DSTEVD computes all eigenvalues and, optionally, eigenvec­
       tors  of a real symmetric tridiagonal matrix. If eigenvec­
       tors are desired, it uses a divide and conquer  algorithm.

       The  divide  and conquer algorithm makes very mild assump­
       tions 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  with­
       out guard digits, but we know of none.


ARGUMENTS

       JOBZ    (input) CHARACTER*1
               = 'N':  Compute eigenvalues only;
               = 'V':  Compute eigenvalues and eigenvectors.

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

       D       (input/output) DOUBLE PRECISION array, dimension
               (N)
               On entry, the n diagonal elements of the tridiago­
               nal matrix A.  On exit, if INFO = 0, the eigenval­
               ues in ascending order.

       E       (input/output) DOUBLE PRECISION array, dimension
               (N)
               On  entry,  the  (n-1) subdiagonal elements of the
               tridiagonal matrix A, stored in elements 1 to  N-1
               of  E;  E(N)  need  not be set, but is used by the
               routine.   On  exit,  the  contents   of   E   are
               destroyed.

               N)
               If JOBZ = 'V', then if INFO = 0,  Z  contains  the
               orthonormal eigenvectors of the matrix A, with the
               i-th column of Z holding the  eigenvector  associ­
               ated with D(i).  If JOBZ = 'N', then Z is not ref­
               erenced.

       LDZ     (input) INTEGER
               The leading dimension of the array Z.  LDZ  >=  1,
               and if JOBZ = 'V', 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 JOBZ   =  'N'
               or  N <= 1 then LWORK must be at least 1.  If JOBZ
               = 'V' 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 JOBZ  = 'N'
               or N <= 1 then LIWORK must be at least 1.  If JOBZ
               =  'V'  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
               entry  of  the  IWORK  array, and no error message
               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:   if  INFO = i, the algorithm failed to con­
               verge; i off-diagonal elements of E did  not  con­
               verge to zero.


Man(1) output converted with man2html