SLARRE  -  the  tridiagonal  matrix T, SLARRE sets "small"
       off-diagonal elements to  zero,  and  for  each  unreduced
       block  T_i, it finds (i) the numbers sigma_i (ii) the base
       T_i - sigma_i I = L_i D_i L_i^T representations and  (iii)
       eigenvalues of each L_i D_i L_i^T


SYNOPSIS

       SUBROUTINE SLARRE( N,  D,  E,  TOL,  NSPLIT, ISPLIT, M, W,
                          WOFF, GERSCH, WORK, INFO )

           INTEGER        INFO, M, N, NSPLIT

           REAL           TOL

           INTEGER        ISPLIT( * )

           REAL           D( * ), E( * ), GERSCH( * ),  W(  *  ),
                          WOFF( * ), WORK( * )


PURPOSE

       Given  the  tridiagonal matrix T, SLARRE sets "small" off-
       diagonal elements to zero, and for  each  unreduced  block
       T_i,  it finds (i) the numbers sigma_i (ii) the base T_i -
       sigma_i I = L_i D_i L_i^T representations and (iii) eigen­
       values  of  each  L_i  D_i  L_i^T. The representations and
       eigenvalues found are then used by SSTEGR to  compute  the
       eigenvectors of a symmetric tridiagonal matrix. Currently,
       the base representations are limited to being positive  or
       negative  definite,  and  the  eigenvalues of the definite
       matrices are  found  by  the  dqds  algorithm  (subroutine
       SLASQ2).  As  an  added benefit, SLARRE also outputs the n
       Gerschgorin
       intervals for each L_i D_i L_i^T.


ARGUMENTS

       N       (input) INTEGER
               The order of the matrix.

       D       (input/output) REAL array, dimension (N)
               On entry, the n diagonal elements of the tridiago­
               nal matrix T.  On exit, the n diagonal elements of
               the diagonal matrices D_i.

       E       (input/output) REAL array, dimension (N)
               On entry, the (n-1) subdiagonal  elements  of  the
               tridiagonal  matrix  T;  E(N) need not be set.  On
               exit, the subdiagonal elements of the unit bidiag­
               onal matrices L_i.

       TOL     (input) REAL
               The  threshold for splitting. If on input |E(i)| <
               TOL, then the  matrix  T  is  split  into  smaller


       NSPLIT  (input) INTEGER
               The number of blocks T splits into. 1 <= NSPLIT <=
               N.

       ISPLIT  (output) INTEGER array, dimension (2*N)
               The splitting points, at which T  breaks  up  into
               submatrices.   The  first  submatrix  consists  of
               rows/columns  1  to  ISPLIT(1),  the   second   of
               rows/columns  ISPLIT(1)+1 through ISPLIT(2), etc.,
               and  the  NSPLIT-th   consists   of   rows/columns
               ISPLIT(NSPLIT-1)+1 through ISPLIT(NSPLIT)=N.

       M       (output) INTEGER
               The  total  number  of eigenvalues (of all the L_i
               D_i L_i^T) found.

       W       (output) REAL array, dimension (N)
               The first M elements contain the eigenvalues.  The
               eigenvalues  of each of the blocks, L_i D_i L_i^T,
               are sorted in ascending order.

       WOFF    (output) REAL array, dimension (N)
               The NSPLIT base points sigma_i.

       GERSCH  (output) REAL array, dimension (2*N)
               The n Gerschgorin intervals.

       WORK    (input) REAL array, dimension (4*N???)
               Workspace.

       INFO    (output) INTEGER
               Output error code from SLASQ2


FURTHER DETAILS

       Based on contributions by
          Inderjit Dhillon, IBM Almaden, USA
          Osni Marques, LBNL/NERSC, USA


Man(1) output converted with man2html