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


SYNOPSIS

       SUBROUTINE SLASD2( 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

           REAL           ALPHA, BETA

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

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


PURPOSE

       SLASD2  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.

       SLASD2 is called from SLASD1.


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) REAL
              Contains  the  diagonal element associated with the
              added row.

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

       U      (input/output) REAL array, dimension(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) REAL array, dimension(N)
              On exit Z contains the updating row vector  in  the
              secular equation.

              DSIGMA  (output) REAL array, dimension (N) Contains
              a copy of the diagonal elements (K-1 singular  val­
              ues and one zero) in the secular equation.

       U2     (output) REAL array, dimension(LDU2,N)
              Contains a copy of the first K-1 left singular vec­
              tors which will be used by SLASD3 in a matrix  mul­
              tiply  (SGEMM)  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) REAL array, dimension(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),
              (M,M).   On  exit  VT'  contains the trailing (N-K)
              updated right singular vectors  (those  which  were
              deflated)  in  its  last N-K columns.  In case SQRE


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

       VT2    (output) REAL array, dimension(LDVT2,N)
              VT2' contains a copy of the first K right  singular
              vectors  which  will  be used by SLASD3 in a matrix
              multiply (SGEMM) 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.

       IDXQ   (input) INTEGER array, dimension(N)
              This  contains  the  permutation  which  separately

              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