CLALSD  -  use  the  singular  value decomposition of A to
       solve the least squares problem of finding X  to  minimize
       the  Euclidean norm of each column of A*X-B, where A is N-
       by-N upper bidiagonal, and X and B are N-by-NRHS


SYNOPSIS

       SUBROUTINE CLALSD( UPLO, SMLSIZ, N, NRHS, D,  E,  B,  LDB,
                          RCOND, RANK, WORK, RWORK, IWORK, INFO )

           CHARACTER      UPLO

           INTEGER        INFO, LDB, N, NRHS, RANK, SMLSIZ

           REAL           RCOND

           INTEGER        IWORK( * )

           REAL           D( * ), E( * ), RWORK( * )

           COMPLEX        B( LDB, * ), WORK( * )


PURPOSE

       CLALSD uses the singular value decomposition of A to solve
       the  least  squares  problem  of finding X to minimize the
       Euclidean norm of each column of A*X-B, where A is  N-by-N
       upper  bidiagonal, and X and B are N-by-NRHS. The solution
       X overwrites B.  The singular values  of  A  smaller  than
       RCOND times the largest singular value are treated as zero
       in solving the least squares problem; in this case a mini­
       mum norm solution is returned.  The actual singular values
       are returned in D in ascending order.

       This code makes very mild assumptions about floating point
       arithmetic. It will work on machines with a guard digit in
       add/subtract, or on those binary  machines  without  guard
       digits  which subtract like the Cray XMP, Cray YMP, Cray C
       90, or Cray 2.  It could conceivably fail  on  hexadecimal
       or  decimal  machines without guard digits, but we know of
       none.


ARGUMENTS

       UPLO   (input) CHARACTER*1
              = 'U': D and E define an upper bidiagonal matrix.
              = 'L': D and E define a  lower bidiagonal matrix.

              SMLSIZ (input) INTEGER The maximum size of the sub­
              problems at the bottom of the computation tree.

       N      (input) INTEGER
              The dimension of the  bidiagonal matrix.  N >= 0.

              The  number  of columns of B. NRHS must be at least
              1.

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

       E      (input) REAL array, dimension (N-1)
              Contains the super-diagonal entries of the bidiago­
              nal matrix.  On exit, E has been destroyed.

       B      (input/output) COMPLEX array, dimension (LDB,NRHS)
              On  input,  B  contains the right hand sides of the
              least squares problem. On output,  B  contains  the
              solution X.

       LDB    (input) INTEGER
              The  leading  dimension of B in the calling subpro­
              gram.  LDB must be at least max(1,N).

       RCOND  (input) REAL
              The singular values of A  less  than  or  equal  to
              RCOND  times the largest singular value are treated
              as zero in solving the least  squares  problem.  If
              RCOND   is  negative,  machine  precision  is  used
              instead.  For  example,  if  diag(S)*X=B  were  the
              least  squares problem, where diag(S) is a diagonal
              matrix of singular values, the  solution  would  be
              X(i)  =  B(i)  /  S(i)  if  S(i)  is  greater  than
              RCOND*max(S), and X(i) = 0 if S(i) is less than  or
              equal to RCOND*max(S).

       RANK   (output) INTEGER
              The  number  of  singular  values of A greater than
              RCOND times the largest singular value.

       WORK   (workspace) COMPLEX array, dimension at least
              (N * NRHS).

       RWORK  (workspace) REAL array, dimension at least
              (9*N + 2*N*SMLSIZ  +  8*N*NLVL  +  3*SMLSIZ*NRHS  +
              (SMLSIZ+1)**2),  where  NLVL  = MAX( 0, INT( LOG_2(
              MIN( M,N )/(SMLSIZ+1) ) ) + 1 )

       IWORK  (workspace) INTEGER array, dimension at least
              (3*N*NLVL + 11*N).

       INFO   (output) INTEGER
              = 0:  successful exit.
              < 0:  if INFO = -i, the i-th argument had an  ille­
              gal value.
              >  0:   The algorithm failed to compute an singular

              and columns INFO/(N+1) through MOD(INFO,N+1).


FURTHER DETAILS

       Based on contributions by
          Ming  Gu  and  Ren-Cang  Li, Computer Science Division,
       University of
            California at Berkeley, USA
          Osni Marques, LBNL/NERSC, USA


Man(1) output converted with man2html