--- rpl/lapack/lapack/dlasdq.f 2011/07/22 07:38:08 1.8
+++ rpl/lapack/lapack/dlasdq.f 2016/08/27 15:27:10 1.15
@@ -1,10 +1,220 @@
+*> \brief \b DLASDQ computes the SVD of a real bidiagonal matrix with diagonal d and off-diagonal e. Used by sbdsdc.
+*
+* =========== DOCUMENTATION ===========
+*
+* Online html documentation available at
+* http://www.netlib.org/lapack/explore-html/
+*
+*> \htmlonly
+*> Download DLASDQ + dependencies
+*>
+*> [TGZ]
+*>
+*> [ZIP]
+*>
+*> [TXT]
+*> \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 whether 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 June 2016
+*
+*> \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,
$ U, LDU, C, LDC, WORK, INFO )
*
-* -- LAPACK auxiliary routine (version 3.2) --
+* -- LAPACK auxiliary routine (version 3.6.1) --
* -- LAPACK is a software package provided by Univ. of Tennessee, --
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2006
+* June 2016
*
* .. Scalar Arguments ..
CHARACTER UPLO
@@ -15,120 +225,6 @@
$ 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 ..