--- rpl/lapack/lapack/dlabrd.f 2011/07/22 07:38:06 1.8 +++ rpl/lapack/lapack/dlabrd.f 2011/11/21 20:42:54 1.9 @@ -1,10 +1,219 @@ +*> \brief \b DLABRD +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +*> \htmlonly +*> Download DLABRD + dependencies +*> +*> [TGZ] +*> +*> [ZIP] +*> +*> [TXT] +*> \endhtmlonly +* +* Definition: +* =========== +* +* SUBROUTINE DLABRD( M, N, NB, A, LDA, D, E, TAUQ, TAUP, X, LDX, Y, +* LDY ) +* +* .. Scalar Arguments .. +* INTEGER LDA, LDX, LDY, M, N, NB +* .. +* .. Array Arguments .. +* DOUBLE PRECISION A( LDA, * ), D( * ), E( * ), TAUP( * ), +* $ TAUQ( * ), X( LDX, * ), Y( LDY, * ) +* .. +* +* +*> \par Purpose: +* ============= +*> +*> \verbatim +*> +*> DLABRD reduces the first NB rows and columns of a real general +*> m by n matrix A to upper or lower bidiagonal form by an orthogonal +*> transformation Q**T * A * P, and returns the matrices X and Y which +*> are needed to apply the transformation to the unreduced part of A. +*> +*> If m >= n, A is reduced to upper bidiagonal form; if m < n, to lower +*> bidiagonal form. +*> +*> This is an auxiliary routine called by DGEBRD +*> \endverbatim +* +* Arguments: +* ========== +* +*> \param[in] M +*> \verbatim +*> M is INTEGER +*> The number of rows in the matrix A. +*> \endverbatim +*> +*> \param[in] N +*> \verbatim +*> N is INTEGER +*> The number of columns in the matrix A. +*> \endverbatim +*> +*> \param[in] NB +*> \verbatim +*> NB is INTEGER +*> The number of leading rows and columns of A to be reduced. +*> \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, the first NB rows and columns of the matrix are +*> overwritten; the rest of the array is unchanged. +*> If m >= n, elements on and below the diagonal in the first NB +*> columns, with the array TAUQ, represent the orthogonal +*> matrix Q as a product of elementary reflectors; and +*> elements above the diagonal in the first NB rows, with the +*> array TAUP, represent the orthogonal matrix P as a product +*> of elementary reflectors. +*> If m < n, elements below the diagonal in the first NB +*> columns, with the array TAUQ, represent the orthogonal +*> matrix Q as a product of elementary reflectors, and +*> elements on and above the diagonal in the first NB rows, +*> 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 (NB) +*> The diagonal elements of the first NB rows and columns of +*> the reduced matrix. D(i) = A(i,i). +*> \endverbatim +*> +*> \param[out] E +*> \verbatim +*> E is DOUBLE PRECISION array, dimension (NB) +*> The off-diagonal elements of the first NB rows and columns of +*> the reduced matrix. +*> \endverbatim +*> +*> \param[out] TAUQ +*> \verbatim +*> TAUQ is DOUBLE PRECISION array dimension (NB) +*> 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 (NB) +*> The scalar factors of the elementary reflectors which +*> represent the orthogonal matrix P. See Further Details. +*> \endverbatim +*> +*> \param[out] X +*> \verbatim +*> X is DOUBLE PRECISION array, dimension (LDX,NB) +*> The m-by-nb matrix X required to update the unreduced part +*> of A. +*> \endverbatim +*> +*> \param[in] LDX +*> \verbatim +*> LDX is INTEGER +*> The leading dimension of the array X. LDX >= max(1,M). +*> \endverbatim +*> +*> \param[out] Y +*> \verbatim +*> Y is DOUBLE PRECISION array, dimension (LDY,NB) +*> The n-by-nb matrix Y required to update the unreduced part +*> of A. +*> \endverbatim +*> +*> \param[in] LDY +*> \verbatim +*> LDY is INTEGER +*> The leading dimension of the array Y. LDY >= max(1,N). +*> \endverbatim +* +* Authors: +* ======== +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup doubleOTHERauxiliary +* +*> \par Further Details: +* ===================== +*> +*> \verbatim +*> +*> The matrices Q and P are represented as products of elementary +*> reflectors: +*> +*> Q = H(1) H(2) . . . H(nb) and P = G(1) G(2) . . . G(nb) +*> +*> 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. +*> +*> If m >= n, v(1:i-1) = 0, v(i) = 1, and v(i:m) is stored on exit in +*> A(i:m,i); u(1:i) = 0, u(i+1) = 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). +*> +*> If m < n, v(1:i) = 0, v(i+1) = 1, and v(i+1:m) is stored on exit in +*> A(i+2:m,i); u(1:i-1) = 0, u(i) = 1, and u(i:n) is stored on exit in +*> A(i,i+1:n); tauq is stored in TAUQ(i) and taup in TAUP(i). +*> +*> The elements of the vectors v and u together form the m-by-nb matrix +*> V and the nb-by-n matrix U**T which are needed, with X and Y, to apply +*> the transformation to the unreduced part of the matrix, using a block +*> update of the form: A := A - V*Y**T - X*U**T. +*> +*> The contents of A on exit are illustrated by the following examples +*> with nb = 2: +*> +*> m = 6 and n = 5 (m > n): m = 5 and n = 6 (m < n): +*> +*> ( 1 1 u1 u1 u1 ) ( 1 u1 u1 u1 u1 u1 ) +*> ( v1 1 1 u2 u2 ) ( 1 1 u2 u2 u2 u2 ) +*> ( v1 v2 a a a ) ( v1 1 a a a a ) +*> ( v1 v2 a a a ) ( v1 v2 a a a a ) +*> ( v1 v2 a a a ) ( v1 v2 a a a a ) +*> ( v1 v2 a a a ) +*> +*> where a denotes an element of the original matrix which is unchanged, +*> vi denotes an element of the vector defining H(i), and ui an element +*> of the vector defining G(i). +*> \endverbatim +*> +* ===================================================================== SUBROUTINE DLABRD( M, N, NB, A, LDA, D, E, TAUQ, TAUP, X, LDX, Y, $ LDY ) * -* -- LAPACK auxiliary routine (version 3.3.1) -- +* -- LAPACK auxiliary routine (version 3.4.0) -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- -* -- April 2011 -- +* November 2011 * * .. Scalar Arguments .. INTEGER LDA, LDX, LDY, M, N, NB @@ -14,125 +223,6 @@ $ TAUQ( * ), X( LDX, * ), Y( LDY, * ) * .. * -* Purpose -* ======= -* -* DLABRD reduces the first NB rows and columns of a real general -* m by n matrix A to upper or lower bidiagonal form by an orthogonal -* transformation Q**T * A * P, and returns the matrices X and Y which -* are needed to apply the transformation to the unreduced part of A. -* -* If m >= n, A is reduced to upper bidiagonal form; if m < n, to lower -* bidiagonal form. -* -* This is an auxiliary routine called by DGEBRD -* -* Arguments -* ========= -* -* M (input) INTEGER -* The number of rows in the matrix A. -* -* N (input) INTEGER -* The number of columns in the matrix A. -* -* NB (input) INTEGER -* The number of leading rows and columns of A to be reduced. -* -* A (input/output) DOUBLE PRECISION array, dimension (LDA,N) -* On entry, the m by n general matrix to be reduced. -* On exit, the first NB rows and columns of the matrix are -* overwritten; the rest of the array is unchanged. -* If m >= n, elements on and below the diagonal in the first NB -* columns, with the array TAUQ, represent the orthogonal -* matrix Q as a product of elementary reflectors; and -* elements above the diagonal in the first NB rows, with the -* array TAUP, represent the orthogonal matrix P as a product -* of elementary reflectors. -* If m < n, elements below the diagonal in the first NB -* columns, with the array TAUQ, represent the orthogonal -* matrix Q as a product of elementary reflectors, and -* elements on and above the diagonal in the first NB rows, -* 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 (NB) -* The diagonal elements of the first NB rows and columns of -* the reduced matrix. D(i) = A(i,i). -* -* E (output) DOUBLE PRECISION array, dimension (NB) -* The off-diagonal elements of the first NB rows and columns of -* the reduced matrix. -* -* TAUQ (output) DOUBLE PRECISION array dimension (NB) -* The scalar factors of the elementary reflectors which -* represent the orthogonal matrix Q. See Further Details. -* -* TAUP (output) DOUBLE PRECISION array, dimension (NB) -* The scalar factors of the elementary reflectors which -* represent the orthogonal matrix P. See Further Details. -* -* X (output) DOUBLE PRECISION array, dimension (LDX,NB) -* The m-by-nb matrix X required to update the unreduced part -* of A. -* -* LDX (input) INTEGER -* The leading dimension of the array X. LDX >= max(1,M). -* -* Y (output) DOUBLE PRECISION array, dimension (LDY,NB) -* The n-by-nb matrix Y required to update the unreduced part -* of A. -* -* LDY (input) INTEGER -* The leading dimension of the array Y. LDY >= max(1,N). -* -* Further Details -* =============== -* -* The matrices Q and P are represented as products of elementary -* reflectors: -* -* Q = H(1) H(2) . . . H(nb) and P = G(1) G(2) . . . G(nb) -* -* 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. -* -* If m >= n, v(1:i-1) = 0, v(i) = 1, and v(i:m) is stored on exit in -* A(i:m,i); u(1:i) = 0, u(i+1) = 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). -* -* If m < n, v(1:i) = 0, v(i+1) = 1, and v(i+1:m) is stored on exit in -* A(i+2:m,i); u(1:i-1) = 0, u(i) = 1, and u(i:n) is stored on exit in -* A(i,i+1:n); tauq is stored in TAUQ(i) and taup in TAUP(i). -* -* The elements of the vectors v and u together form the m-by-nb matrix -* V and the nb-by-n matrix U**T which are needed, with X and Y, to apply -* the transformation to the unreduced part of the matrix, using a block -* update of the form: A := A - V*Y**T - X*U**T. -* -* The contents of A on exit are illustrated by the following examples -* with nb = 2: -* -* m = 6 and n = 5 (m > n): m = 5 and n = 6 (m < n): -* -* ( 1 1 u1 u1 u1 ) ( 1 u1 u1 u1 u1 u1 ) -* ( v1 1 1 u2 u2 ) ( 1 1 u2 u2 u2 u2 ) -* ( v1 v2 a a a ) ( v1 1 a a a a ) -* ( v1 v2 a a a ) ( v1 v2 a a a a ) -* ( v1 v2 a a a ) ( v1 v2 a a a a ) -* ( v1 v2 a a a ) -* -* where a denotes an element of the original matrix which is unchanged, -* vi denotes an element of the vector defining H(i), and ui an element -* of the vector defining G(i). -* * ===================================================================== * * .. Parameters ..