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


SYNOPSIS

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

           CHARACTER      JOBZ

           INTEGER        INFO, LDZ, LIWORK, LWORK, N

           INTEGER        IWORK( * )

           REAL           D( * ), E( * ), WORK( * ), Z( LDZ, * )


PURPOSE

       SSTEVD 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) REAL 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) REAL 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.

       Z       (output) REAL array, dimension (LDZ, 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

               not referenced.

       LDZ     (input) INTEGER
               The leading dimension of the array Z.  LDZ  >=  1,
               and if JOBZ = 'V', LDZ >= max(1,N).

       WORK    (workspace/output) REAL 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