SLASD6  -  compute  the SVD of an updated upper bidiagonal
       matrix B obtained by merging two smaller ones by appending
       a row


SYNOPSIS

       SUBROUTINE SLASD6( ICOMPQ, NL, NR, SQRE, D, VF, VL, ALPHA,
                          BETA, IDXQ, PERM, GIVPTR, GIVCOL,  LDG­
                          COL, GIVNUM, LDGNUM, POLES, DIFL, DIFR,
                          Z, K, C, S, WORK, IWORK, INFO )

           INTEGER        GIVPTR,  ICOMPQ,   INFO,   K,   LDGCOL,
                          LDGNUM, NL, NR, SQRE

           REAL           ALPHA, BETA, C, S

           INTEGER        GIVCOL(  LDGCOL, * ), IDXQ( * ), IWORK(
                          * ), PERM( * )

           REAL           D( * ), DIFL( * ), DIFR( *  ),  GIVNUM(
                          LDGNUM,  * ), POLES( LDGNUM, * ), VF( *
                          ), VL( * ), WORK( * ), Z( * )


PURPOSE

       SLASD6 computes the SVD of  an  updated  upper  bidiagonal
       matrix B obtained by merging two smaller ones by appending
       a row. This routine is used only  for  the  problem  which
       requires  all singular values and optionally singular vec­
       tor matrices in factored form.  B is an N-by-M matrix with
       N  =  NL + NR + 1 and M = N + SQRE.  A related subroutine,
       SLASD1, handles the case in which all singular values  and
       singular vectors of the bidiagonal matrix are desired.

       SLASD6 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 singular values of B can be computed using D1, D2, the
       first  components of all the right singular vectors of the
       lower block, and the last components of all the right sin­
       gular  vectors  of  the  upper block. These components are
       stored and updated in VF and VL, respectively, in  SLASD6.
       Hence U and VT are not explicitly referenced.

       The  singular  values  are  stored  in  D.  The  algorithm


             The first stage consists of deflating  the  size  of
       the problem
             when  there are multiple singular values or if there
       is a zero
             in the Z vector. For each such occurence the  dimen­
       sion of the
             secular  equation  problem  is  reduced by one. This
       stage is
             performed by the routine SLASD7.

             The second stage consists of calculating the updated
             singular  values.  This is done by finding the roots
       of the
             secular equation via the routine SLASD4  (as  called
       by SLASD8).
             This routine also updates VF and VL and computes the
       distances
             between the updated singular values and the old sin­
       gular
             values.

       SLASD6 is called from SLASDA.


ARGUMENTS

       ICOMPQ  (input) INTEGER Specifies whether singular vectors
       are to be computed in factored form:
       = 0: Compute singular values only.
       = 1: Compute singular vectors in factored form as well.

       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) REAL array, dimension ( 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
              singular values of the modified matrix.

              On entry, VF(1:NL+1) contains the first  components
              of all
              right  singular  vectors  of  the  upper block; and
              VF(NL+2:M) contains the  first  components  of  all
              right singular vectors of the lower block. On exit,
              VF contains the first components of all right  sin­
              gular vectors of the bidiagonal matrix.

       VL     (input/output) REAL array, dimension ( M )
              On  entry, VL(1:NL+1) contains the  last components
              of all
              right singular vectors  of  the  upper  block;  and
              VL(NL+2:M)  contains  the  last  components  of all
              right singular vectors of the lower block. On exit,
              VL contains the last components of all right singu­
              lar vectors of the bidiagonal matrix.

       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.

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

       PERM   (output) INTEGER array, dimension ( N )
              The permutations (from deflation and sorting) to be
              applied to each block. Not referenced if  ICOMPQ  =
              0.

              GIVPTR  (output) INTEGER The number of Givens rota­
              tions which took place in this subproblem. Not ref­
              erenced if ICOMPQ = 0.

              GIVCOL  (output) INTEGER array, dimension ( LDGCOL,
              2 ) Each  pair  of  numbers  indicates  a  pair  of
              columns  to  take  place  in a Givens rotation. Not
              referenced if ICOMPQ = 0.

              LDGCOL (input) INTEGER leading dimension of GIVCOL,
              must be at least N.

              GIVNUM (output) REAL array, dimension ( LDGNUM, 2 )
              Each number indicates the C or S value to  be  used
              in  the  corresponding  Givens rotation. Not refer­
              enced if ICOMPQ = 0.

              GIVNUM and POLES, must be at least N.

       POLES  (output) REAL array, dimension ( LDGNUM, 2 )
              On  exit, POLES(1,*) is an array containing the new
              singular values obtained from solving  the  secular
              equation, and POLES(2,*) is an array containing the
              poles in the secular equation.  Not  referenced  if
              ICOMPQ = 0.

       DIFL   (output) REAL array, dimension ( N )
              On  exit,  DIFL(I)  is  the  distance  between I-th
              updated (undeflated) singular value  and  the  I-th
              (undeflated) old singular value.

       DIFR   (output) REAL array,
              dimension ( LDGNUM, 2 ) if ICOMPQ = 1 and dimension
              ( N ) if ICOMPQ = 0.  On exit, DIFR(I,  1)  is  the
              distance between I-th updated (undeflated) singular
              value and  the  I+1-th  (undeflated)  old  singular
              value.

              If  ICOMPQ  = 1, DIFR(1:K,2) is an array containing
              the normalizing factors for the right singular vec­
              tor matrix.

              See SLASD8 for details on DIFL and DIFR.

       Z      (output) REAL array, dimension ( M )
              The first elements of this array contain the compo­
              nents of the deflation-adjusted updating  row  vec­
              tor.

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

       C      (output) REAL
              C  contains garbage if SQRE =0 and the C-value of a
              Givens rotation related to the right null space  if
              SQRE = 1.

       S      (output) REAL
              S  contains garbage if SQRE =0 and the S-value of a
              Givens rotation related to the right null space  if
              SQRE = 1.

       WORK   (workspace) REAL array, dimension ( 4 * M )

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

       INFO   (output) INTEGER
              = 0:  successful exit.

              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