3
* =========== DOCUMENTATION ===========
5
* Online html documentation available at
6
* http://www.netlib.org/lapack/explore-html/
9
*> Download DORGBR + dependencies
10
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dorgbr.f">
12
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dorgbr.f">
14
*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dorgbr.f">
21
* SUBROUTINE DORGBR( VECT, M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
23
* .. Scalar Arguments ..
25
* INTEGER INFO, K, LDA, LWORK, M, N
27
* .. Array Arguments ..
28
* DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
37
*> DORGBR generates one of the real orthogonal matrices Q or P**T
38
*> determined by DGEBRD when reducing a real matrix A to bidiagonal
39
*> form: A = Q * B * P**T. Q and P**T are defined as products of
40
*> elementary reflectors H(i) or G(i) respectively.
42
*> If VECT = 'Q', A is assumed to have been an M-by-K matrix, and Q
44
*> if m >= k, Q = H(1) H(2) . . . H(k) and DORGBR returns the first n
45
*> columns of Q, where m >= n >= k;
46
*> if m < k, Q = H(1) H(2) . . . H(m-1) and DORGBR returns Q as an
49
*> If VECT = 'P', A is assumed to have been a K-by-N matrix, and P**T
51
*> if k < n, P**T = G(k) . . . G(2) G(1) and DORGBR returns the first m
52
*> rows of P**T, where n >= m >= k;
53
*> if k >= n, P**T = G(n-1) . . . G(2) G(1) and DORGBR returns P**T as
62
*> VECT is CHARACTER*1
63
*> Specifies whether the matrix Q or the matrix P**T is
64
*> required, as defined in the transformation applied by DGEBRD:
66
*> = 'P': generate P**T.
72
*> The number of rows of the matrix Q or P**T to be returned.
79
*> The number of columns of the matrix Q or P**T to be returned.
81
*> If VECT = 'Q', M >= N >= min(M,K);
82
*> if VECT = 'P', N >= M >= min(N,K).
88
*> If VECT = 'Q', the number of columns in the original M-by-K
89
*> matrix reduced by DGEBRD.
90
*> If VECT = 'P', the number of rows in the original K-by-N
91
*> matrix reduced by DGEBRD.
97
*> A is DOUBLE PRECISION array, dimension (LDA,N)
98
*> On entry, the vectors which define the elementary reflectors,
99
*> as returned by DGEBRD.
100
*> On exit, the M-by-N matrix Q or P**T.
106
*> The leading dimension of the array A. LDA >= max(1,M).
111
*> TAU is DOUBLE PRECISION array, dimension
112
*> (min(M,K)) if VECT = 'Q'
113
*> (min(N,K)) if VECT = 'P'
114
*> TAU(i) must contain the scalar factor of the elementary
115
*> reflector H(i) or G(i), which determines Q or P**T, as
116
*> returned by DGEBRD in its array argument TAUQ or TAUP.
121
*> WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK))
122
*> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
128
*> The dimension of the array WORK. LWORK >= max(1,min(M,N)).
129
*> For optimum performance LWORK >= min(M,N)*NB, where NB
130
*> is the optimal blocksize.
132
*> If LWORK = -1, then a workspace query is assumed; the routine
133
*> only calculates the optimal size of the WORK array, returns
134
*> this value as the first entry of the WORK array, and no error
135
*> message related to LWORK is issued by XERBLA.
141
*> = 0: successful exit
142
*> < 0: if INFO = -i, the i-th argument had an illegal value
148
*> \author Univ. of Tennessee
149
*> \author Univ. of California Berkeley
150
*> \author Univ. of Colorado Denver
155
*> \ingroup doubleGBcomputational
157
* =====================================================================
1
158
SUBROUTINE DORGBR( VECT, M, N, K, A, LDA, TAU, WORK, LWORK, INFO )
3
* -- LAPACK routine (version 2.0) --
4
* Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
5
* Courant Institute, Argonne National Lab, and Rice University
160
* -- LAPACK computational routine (version 3.4.1) --
161
* -- LAPACK is a software package provided by Univ. of Tennessee, --
162
* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
8
165
* .. Scalar Arguments ..
10
167
INTEGER INFO, K, LDA, LWORK, M, N
12
169
* .. Array Arguments ..
13
DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( LWORK )
170
DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * )
17
* $Id: dorgbr.f 19697 2010-10-29 16:57:34Z d3y133 $
22
* DORGBR generates one of the real orthogonal matrices Q or P**T
23
* determined by DGEBRD when reducing a real matrix A to bidiagonal
24
* form: A = Q * B * P**T. Q and P**T are defined as products of
25
* elementary reflectors H(i) or G(i) respectively.
27
* If VECT = 'Q', A is assumed to have been an M-by-K matrix, and Q
29
* if m >= k, Q = H(1) H(2) . . . H(k) and DORGBR returns the first n
30
* columns of Q, where m >= n >= k;
31
* if m < k, Q = H(1) H(2) . . . H(m-1) and DORGBR returns Q as an
34
* If VECT = 'P', A is assumed to have been a K-by-N matrix, and P**T
36
* if k < n, P**T = G(k) . . . G(2) G(1) and DORGBR returns the first m
37
* rows of P**T, where n >= m >= k;
38
* if k >= n, P**T = G(n-1) . . . G(2) G(1) and DORGBR returns P**T as
44
* VECT (input) CHARACTER*1
45
* Specifies whether the matrix Q or the matrix P**T is
46
* required, as defined in the transformation applied by DGEBRD:
48
* = 'P': generate P**T.
51
* The number of rows of the matrix Q or P**T to be returned.
55
* The number of columns of the matrix Q or P**T to be returned.
57
* If VECT = 'Q', M >= N >= min(M,K);
58
* if VECT = 'P', N >= M >= min(N,K).
61
* If VECT = 'Q', the number of columns in the original M-by-K
62
* matrix reduced by DGEBRD.
63
* If VECT = 'P', the number of rows in the original K-by-N
64
* matrix reduced by DGEBRD.
67
* A (input/output) DOUBLE PRECISION array, dimension (LDA,N)
68
* On entry, the vectors which define the elementary reflectors,
69
* as returned by DGEBRD.
70
* On exit, the M-by-N matrix Q or P**T.
73
* The leading dimension of the array A. LDA >= max(1,M).
75
* TAU (input) DOUBLE PRECISION array, dimension
76
* (min(M,K)) if VECT = 'Q'
77
* (min(N,K)) if VECT = 'P'
78
* TAU(i) must contain the scalar factor of the elementary
79
* reflector H(i) or G(i), which determines Q or P**T, as
80
* returned by DGEBRD in its array argument TAUQ or TAUP.
82
* WORK (workspace/output) DOUBLE PRECISION array, dimension (LWORK)
83
* On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
85
* LWORK (input) INTEGER
86
* The dimension of the array WORK. LWORK >= max(1,min(M,N)).
87
* For optimum performance LWORK >= min(M,N)*NB, where NB
88
* is the optimal blocksize.
90
* INFO (output) INTEGER
91
* = 0: successful exit
92
* < 0: if INFO = -i, the i-th argument had an illegal value
94
173
* =====================================================================
96
175
* .. Parameters ..