DLASD2  -  merge  the two sets of singular values together
       into a single sorted set


SYNOPSIS

       SUBROUTINE DLASD2( NL, NR, SQRE, K, D, Z, ALPHA, BETA,  U,
                          LDU,  VT,  LDVT, DSIGMA, U2, LDU2, VT2,
                          LDVT2, IDXP, IDX, IDXC,  IDXQ,  COLTYP,
                          INFO )

           INTEGER        INFO,  K,  LDU,  LDU2, LDVT, LDVT2, NL,
                          NR, SQRE

           DOUBLE         PRECISION ALPHA, BETA

           INTEGER        COLTYP( * ), IDX( * ), IDXC( * ), IDXP(
                          * ), IDXQ( * )

           DOUBLE         PRECISION  D( * ), DSIGMA( * ), U( LDU,
                          * ), U2( LDU2, * ), VT( LDVT, * ), VT2(
                          LDVT2, * ), Z( * )


PURPOSE

       DLASD2  merges  the  two  sets of singular values together
       into a single sorted set. Then it  tries  to  deflate  the
       size of the problem. There are two ways in which deflation
       can occur:  when two or more  singular  values  are  close
       together or if there is a tiny entry in the Z vector.  For
       each such occurrence the  order  of  the  related  secular
       equation problem is reduced by one.

       DLASD2 is called from DLASD1.


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 N = NL + NR + 1 rows and
              M = N + SQRE >= N columns.

       K      (output) INTEGER
              Contains the dimension of the non-deflated  matrix,
              This  is the order of the related secular equation.
              1 <= K <=N.

              On  entry D contains the singular values of the two
              submatrices to be combined.  On exit D contains the
              trailing (N-K) updated singular values (those which
              were deflated) sorted into increasing order.

       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  contains the left singular vectors of
              two submatrices in the two square blocks with  cor­
              ners  at  (1,1), (NL, NL), and (NL+2, NL+2), (N,N).
              On exit U contains the trailing (N-K) updated  left
              singular vectors (those which were deflated) in its
              last N-K columns.

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

       Z      (output) DOUBLE PRECISION array, dimension(N)
              On exit Z contains the updating row vector  in  the
              secular equation.

              DSIGMA  (output)  DOUBLE PRECISION array, dimension
              (N) Contains a copy of the diagonal  elements  (K-1
              singular  values and one zero) in the secular equa­
              tion.

       U2     (output) DOUBLE PRECISION array, dimension(LDU2,N)
              Contains a copy of the first K-1 left singular vec­
              tors  which will be used by DLASD3 in a matrix mul­
              tiply (DGEMM) to solve for the  new  left  singular
              vectors. U2 is arranged into four blocks. The first
              block contains a column with 1  at  NL+1  and  zero
              everywhere else; the second block contains non-zero
              entries only at and above NL;  the  third  contains
              non-zero entries only below NL+1; and the fourth is
              dense.

       LDU2   (input) INTEGER
              The leading dimension of the array U2.  LDU2 >=  N.

       VT     (input/output) DOUBLE PRECISION array, dimen­
              sion(LDVT,M)
              On entry VT' contains the right singular vectors of
              two  submatrices in the two square blocks with cor­
              ners at (1,1),  (NL+1,  NL+1),  and  (NL+2,  NL+2),

              updated right singular vectors  (those  which  were
              deflated)  in  its  last N-K columns.  In case SQRE
              =1, the last row of VT spans the right null  space.

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

       VT2    (output) DOUBLE PRECISION array, dimension(LDVT2,N)
              VT2'  contains a copy of the first K right singular
              vectors which will be used by DLASD3  in  a  matrix
              multiply  (DGEMM) to solve for the new right singu­
              lar vectors. VT2 is arranged into three blocks. The
              first  block contains a row that corresponds to the
              special 0 diagonal element  in  SIGMA;  the  second
              block  contains non-zeros only at and before NL +1;
              the third block  contains  non-zeros  only  at  and
              after  NL +2.

       LDVT2  (input) INTEGER
              The  leading  dimension of the array VT2.  LDVT2 >=
              M.

       IDXP   (workspace) INTEGER array, dimension(N)
              This will contain the  permutation  used  to  place
              deflated  values  of  D at the end of the array. On
              output IDXP(2:K)
              points to the nondeflated D-values and  IDXP(K+1:N)
              points to the deflated singular values.

       IDX    (workspace) INTEGER array, dimension(N)
              This  will contain the permutation used to sort the
              contents of D into ascending order.

       IDXC   (output) INTEGER array, dimension(N)
              This will contain the permutation used  to  arrange
              the  columns  of  the  deflated U matrix into three
              groups:  the first group contains non-zero  entries
              only  at and above NL, the second contains non-zero
              entries only below NL+2, and the third is dense.

              COLTYP  (workspace/output)  INTEGER  array,  dimen­
              sion(N)  As  workspace,  this  will contain a label
              which will indicate which of the following types  a
              column  in the U2 matrix or a row in the VT2 matrix
              is:
              1 : non-zero in the upper half only
              2 : non-zero in the lower half only
              3 : dense
              4 : deflated

              On exit, it  is  an  array  of  dimension  4,  with
              COLTYP(I)  being  the  dimension  of  the I-th type
              columns.

              This  contains  the  permutation  which  separately
              sorts  the  two  sub-problems  in  D into ascending
              order.  Note that entries in the first hlaf of this
              permutation  must first be moved one position back­
              ward; and entries in the  second  half  must  first
              have NL+1 added to their values.

       INFO   (output) INTEGER
              = 0:  successful exit.
              <  0:  if INFO = -i, the i-th argument had an ille­
              gal value.


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