Diff for /rpl/lapack/lapack/dlasdq.f between versions 1.8 and 1.9

version 1.8, 2011/07/22 07:38:08 version 1.9, 2011/11/21 20:42:59
Line 1 Line 1
   *> \brief \b DLASDQ
   *
   *  =========== DOCUMENTATION ===========
   *
   * Online html documentation available at 
   *            http://www.netlib.org/lapack/explore-html/ 
   *
   *> \htmlonly
   *> Download DLASDQ + dependencies 
   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlasdq.f"> 
   *> [TGZ]</a> 
   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlasdq.f"> 
   *> [ZIP]</a> 
   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlasdq.f"> 
   *> [TXT]</a>
   *> \endhtmlonly 
   *
   *  Definition:
   *  ===========
   *
   *       SUBROUTINE DLASDQ( UPLO, SQRE, N, NCVT, NRU, NCC, D, E, VT, LDVT,
   *                          U, LDU, C, LDC, WORK, INFO )
   * 
   *       .. Scalar Arguments ..
   *       CHARACTER          UPLO
   *       INTEGER            INFO, LDC, LDU, LDVT, N, NCC, NCVT, NRU, SQRE
   *       ..
   *       .. Array Arguments ..
   *       DOUBLE PRECISION   C( LDC, * ), D( * ), E( * ), U( LDU, * ),
   *      $                   VT( LDVT, * ), WORK( * )
   *       ..
   *  
   *
   *> \par Purpose:
   *  =============
   *>
   *> \verbatim
   *>
   *> DLASDQ computes the singular value decomposition (SVD) of a real
   *> (upper or lower) bidiagonal matrix with diagonal D and offdiagonal
   *> E, accumulating the transformations if desired. Letting B denote
   *> the input bidiagonal matrix, the algorithm computes orthogonal
   *> matrices Q and P such that B = Q * S * P**T (P**T denotes the transpose
   *> of P). The singular values S are overwritten on D.
   *>
   *> The input matrix U  is changed to U  * Q  if desired.
   *> The input matrix VT is changed to P**T * VT if desired.
   *> The input matrix C  is changed to Q**T * C  if desired.
   *>
   *> See "Computing  Small Singular Values of Bidiagonal Matrices With
   *> Guaranteed High Relative Accuracy," by J. Demmel and W. Kahan,
   *> LAPACK Working Note #3, for a detailed description of the algorithm.
   *> \endverbatim
   *
   *  Arguments:
   *  ==========
   *
   *> \param[in] UPLO
   *> \verbatim
   *>          UPLO is CHARACTER*1
   *>        On entry, UPLO specifies whether the input bidiagonal matrix
   *>        is upper or lower bidiagonal, and wether it is square are
   *>        not.
   *>           UPLO = 'U' or 'u'   B is upper bidiagonal.
   *>           UPLO = 'L' or 'l'   B is lower bidiagonal.
   *> \endverbatim
   *>
   *> \param[in] SQRE
   *> \verbatim
   *>          SQRE is INTEGER
   *>        = 0: then the input matrix is N-by-N.
   *>        = 1: then the input matrix is N-by-(N+1) if UPLU = 'U' and
   *>             (N+1)-by-N if UPLU = 'L'.
   *>
   *>        The bidiagonal matrix has
   *>        N = NL + NR + 1 rows and
   *>        M = N + SQRE >= N columns.
   *> \endverbatim
   *>
   *> \param[in] N
   *> \verbatim
   *>          N is INTEGER
   *>        On entry, N specifies the number of rows and columns
   *>        in the matrix. N must be at least 0.
   *> \endverbatim
   *>
   *> \param[in] NCVT
   *> \verbatim
   *>          NCVT is INTEGER
   *>        On entry, NCVT specifies the number of columns of
   *>        the matrix VT. NCVT must be at least 0.
   *> \endverbatim
   *>
   *> \param[in] NRU
   *> \verbatim
   *>          NRU is INTEGER
   *>        On entry, NRU specifies the number of rows of
   *>        the matrix U. NRU must be at least 0.
   *> \endverbatim
   *>
   *> \param[in] NCC
   *> \verbatim
   *>          NCC is INTEGER
   *>        On entry, NCC specifies the number of columns of
   *>        the matrix C. NCC must be at least 0.
   *> \endverbatim
   *>
   *> \param[in,out] D
   *> \verbatim
   *>          D is DOUBLE PRECISION array, dimension (N)
   *>        On entry, D contains the diagonal entries of the
   *>        bidiagonal matrix whose SVD is desired. On normal exit,
   *>        D contains the singular values in ascending order.
   *> \endverbatim
   *>
   *> \param[in,out] E
   *> \verbatim
   *>          E is DOUBLE PRECISION array.
   *>        dimension is (N-1) if SQRE = 0 and N if SQRE = 1.
   *>        On entry, the entries of E contain the offdiagonal entries
   *>        of the bidiagonal matrix whose SVD is desired. On normal
   *>        exit, E will contain 0. If the algorithm does not converge,
   *>        D and E will contain the diagonal and superdiagonal entries
   *>        of a bidiagonal matrix orthogonally equivalent to the one
   *>        given as input.
   *> \endverbatim
   *>
   *> \param[in,out] VT
   *> \verbatim
   *>          VT is DOUBLE PRECISION array, dimension (LDVT, NCVT)
   *>        On entry, contains a matrix which on exit has been
   *>        premultiplied by P**T, dimension N-by-NCVT if SQRE = 0
   *>        and (N+1)-by-NCVT if SQRE = 1 (not referenced if NCVT=0).
   *> \endverbatim
   *>
   *> \param[in] LDVT
   *> \verbatim
   *>          LDVT is INTEGER
   *>        On entry, LDVT specifies the leading dimension of VT as
   *>        declared in the calling (sub) program. LDVT must be at
   *>        least 1. If NCVT is nonzero LDVT must also be at least N.
   *> \endverbatim
   *>
   *> \param[in,out] U
   *> \verbatim
   *>          U is DOUBLE PRECISION array, dimension (LDU, N)
   *>        On entry, contains a  matrix which on exit has been
   *>        postmultiplied by Q, dimension NRU-by-N if SQRE = 0
   *>        and NRU-by-(N+1) if SQRE = 1 (not referenced if NRU=0).
   *> \endverbatim
   *>
   *> \param[in] LDU
   *> \verbatim
   *>          LDU is INTEGER
   *>        On entry, LDU  specifies the leading dimension of U as
   *>        declared in the calling (sub) program. LDU must be at
   *>        least max( 1, NRU ) .
   *> \endverbatim
   *>
   *> \param[in,out] C
   *> \verbatim
   *>          C is DOUBLE PRECISION array, dimension (LDC, NCC)
   *>        On entry, contains an N-by-NCC matrix which on exit
   *>        has been premultiplied by Q**T  dimension N-by-NCC if SQRE = 0
   *>        and (N+1)-by-NCC if SQRE = 1 (not referenced if NCC=0).
   *> \endverbatim
   *>
   *> \param[in] LDC
   *> \verbatim
   *>          LDC is INTEGER
   *>        On entry, LDC  specifies the leading dimension of C as
   *>        declared in the calling (sub) program. LDC must be at
   *>        least 1. If NCC is nonzero, LDC must also be at least N.
   *> \endverbatim
   *>
   *> \param[out] WORK
   *> \verbatim
   *>          WORK is DOUBLE PRECISION array, dimension (4*N)
   *>        Workspace. Only referenced if one of NCVT, NRU, or NCC is
   *>        nonzero, and if N is at least 2.
   *> \endverbatim
   *>
   *> \param[out] INFO
   *> \verbatim
   *>          INFO is INTEGER
   *>        On exit, a value of 0 indicates a successful exit.
   *>        If INFO < 0, argument number -INFO is illegal.
   *>        If INFO > 0, the algorithm did not converge, and INFO
   *>        specifies how many superdiagonals did not converge.
   *> \endverbatim
   *
   *  Authors:
   *  ========
   *
   *> \author Univ. of Tennessee 
   *> \author Univ. of California Berkeley 
   *> \author Univ. of Colorado Denver 
   *> \author NAG Ltd. 
   *
   *> \date November 2011
   *
   *> \ingroup auxOTHERauxiliary
   *
   *> \par Contributors:
   *  ==================
   *>
   *>     Ming Gu and Huan Ren, Computer Science Division, University of
   *>     California at Berkeley, USA
   *>
   *  =====================================================================
       SUBROUTINE DLASDQ( UPLO, SQRE, N, NCVT, NRU, NCC, D, E, VT, LDVT,        SUBROUTINE DLASDQ( UPLO, SQRE, N, NCVT, NRU, NCC, D, E, VT, LDVT,
      $                   U, LDU, C, LDC, WORK, INFO )       $                   U, LDU, C, LDC, WORK, INFO )
 *  *
 *  -- LAPACK auxiliary routine (version 3.2) --  *  -- LAPACK auxiliary routine (version 3.4.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --  *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--  *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
 *     November 2006  *     November 2011
 *  *
 *     .. Scalar Arguments ..  *     .. Scalar Arguments ..
       CHARACTER          UPLO        CHARACTER          UPLO
Line 15 Line 225
      $                   VT( LDVT, * ), WORK( * )       $                   VT( LDVT, * ), WORK( * )
 *     ..  *     ..
 *  *
 *  Purpose  
 *  =======  
 *  
 *  DLASDQ computes the singular value decomposition (SVD) of a real  
 *  (upper or lower) bidiagonal matrix with diagonal D and offdiagonal  
 *  E, accumulating the transformations if desired. Letting B denote  
 *  the input bidiagonal matrix, the algorithm computes orthogonal  
 *  matrices Q and P such that B = Q * S * P**T (P**T denotes the transpose  
 *  of P). The singular values S are overwritten on D.  
 *  
 *  The input matrix U  is changed to U  * Q  if desired.  
 *  The input matrix VT is changed to P**T * VT if desired.  
 *  The input matrix C  is changed to Q**T * C  if desired.  
 *  
 *  See "Computing  Small Singular Values of Bidiagonal Matrices With  
 *  Guaranteed High Relative Accuracy," by J. Demmel and W. Kahan,  
 *  LAPACK Working Note #3, for a detailed description of the algorithm.  
 *  
 *  Arguments  
 *  =========  
 *  
 *  UPLO  (input) CHARACTER*1  
 *        On entry, UPLO specifies whether the input bidiagonal matrix  
 *        is upper or lower bidiagonal, and wether it is square are  
 *        not.  
 *           UPLO = 'U' or 'u'   B is upper bidiagonal.  
 *           UPLO = 'L' or 'l'   B is lower bidiagonal.  
 *  
 *  SQRE  (input) INTEGER  
 *        = 0: then the input matrix is N-by-N.  
 *        = 1: then the input matrix is N-by-(N+1) if UPLU = 'U' and  
 *             (N+1)-by-N if UPLU = 'L'.  
 *  
 *        The bidiagonal matrix has  
 *        N = NL + NR + 1 rows and  
 *        M = N + SQRE >= N columns.  
 *  
 *  N     (input) INTEGER  
 *        On entry, N specifies the number of rows and columns  
 *        in the matrix. N must be at least 0.  
 *  
 *  NCVT  (input) INTEGER  
 *        On entry, NCVT specifies the number of columns of  
 *        the matrix VT. NCVT must be at least 0.  
 *  
 *  NRU   (input) INTEGER  
 *        On entry, NRU specifies the number of rows of  
 *        the matrix U. NRU must be at least 0.  
 *  
 *  NCC   (input) INTEGER  
 *        On entry, NCC specifies the number of columns of  
 *        the matrix C. NCC must be at least 0.  
 *  
 *  D     (input/output) DOUBLE PRECISION array, dimension (N)  
 *        On entry, D contains the diagonal entries of the  
 *        bidiagonal matrix whose SVD is desired. On normal exit,  
 *        D contains the singular values in ascending order.  
 *  
 *  E     (input/output) DOUBLE PRECISION array.  
 *        dimension is (N-1) if SQRE = 0 and N if SQRE = 1.  
 *        On entry, the entries of E contain the offdiagonal entries  
 *        of the bidiagonal matrix whose SVD is desired. On normal  
 *        exit, E will contain 0. If the algorithm does not converge,  
 *        D and E will contain the diagonal and superdiagonal entries  
 *        of a bidiagonal matrix orthogonally equivalent to the one  
 *        given as input.  
 *  
 *  VT    (input/output) DOUBLE PRECISION array, dimension (LDVT, NCVT)  
 *        On entry, contains a matrix which on exit has been  
 *        premultiplied by P**T, dimension N-by-NCVT if SQRE = 0  
 *        and (N+1)-by-NCVT if SQRE = 1 (not referenced if NCVT=0).  
 *  
 *  LDVT  (input) INTEGER  
 *        On entry, LDVT specifies the leading dimension of VT as  
 *        declared in the calling (sub) program. LDVT must be at  
 *        least 1. If NCVT is nonzero LDVT must also be at least N.  
 *  
 *  U     (input/output) DOUBLE PRECISION array, dimension (LDU, N)  
 *        On entry, contains a  matrix which on exit has been  
 *        postmultiplied by Q, dimension NRU-by-N if SQRE = 0  
 *        and NRU-by-(N+1) if SQRE = 1 (not referenced if NRU=0).  
 *  
 *  LDU   (input) INTEGER  
 *        On entry, LDU  specifies the leading dimension of U as  
 *        declared in the calling (sub) program. LDU must be at  
 *        least max( 1, NRU ) .  
 *  
 *  C     (input/output) DOUBLE PRECISION array, dimension (LDC, NCC)  
 *        On entry, contains an N-by-NCC matrix which on exit  
 *        has been premultiplied by Q**T  dimension N-by-NCC if SQRE = 0  
 *        and (N+1)-by-NCC if SQRE = 1 (not referenced if NCC=0).  
 *  
 *  LDC   (input) INTEGER  
 *        On entry, LDC  specifies the leading dimension of C as  
 *        declared in the calling (sub) program. LDC must be at  
 *        least 1. If NCC is nonzero, LDC must also be at least N.  
 *  
 *  WORK  (workspace) DOUBLE PRECISION array, dimension (4*N)  
 *        Workspace. Only referenced if one of NCVT, NRU, or NCC is  
 *        nonzero, and if N is at least 2.  
 *  
 *  INFO  (output) INTEGER  
 *        On exit, a value of 0 indicates a successful exit.  
 *        If INFO < 0, argument number -INFO is illegal.  
 *        If INFO > 0, the algorithm did not converge, and INFO  
 *        specifies how many superdiagonals did not converge.  
 *  
 *  Further Details  
 *  ===============  
 *  
 *  Based on contributions by  
 *     Ming Gu and Huan Ren, Computer Science Division, University of  
 *     California at Berkeley, USA  
 *  
 *  =====================================================================  *  =====================================================================
 *  *
 *     .. Parameters ..  *     .. Parameters ..

Removed from v.1.8  
changed lines
  Added in v.1.9


CVSweb interface <joel.bertrand@systella.fr>