DLASD1  -  compute  the  SVD of an upper bidiagonal N-by-M
       matrix B,


SYNOPSIS

       SUBROUTINE DLASD1( NL, NR, SQRE, D, ALPHA, BETA,  U,  LDU,
                          VT, LDVT, IDXQ, IWORK, WORK, INFO )

           INTEGER        INFO, LDU, LDVT, NL, NR, SQRE

           DOUBLE         PRECISION ALPHA, BETA

           INTEGER        IDXQ( * ), IWORK( * )

           DOUBLE         PRECISION  D(  *  ),  U(  LDU, * ), VT(
                          LDVT, * ), WORK( * )


PURPOSE

       DLASD1 computes the SVD  of  an  upper  bidiagonal  N-by-M
       matrix  B,  where N = NL + NR + 1 and M = N + SQRE. DLASD1
       is called from DLASD0.

       A related subroutine DLASD7 handles the case in which  the
       singular  values  (and  the  singular  vectors in factored
       form) are desired.

       DLASD1 computes the SVD as follows:

                     ( D1(in)  0    0     0 )
         B = U(in) * (   Z1'   a   Z2'    b ) * VT(in)
                     (   0     0   D2(in) 0 )

           = U(out) * ( D(out) 0) * VT(out)

       where Z' = (Z1' a Z2' b) = u' VT', and u is  a  vector  of
       dimension  M  with  ALPHA and BETA in the NL+1 and NL+2 th
       entries and zeros elsewhere; and the entry b is  empty  if
       SQRE = 0.

       The  left  singular  vectors  of  the  original matrix are
       stored in U, and the transpose of the right singular  vec­
       tors  are  stored in VT, and the singular values are in D.
       The algorithm consists of three stages:

          The first stage consists of deflating the size  of  the
       problem
          when  there  are multiple singular values or when there
       are zeros in
          the Z vector.  For each such occurence the dimension of
       the
          secular equation problem is reduced by one.  This stage
       is
          performed by the routine DLASD2.

          singular values. This is done  by  finding  the  square
       roots of the
          roots  of  the  secular equation via the routine DLASD4
       (as called
          by DLASD3). This routine also calculates  the  singular
       vectors of
          the current problem.

          The  final stage consists of computing the updated sin­
       gular vectors
          directly using the updated singular values.  The singu­
       lar vectors
          for  the current problem are multiplied with the singu­
       lar vectors
          from the overall problem.


ARGUMENTS

       NL     (input) INTEGER
              The row dimension of the upper block.  NL >= 1.

       NR     (input) INTEGER
              The row dimension of the lower block.  NR >= 1.

       SQRE   (input) INTEGER
              = 0: the lower block is an NR-by-NR square  matrix.
              = 1: the lower block is an NR-by-(NR+1) rectangular
              matrix.

              The bidiagonal matrix has row dimension N = NL + NR
              + 1, and column dimension M = N + SQRE.

       D      (input/output) DOUBLE PRECISION array,
              dimension  (N  =  NL+NR+1).   On entry D(1:NL,1:NL)
              contains the singular values of the
              upper block; and D(NL+2:N)  contains  the  singular
              values of
              the lower block. On exit D(1:N) contains the singu­
              lar values of the modified matrix.

       ALPHA  (input) DOUBLE PRECISION
              Contains the diagonal element associated  with  the
              added row.

       BETA   (input) DOUBLE PRECISION
              Contains  the  off-diagonal element associated with
              the added row.

       U      (input/output) DOUBLE PRECISION array, dimen­
              sion(LDU,N)
              On  entry  U(1:NL, 1:NL) contains the left singular
              vectors of
              the upper block;  U(NL+2:N,  NL+2:N)  contains  the

              contains the left singular vectors of the  bidiago­
              nal matrix.

       LDU    (input) INTEGER
              The  leading dimension of the array U.  LDU >= max(
              1, N ).

       VT     (input/output) DOUBLE PRECISION array, dimen­
              sion(LDVT,M)
              where  M  = N + SQRE.  On entry VT(1:NL+1, 1:NL+1)'
              contains the right singular
              vectors of the  upper  block;  VT(NL+2:M,  NL+2:M)'
              contains  the  right  singular vectors of the lower
              block. On exit VT' contains the right singular vec­
              tors of the bidiagonal matrix.

       LDVT   (input) INTEGER
              The  leading  dimension  of  the array VT.  LDVT >=
              max( 1, M ).

       IDXQ  (output) INTEGER array, dimension(N)
             This contains the permutation which will reintegrate
             the  subproblem  just solved back into sorted order,
             i.e.  D( IDXQ( I = 1, N ) )  will  be  in  ascending
             order.

       IWORK  (workspace) INTEGER array, dimension( 4 * N )

       WORK    (workspace)  DOUBLE  PRECISION array, dimension(
              3*M**2 + 2*M )

       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