Purpose
To generate a matrix Q with orthogonal columns (spanning an
isotropic subspace), which is defined as the first n columns
of a 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) ).
The matrix Q is returned in terms of its first 2*M rows
[ op( Q1 ) op( Q2 ) ]
Q = [ ].
[ -op( Q2 ) op( Q1 ) ]
Specification
SUBROUTINE MB04WU( TRANQ1, TRANQ2, M, N, K, Q1, LDQ1, Q2, LDQ2,
$ CS, TAU, DWORK, LDWORK, INFO )
C .. Scalar Arguments ..
CHARACTER TRANQ1, TRANQ2
INTEGER INFO, K, LDQ1, LDQ2, LDWORK, M, N
C .. Array Arguments ..
DOUBLE PRECISION CS(*), DWORK(*), Q1(LDQ1,*), Q2(LDQ2,*), TAU(*)
Arguments
Mode Parameters
TRANQ1 CHARACTER*1
Specifies the form of op( Q1 ) as follows:
= 'N': op( Q1 ) = Q1;
= 'T': op( Q1 ) = Q1';
= 'C': op( Q1 ) = Q1'.
TRANQ2 CHARACTER*1
Specifies the form of op( Q2 ) as follows:
= 'N': op( Q2 ) = Q2;
= 'T': op( Q2 ) = Q2';
= 'C': op( Q2 ) = Q2'.
Input/Output Parameters
M (input) INTEGER
The number of rows of the matrices Q1 and Q2. M >= 0.
N (input) INTEGER
The number of columns of the matrices Q1 and Q2.
M >= N >= 0.
K (input) INTEGER
The number of symplectic Givens rotators whose product
partly defines the matrix Q. N >= K >= 0.
Q1 (input/output) DOUBLE PRECISION array, dimension
(LDQ1,N) if TRANQ1 = 'N',
(LDQ1,M) if TRANQ1 = 'T' or TRANQ1 = 'C'
On entry with TRANQ1 = 'N', the leading M-by-K part of
this array must contain in its i-th column the vector
which defines the elementary reflector F(i).
On entry with TRANQ1 = 'T' or TRANQ1 = 'C', the leading
K-by-M part of this array must contain in its i-th row
the vector which defines the elementary reflector F(i).
On exit with TRANQ1 = 'N', the leading M-by-N part of this
array contains the matrix Q1.
On exit with TRANQ1 = 'T' or TRANQ1 = 'C', the leading
N-by-M part of this array contains the matrix Q1'.
LDQ1 INTEGER
The leading dimension of the array Q1.
LDQ1 >= MAX(1,M), if TRANQ1 = 'N';
LDQ1 >= MAX(1,N), if TRANQ1 = 'T' or TRANQ1 = 'C'.
Q2 (input/output) DOUBLE PRECISION array, dimension
(LDQ2,N) if TRANQ2 = 'N',
(LDQ2,M) if TRANQ2 = 'T' or TRANQ2 = 'C'
On entry with TRANQ2 = 'N', the leading M-by-K part of
this array must contain in its i-th column the vector
which defines the elementary reflector H(i) and, on the
diagonal, the scalar factor of H(i).
On entry with TRANQ2 = 'T' or TRANQ2 = 'C', the leading
K-by-M part of this array must contain in its i-th row the
vector which defines the elementary reflector H(i) and, on
the diagonal, the scalar factor of H(i).
On exit with TRANQ2 = 'N', the leading M-by-N part of this
array contains the matrix Q2.
On exit with TRANQ2 = 'T' or TRANQ2 = 'C', the leading
N-by-M part of this array contains the matrix Q2'.
LDQ2 INTEGER
The leading dimension of the array Q2.
LDQ2 >= MAX(1,M), if TRANQ2 = 'N';
LDQ2 >= MAX(1,N), if TRANQ2 = 'T' or TRANQ2 = '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 = -13, DWORK(1) returns the minimum
value of LDWORK.
LDWORK INTEGER
The length of the array DWORK. LDWORK >= MAX(1,M+N).
Error Indicator
INFO INTEGER
= 0: successful exit;
< 0: if INFO = -i, the i-th argument had an illegal
value.
References
[1] Bunse-Gerstner, A.
Matrix factorizations for symplectic QR-like methods.
Linear Algebra Appl., 83, pp. 49-77, 1986.
Further Comments
NoneExample
Program Text
NoneProgram Data
NoneProgram Results
None