DLARRE  -  the  tridiagonal  matrix T, DLARRE 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 DLARRE( N,  D,  E,  TOL,  NSPLIT, ISPLIT, M, W,
                          WOFF, GERSCH, WORK, INFO )

           INTEGER        INFO, M, N, NSPLIT

           DOUBLE         PRECISION TOL

           INTEGER        ISPLIT( * )

           DOUBLE         PRECISION D( * ), E( * ), GERSCH( *  ),
                          W( * ), WOFF( * ), WORK( * )


PURPOSE

       Given  the  tridiagonal matrix T, DLARRE 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 DSTEGR 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
       DLASQ2).  As  an  added benefit, DLARRE 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) DOUBLE PRECISION 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) DOUBLE PRECISION 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.

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

       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) DOUBLE PRECISION 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) DOUBLE PRECISION array, dimension (N)
               The NSPLIT base points sigma_i.

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

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

       INFO    (output) INTEGER
               Output error code from DLASQ2


FURTHER DETAILS

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


Man(1) output converted with man2html