Purpose
To overwrite general real m-by-n matrices C and D, or their
transposes, with
[ op(C) ]
Q * [ ] if TRANQ = 'N', or
[ op(D) ]
T [ op(C) ]
Q * [ ] if TRANQ = 'T',
[ op(D) ]
where Q is defined as the product of symplectic reflectors and
Givens rotators,
Q = diag( H(1),H(1) ) G(1) diag( F(1),F(1) )
diag( H(2),H(2) ) G(2) diag( F(2),F(2) )
....
diag( H(k),H(k) ) G(k) diag( F(k),F(k) ).
Unblocked version.
Specification
SUBROUTINE MB04QU( TRANC, TRAND, TRANQ, STOREV, STOREW, M, N, K,
$ V, LDV, W, LDW, C, LDC, D, LDD, CS, TAU, DWORK,
$ LDWORK, INFO )
C .. Scalar Arguments ..
CHARACTER STOREV, STOREW, TRANC, TRAND, TRANQ
INTEGER INFO, K, LDC, LDD, LDV, LDW, LDWORK, M, N
C .. Array Arguments ..
DOUBLE PRECISION CS(*), DWORK(*), C(LDC,*), D(LDD,*), V(LDV,*),
$ W(LDW,*), TAU(*)
Arguments
Mode Parameters
TRANC CHARACTER*1
Specifies the form of op( C ) as follows:
= 'N': op( C ) = C;
= 'T': op( C ) = C';
= 'C': op( C ) = C'.
STOREV CHARACTER*1
Specifies how the vectors which define the concatenated
Householder reflectors contained in V are stored:
= 'C': columnwise;
= 'R': rowwise.
STOREW CHARACTER*1
Specifies how the vectors which define the concatenated
Householder reflectors contained in W are stored:
= 'C': columnwise;
= 'R': rowwise.
TRAND CHARACTER*1
Specifies the form of op( D ) as follows:
= 'N': op( D ) = D;
= 'T': op( D ) = D';
= 'C': op( D ) = D'.
TRANQ CHARACTER*1
= 'N': apply Q;
= 'T': apply Q'.
Input/Output Parameters
M (input) INTEGER
The number of rows of the matrices op(C) and op(D).
M >= 0.
N (input) INTEGER
The number of columns of the matrices op(C) and op(D).
N >= 0.
K (input) INTEGER
The number of elementary reflectors whose product defines
the matrix Q. M >= K >= 0.
V (input) DOUBLE PRECISION array, dimension
(LDV,K) if STOREV = 'C',
(LDV,M) if STOREV = 'R'
On entry with STOREV = 'C', the leading M-by-K part of
this array must contain in its columns the vectors which
define the elementary reflectors F(i).
On entry with STOREV = 'R', the leading K-by-M part of
this array must contain in its rows the vectors which
define the elementary reflectors F(i).
LDV INTEGER
The leading dimension of the array V.
LDV >= MAX(1,M), if STOREV = 'C';
LDV >= MAX(1,K), if STOREV = 'R'.
W (input) DOUBLE PRECISION array, dimension
(LDW,K) if STOREW = 'C',
(LDW,M) if STOREW = 'R'
On entry with STOREW = 'C', the leading M-by-K part of
this array must contain in its columns the vectors which
define the elementary reflectors H(i).
On entry with STOREW = 'R', the leading K-by-M part of
this array must contain in its rows the vectors which
define the elementary reflectors H(i).
LDW INTEGER
The leading dimension of the array W.
LDW >= MAX(1,M), if STOREW = 'C';
LDW >= MAX(1,K), if STOREW = 'R'.
C (input/output) DOUBLE PRECISION array, dimension
(LDC,N) if TRANC = 'N',
(LDC,M) if TRANC = 'T' or TRANC = 'C'
On entry with TRANC = 'N', the leading M-by-N part of
this array must contain the matrix C.
On entry with TRANC = 'C' or TRANC = 'T', the leading
N-by-M part of this array must contain the transpose of
the matrix C.
On exit with TRANC = 'N', the leading M-by-N part of
this array contains the updated matrix C.
On exit with TRANC = 'C' or TRANC = 'T', the leading
N-by-M part of this array contains the transpose of the
updated matrix C.
LDC INTEGER
The leading dimension of the array C.
LDC >= MAX(1,M), if TRANC = 'N';
LDC >= MAX(1,N), if TRANC = 'T' or TRANC = 'C'.
D (input/output) DOUBLE PRECISION array, dimension
(LDD,N) if TRAND = 'N',
(LDD,M) if TRAND = 'T' or TRAND = 'C'
On entry with TRAND = 'N', the leading M-by-N part of
this array must contain the matrix D.
On entry with TRAND = 'C' or TRAND = 'T', the leading
N-by-M part of this array must contain the transpose of
the matrix D.
On exit with TRAND = 'N', the leading M-by-N part of
this array contains the updated matrix D.
On exit with TRAND = 'C' or TRAND = 'T', the leading
N-by-M part of this array contains the transpose of the
updated matrix D.
LDD INTEGER
The leading dimension of the array D.
LDD >= MAX(1,M), if TRAND = 'N';
LDD >= MAX(1,N), if TRAND = 'T' or TRAND = 'C'.
CS (input) DOUBLE PRECISION array, dimension (2*K)
On entry, the first 2*K elements of this array must
contain the cosines and sines of the symplectic Givens
rotators G(i).
TAU (input) DOUBLE PRECISION array, dimension (K)
On entry, the first K elements of this array must
contain the scalar factors of the elementary reflectors
F(i).
Workspace
DWORK DOUBLE PRECISION array, dimension (LDWORK)
On exit, if INFO = 0, DWORK(1) returns the optimal
value of LDWORK.
On exit, if INFO = -20, DWORK(1) returns the minimum
value of LDWORK.
LDWORK INTEGER
The length of the array DWORK. LDWORK >= MAX(1,N).
Error Indicator
INFO INTEGER
= 0: successful exit;
< 0: if INFO = -i, the i-th argument had an illegal
value.
Further Comments
NoneExample
Program Text
NoneProgram Data
NoneProgram Results
None