--- rpl/lapack/lapack/dgebd2.f 2010/08/06 15:28:35 1.3
+++ rpl/lapack/lapack/dgebd2.f 2023/08/07 08:38:47 1.20
@@ -1,9 +1,195 @@
+*> \brief \b DGEBD2 reduces a general matrix to bidiagonal form using an unblocked algorithm.
+*
+* =========== DOCUMENTATION ===========
+*
+* Online html documentation available at
+* http://www.netlib.org/lapack/explore-html/
+*
+*> \htmlonly
+*> Download DGEBD2 + dependencies
+*>
+*> [TGZ]
+*>
+*> [ZIP]
+*>
+*> [TXT]
+*> \endhtmlonly
+*
+* Definition:
+* ===========
+*
+* SUBROUTINE DGEBD2( M, N, A, LDA, D, E, TAUQ, TAUP, WORK, INFO )
+*
+* .. Scalar Arguments ..
+* INTEGER INFO, LDA, M, N
+* ..
+* .. Array Arguments ..
+* DOUBLE PRECISION A( LDA, * ), D( * ), E( * ), TAUP( * ),
+* $ TAUQ( * ), WORK( * )
+* ..
+*
+*
+*> \par Purpose:
+* =============
+*>
+*> \verbatim
+*>
+*> DGEBD2 reduces a real general m by n matrix A to upper or lower
+*> bidiagonal form B by an orthogonal transformation: Q**T * A * P = B.
+*>
+*> If m >= n, B is upper bidiagonal; if m < n, B is lower bidiagonal.
+*> \endverbatim
+*
+* Arguments:
+* ==========
+*
+*> \param[in] M
+*> \verbatim
+*> M is INTEGER
+*> The number of rows in the matrix A. M >= 0.
+*> \endverbatim
+*>
+*> \param[in] N
+*> \verbatim
+*> N is INTEGER
+*> The number of columns in the matrix A. N >= 0.
+*> \endverbatim
+*>
+*> \param[in,out] A
+*> \verbatim
+*> A is DOUBLE PRECISION array, dimension (LDA,N)
+*> On entry, the m by n general matrix to be reduced.
+*> On exit,
+*> if m >= n, the diagonal and the first superdiagonal are
+*> overwritten with the upper bidiagonal matrix B; the
+*> elements below the diagonal, with the array TAUQ, represent
+*> the orthogonal matrix Q as a product of elementary
+*> reflectors, and the elements above the first superdiagonal,
+*> with the array TAUP, represent the orthogonal matrix P as
+*> a product of elementary reflectors;
+*> if m < n, the diagonal and the first subdiagonal are
+*> overwritten with the lower bidiagonal matrix B; the
+*> elements below the first subdiagonal, with the array TAUQ,
+*> represent the orthogonal matrix Q as a product of
+*> elementary reflectors, and the elements above the diagonal,
+*> with the array TAUP, represent the orthogonal matrix P as
+*> a product of elementary reflectors.
+*> See Further Details.
+*> \endverbatim
+*>
+*> \param[in] LDA
+*> \verbatim
+*> LDA is INTEGER
+*> The leading dimension of the array A. LDA >= max(1,M).
+*> \endverbatim
+*>
+*> \param[out] D
+*> \verbatim
+*> D is DOUBLE PRECISION array, dimension (min(M,N))
+*> The diagonal elements of the bidiagonal matrix B:
+*> D(i) = A(i,i).
+*> \endverbatim
+*>
+*> \param[out] E
+*> \verbatim
+*> E is DOUBLE PRECISION array, dimension (min(M,N)-1)
+*> The off-diagonal elements of the bidiagonal matrix B:
+*> if m >= n, E(i) = A(i,i+1) for i = 1,2,...,n-1;
+*> if m < n, E(i) = A(i+1,i) for i = 1,2,...,m-1.
+*> \endverbatim
+*>
+*> \param[out] TAUQ
+*> \verbatim
+*> TAUQ is DOUBLE PRECISION array, dimension (min(M,N))
+*> The scalar factors of the elementary reflectors which
+*> represent the orthogonal matrix Q. See Further Details.
+*> \endverbatim
+*>
+*> \param[out] TAUP
+*> \verbatim
+*> TAUP is DOUBLE PRECISION array, dimension (min(M,N))
+*> The scalar factors of the elementary reflectors which
+*> represent the orthogonal matrix P. See Further Details.
+*> \endverbatim
+*>
+*> \param[out] WORK
+*> \verbatim
+*> WORK is DOUBLE PRECISION array, dimension (max(M,N))
+*> \endverbatim
+*>
+*> \param[out] INFO
+*> \verbatim
+*> INFO is INTEGER
+*> = 0: successful exit.
+*> < 0: if INFO = -i, the i-th argument had an illegal value.
+*> \endverbatim
+*
+* Authors:
+* ========
+*
+*> \author Univ. of Tennessee
+*> \author Univ. of California Berkeley
+*> \author Univ. of Colorado Denver
+*> \author NAG Ltd.
+*
+*> \ingroup doubleGEcomputational
+*
+*> \par Further Details:
+* =====================
+*>
+*> \verbatim
+*>
+*> The matrices Q and P are represented as products of elementary
+*> reflectors:
+*>
+*> If m >= n,
+*>
+*> Q = H(1) H(2) . . . H(n) and P = G(1) G(2) . . . G(n-1)
+*>
+*> Each H(i) and G(i) has the form:
+*>
+*> H(i) = I - tauq * v * v**T and G(i) = I - taup * u * u**T
+*>
+*> where tauq and taup are real scalars, and v and u are real vectors;
+*> v(1:i-1) = 0, v(i) = 1, and v(i+1:m) is stored on exit in A(i+1:m,i);
+*> u(1:i) = 0, u(i+1) = 1, and u(i+2:n) is stored on exit in A(i,i+2:n);
+*> tauq is stored in TAUQ(i) and taup in TAUP(i).
+*>
+*> If m < n,
+*>
+*> Q = H(1) H(2) . . . H(m-1) and P = G(1) G(2) . . . G(m)
+*>
+*> Each H(i) and G(i) has the form:
+*>
+*> H(i) = I - tauq * v * v**T and G(i) = I - taup * u * u**T
+*>
+*> where tauq and taup are real scalars, and v and u are real vectors;
+*> v(1:i) = 0, v(i+1) = 1, and v(i+2:m) is stored on exit in A(i+2:m,i);
+*> u(1:i-1) = 0, u(i) = 1, and u(i+1:n) is stored on exit in A(i,i+1:n);
+*> tauq is stored in TAUQ(i) and taup in TAUP(i).
+*>
+*> The contents of A on exit are illustrated by the following examples:
+*>
+*> m = 6 and n = 5 (m > n): m = 5 and n = 6 (m < n):
+*>
+*> ( d e u1 u1 u1 ) ( d u1 u1 u1 u1 u1 )
+*> ( v1 d e u2 u2 ) ( e d u2 u2 u2 u2 )
+*> ( v1 v2 d e u3 ) ( v1 e d u3 u3 u3 )
+*> ( v1 v2 v3 d e ) ( v1 v2 e d u4 u4 )
+*> ( v1 v2 v3 v4 d ) ( v1 v2 v3 e d u5 )
+*> ( v1 v2 v3 v4 v5 )
+*>
+*> where d and e denote diagonal and off-diagonal elements of B, vi
+*> denotes an element of the vector defining H(i), and ui an element of
+*> the vector defining G(i).
+*> \endverbatim
+*>
+* =====================================================================
SUBROUTINE DGEBD2( M, N, A, LDA, D, E, TAUQ, TAUP, WORK, INFO )
*
-* -- LAPACK routine (version 3.2) --
+* -- LAPACK computational routine --
* -- LAPACK is a software package provided by Univ. of Tennessee, --
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
-* November 2006
*
* .. Scalar Arguments ..
INTEGER INFO, LDA, M, N
@@ -13,115 +199,6 @@
$ TAUQ( * ), WORK( * )
* ..
*
-* Purpose
-* =======
-*
-* DGEBD2 reduces a real general m by n matrix A to upper or lower
-* bidiagonal form B by an orthogonal transformation: Q' * A * P = B.
-*
-* If m >= n, B is upper bidiagonal; if m < n, B is lower bidiagonal.
-*
-* Arguments
-* =========
-*
-* M (input) INTEGER
-* The number of rows in the matrix A. M >= 0.
-*
-* N (input) INTEGER
-* The number of columns in the matrix A. N >= 0.
-*
-* A (input/output) DOUBLE PRECISION array, dimension (LDA,N)
-* On entry, the m by n general matrix to be reduced.
-* On exit,
-* if m >= n, the diagonal and the first superdiagonal are
-* overwritten with the upper bidiagonal matrix B; the
-* elements below the diagonal, with the array TAUQ, represent
-* the orthogonal matrix Q as a product of elementary
-* reflectors, and the elements above the first superdiagonal,
-* with the array TAUP, represent the orthogonal matrix P as
-* a product of elementary reflectors;
-* if m < n, the diagonal and the first subdiagonal are
-* overwritten with the lower bidiagonal matrix B; the
-* elements below the first subdiagonal, with the array TAUQ,
-* represent the orthogonal matrix Q as a product of
-* elementary reflectors, and the elements above the diagonal,
-* with the array TAUP, represent the orthogonal matrix P as
-* a product of elementary reflectors.
-* See Further Details.
-*
-* LDA (input) INTEGER
-* The leading dimension of the array A. LDA >= max(1,M).
-*
-* D (output) DOUBLE PRECISION array, dimension (min(M,N))
-* The diagonal elements of the bidiagonal matrix B:
-* D(i) = A(i,i).
-*
-* E (output) DOUBLE PRECISION array, dimension (min(M,N)-1)
-* The off-diagonal elements of the bidiagonal matrix B:
-* if m >= n, E(i) = A(i,i+1) for i = 1,2,...,n-1;
-* if m < n, E(i) = A(i+1,i) for i = 1,2,...,m-1.
-*
-* TAUQ (output) DOUBLE PRECISION array dimension (min(M,N))
-* The scalar factors of the elementary reflectors which
-* represent the orthogonal matrix Q. See Further Details.
-*
-* TAUP (output) DOUBLE PRECISION array, dimension (min(M,N))
-* The scalar factors of the elementary reflectors which
-* represent the orthogonal matrix P. See Further Details.
-*
-* WORK (workspace) DOUBLE PRECISION array, dimension (max(M,N))
-*
-* INFO (output) INTEGER
-* = 0: successful exit.
-* < 0: if INFO = -i, the i-th argument had an illegal value.
-*
-* Further Details
-* ===============
-*
-* The matrices Q and P are represented as products of elementary
-* reflectors:
-*
-* If m >= n,
-*
-* Q = H(1) H(2) . . . H(n) and P = G(1) G(2) . . . G(n-1)
-*
-* Each H(i) and G(i) has the form:
-*
-* H(i) = I - tauq * v * v' and G(i) = I - taup * u * u'
-*
-* where tauq and taup are real scalars, and v and u are real vectors;
-* v(1:i-1) = 0, v(i) = 1, and v(i+1:m) is stored on exit in A(i+1:m,i);
-* u(1:i) = 0, u(i+1) = 1, and u(i+2:n) is stored on exit in A(i,i+2:n);
-* tauq is stored in TAUQ(i) and taup in TAUP(i).
-*
-* If m < n,
-*
-* Q = H(1) H(2) . . . H(m-1) and P = G(1) G(2) . . . G(m)
-*
-* Each H(i) and G(i) has the form:
-*
-* H(i) = I - tauq * v * v' and G(i) = I - taup * u * u'
-*
-* where tauq and taup are real scalars, and v and u are real vectors;
-* v(1:i) = 0, v(i+1) = 1, and v(i+2:m) is stored on exit in A(i+2:m,i);
-* u(1:i-1) = 0, u(i) = 1, and u(i+1:n) is stored on exit in A(i,i+1:n);
-* tauq is stored in TAUQ(i) and taup in TAUP(i).
-*
-* The contents of A on exit are illustrated by the following examples:
-*
-* m = 6 and n = 5 (m > n): m = 5 and n = 6 (m < n):
-*
-* ( d e u1 u1 u1 ) ( d u1 u1 u1 u1 u1 )
-* ( v1 d e u2 u2 ) ( e d u2 u2 u2 u2 )
-* ( v1 v2 d e u3 ) ( v1 e d u3 u3 u3 )
-* ( v1 v2 v3 d e ) ( v1 v2 e d u4 u4 )
-* ( v1 v2 v3 v4 d ) ( v1 v2 v3 e d u5 )
-* ( v1 v2 v3 v4 v5 )
-*
-* where d and e denote diagonal and off-diagonal elements of B, vi
-* denotes an element of the vector defining H(i), and ui an element of
-* the vector defining G(i).
-*
* =====================================================================
*
* .. Parameters ..