SLASDA  -  a  divide and conquer approach, SLASDA computes
       the singular value decomposition (SVD)  of  a  real  upper
       bidiagonal N-by-M matrix B with diagonal D and offdiagonal
       E, where M = N + SQRE


SYNOPSIS

       SUBROUTINE SLASDA( ICOMPQ, SMLSIZ, N, SQRE, D, E, U,  LDU,
                          VT,  K,  DIFL,  DIFR, Z, POLES, GIVPTR,
                          GIVCOL, LDGCOL,  PERM,  GIVNUM,  C,  S,
                          WORK, IWORK, INFO )

           INTEGER        ICOMPQ,  INFO,  LDGCOL, LDU, N, SMLSIZ,
                          SQRE

           INTEGER        GIVCOL(  LDGCOL,  *  ),  GIVPTR(  *  ),
                          IWORK( * ), K( * ), PERM( LDGCOL, * )

           REAL           C(  *  ), D( * ), DIFL( LDU, * ), DIFR(
                          LDU, * ), E( * ),  GIVNUM(  LDU,  *  ),
                          POLES(  LDU,  * ), S( * ), U( LDU, * ),
                          VT( LDU, * ), WORK( * ), Z( LDU, * )


PURPOSE

       Using a divide and conquer approach, SLASDA  computes  the
       singular value decomposition (SVD) of a real upper bidiag­
       onal N-by-M matrix B with diagonal D  and  offdiagonal  E,
       where  M  =  N + SQRE. The algorithm computes the singular
       values in the SVD B = U * S * VT.  The orthogonal matrices
       U and VT are optionally computed in compact form.

       A related subroutine, SLASD0, computes the singular values
       and the singular vectors in explicit form.


ARGUMENTS

       ICOMPQ (input) INTEGER Specifies whether singular  vectors
       are  to  be computed in compact form, as follows = 0: Com­
       pute singular values only.
       = 1: Compute singular vectors of upper  bidiagonal  matrix
       in compact form.

       SMLSIZ (input) INTEGER The maximum size of the subproblems
       at the bottom of the computation tree.

       N      (input) INTEGER
              The row dimension of the upper  bidiagonal  matrix.
              This  is  also  the  dimension of the main diagonal
              array D.

       SQRE   (input) INTEGER
              Specifies the column dimension  of  the  bidiagonal
              matrix.   =  0:  The  bidiagonal  matrix has column
              dimension M = N;

              N + 1.

       D      (input/output) REAL array, dimension ( N )
              On  entry D contains the main diagonal of the bidi­
              agonal matrix. On exit D, if INFO = 0, contains its
              singular values.

       E      (input) REAL array, dimension ( M-1 )
              Contains  the subdiagonal entries of the bidiagonal
              matrix.  On exit, E has been destroyed.

       U      (output) REAL array,
              dimension ( LDU, SMLSIZ ) if ICOMPQ =  1,  and  not
              referenced if ICOMPQ = 0. If ICOMPQ = 1, on exit, U
              contains the left singular vector matrices  of  all
              subproblems at the bottom level.

       LDU    (input) INTEGER, LDU = > N.
              The  leading dimension of arrays U, VT, DIFL, DIFR,
              POLES, GIVNUM, and Z.

       VT     (output) REAL array,
              dimension ( LDU, SMLSIZ+1 ) if ICOMPQ = 1, and  not
              referenced  if  ICOMPQ = 0. If ICOMPQ = 1, on exit,
              VT' contains the right singular vector matrices  of
              all subproblems at the bottom level.

       K      (output) INTEGER array,
              dimension  (  N  ) if ICOMPQ = 1 and dimension 1 if
              ICOMPQ = 0.  If ICOMPQ = 1, on exit,  K(I)  is  the
              dimension  of the I-th secular equation on the com­
              putation tree.

       DIFL   (output) REAL array, dimension ( LDU, NLVL ),
              where NLVL = floor(log_2 (N/SMLSIZ))).

       DIFR   (output) REAL array,
              dimension ( LDU, 2 * NLVL  )  if  ICOMPQ  =  1  and
              dimension  (  N ) if ICOMPQ = 0.  If ICOMPQ = 1, on
              exit, DIFL(1:N, I) and DIFR(1:N, 2 * I - 1)  record
              distances between singular values on the I-th level
              and singular values on the  (I  -1)-th  level,  and
              DIFR(1:N,  2 * I ) contains the normalizing factors
              for the right singular vector  matrix.  See  SLASD8
              for details.

       Z      (output) REAL array,
              dimension ( LDU, NLVL ) if ICOMPQ = 1 and dimension
              ( N ) if ICOMPQ = 0.  The first K elements of  Z(1,
              I) contain the components of the deflation-adjusted
              updating row vector for  subproblems  on  the  I-th
              level.

              dimension  ( LDU, 2 * NLVL ) if ICOMPQ = 1, and not
              referenced if ICOMPQ = 0. If ICOMPQ = 1,  on  exit,
              POLES(1,  2*I  -  1) and POLES(1, 2*I) contain  the
              new and old singular values involved in the secular
              equations on the I-th level.

              GIVPTR  (output)  INTEGER array, dimension ( N ) if
              ICOMPQ = 1, and not referenced if ICOMPQ  =  0.  If
              ICOMPQ = 1, on exit, GIVPTR( I ) records the number
              of Givens rotations performed on the  I-th  problem
              on the computation tree.

              GIVCOL  (output) INTEGER array, dimension ( LDGCOL,
              2 * NLVL ) if ICOMPQ = 1,  and  not  referenced  if
              ICOMPQ  =  0.  If  ICOMPQ = 1, on exit, for each I,
              GIVCOL(1, 2 *I - 1) and GIVCOL(1, 2 *I) record  the
              locations of Givens rotations performed on the I-th
              level on the computation tree.

              LDGCOL (input) INTEGER, LDGCOL = > N.  The  leading
              dimension of arrays GIVCOL and PERM.

       PERM   (output) INTEGER array,
              dimension  (  LDGCOL, NLVL ) if ICOMPQ = 1, and not
              referenced if ICOMPQ = 0. If ICOMPQ = 1,  on  exit,
              PERM(1,  I)  records  permutations done on the I-th
              level of the computation tree.

              GIVNUM (output) REAL array, dimension ( LDU,   2  *
              NLVL  ) if ICOMPQ = 1, and not referenced if ICOMPQ
              = 0. If ICOMPQ = 1, on exit, for each I,  GIVNUM(1,
              2  *I - 1) and GIVNUM(1, 2 *I) record the C- and S-
              values of Givens rotations performed  on  the  I-th
              level on the computation tree.

       C      (output) REAL array,
              dimension  (  N ) if ICOMPQ = 1, and dimension 1 if
              ICOMPQ = 0.  If ICOMPQ = 1 and the I-th  subproblem
              is not square, on exit, C( I ) contains the C-value
              of a Givens rotation  related  to  the  right  null
              space of the I-th subproblem.

       S      (output) REAL array, dimension ( N ) if
              ICOMPQ  =  1,  and  dimension  1  if ICOMPQ = 0. If
              ICOMPQ = 1 and the I-th subproblem is  not  square,
              on  exit,  S(  I ) contains the S-value of a Givens
              rotation related to the right null space of the  I-
              th subproblem.

       WORK   (workspace) REAL array, dimension
              (6 * N + (SMLSIZ + 1)*(SMLSIZ + 1)).

              Dimension must be at least (7 * N).

       INFO   (output) INTEGER
              = 0:  successful exit.
              <  0:  if INFO = -i, the i-th argument had an ille­
              gal value.
              > 0:  if INFO = 1, an singular value did  not  con­
              verge


FURTHER DETAILS

       Based on contributions by
          Ming  Gu  and Huan Ren, Computer Science Division, Uni­
       versity of
          California at Berkeley, USA


Man(1) output converted with man2html