--- rpl/lapack/lapack/zgebd2.f 2010/08/13 21:04:02 1.6
+++ rpl/lapack/lapack/zgebd2.f 2018/05/29 07:18:13 1.19
@@ -1,9 +1,198 @@
+*> \brief \b ZGEBD2 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 ZGEBD2 + dependencies
+*>
+*> [TGZ]
+*>
+*> [ZIP]
+*>
+*> [TXT]
+*> \endhtmlonly
+*
+* Definition:
+* ===========
+*
+* SUBROUTINE ZGEBD2( M, N, A, LDA, D, E, TAUQ, TAUP, WORK, INFO )
+*
+* .. Scalar Arguments ..
+* INTEGER INFO, LDA, M, N
+* ..
+* .. Array Arguments ..
+* DOUBLE PRECISION D( * ), E( * )
+* COMPLEX*16 A( LDA, * ), TAUP( * ), TAUQ( * ), WORK( * )
+* ..
+*
+*
+*> \par Purpose:
+* =============
+*>
+*> \verbatim
+*>
+*> ZGEBD2 reduces a complex general m by n matrix A to upper or lower
+*> real bidiagonal form B by a unitary transformation: Q**H * 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 COMPLEX*16 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 unitary matrix Q as a product of elementary
+*> reflectors, and the elements above the first superdiagonal,
+*> with the array TAUP, represent the unitary 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 unitary matrix Q as a product of
+*> elementary reflectors, and the elements above the diagonal,
+*> with the array TAUP, represent the unitary 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 COMPLEX*16 array, dimension (min(M,N))
+*> The scalar factors of the elementary reflectors which
+*> represent the unitary matrix Q. See Further Details.
+*> \endverbatim
+*>
+*> \param[out] TAUP
+*> \verbatim
+*> TAUP is COMPLEX*16 array, dimension (min(M,N))
+*> The scalar factors of the elementary reflectors which
+*> represent the unitary matrix P. See Further Details.
+*> \endverbatim
+*>
+*> \param[out] WORK
+*> \verbatim
+*> WORK is COMPLEX*16 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.
+*
+*> \date June 2017
+*
+*> \ingroup complex16GEcomputational
+*
+*> \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**H and G(i) = I - taup * u * u**H
+*>
+*> where tauq and taup are complex scalars, and v and u are complex
+*> 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**H and G(i) = I - taup * u * u**H
+*>
+*> where tauq and taup are complex scalars, v and u are complex 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 ZGEBD2( M, N, A, LDA, D, E, TAUQ, TAUP, WORK, INFO )
*
-* -- LAPACK routine (version 3.2) --
+* -- LAPACK computational routine (version 3.7.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 2017
*
* .. Scalar Arguments ..
INTEGER INFO, LDA, M, N
@@ -13,115 +202,6 @@
COMPLEX*16 A( LDA, * ), TAUP( * ), TAUQ( * ), WORK( * )
* ..
*
-* Purpose
-* =======
-*
-* ZGEBD2 reduces a complex general m by n matrix A to upper or lower
-* real bidiagonal form B by a unitary 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) COMPLEX*16 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 unitary matrix Q as a product of elementary
-* reflectors, and the elements above the first superdiagonal,
-* with the array TAUP, represent the unitary 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 unitary matrix Q as a product of
-* elementary reflectors, and the elements above the diagonal,
-* with the array TAUP, represent the unitary 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) COMPLEX*16 array dimension (min(M,N))
-* The scalar factors of the elementary reflectors which
-* represent the unitary matrix Q. See Further Details.
-*
-* TAUP (output) COMPLEX*16 array, dimension (min(M,N))
-* The scalar factors of the elementary reflectors which
-* represent the unitary matrix P. See Further Details.
-*
-* WORK (workspace) COMPLEX*16 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 complex scalars, and v and u are complex
-* 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 complex scalars, v and u are complex 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 ..
@@ -170,7 +250,7 @@
D( I ) = ALPHA
A( I, I ) = ONE
*
-* Apply H(i)' to A(i:m,i+1:n) from the left
+* Apply H(i)**H to A(i:m,i+1:n) from the left
*
IF( I.LT.N )
$ CALL ZLARF( 'Left', M-I+1, N-I, A( I, I ), 1,
@@ -233,7 +313,7 @@
E( I ) = ALPHA
A( I+1, I ) = ONE
*
-* Apply H(i)' to A(i+1:m,i+1:n) from the left
+* Apply H(i)**H to A(i+1:m,i+1:n) from the left
*
CALL ZLARF( 'Left', M-I, N-I, A( I+1, I ), 1,
$ DCONJG( TAUQ( I ) ), A( I+1, I+1 ), LDA,