Purpose
To swap diagonal blocks A11 and A22 of order 1 or 2 in the upper
quasi-triangular matrix A contained in a skew-Hamiltonian matrix
[ A G ] T
X = [ T ], G = -G,
[ 0 A ]
or in a Hamiltonian matrix
[ A G ] T
X = [ T ], G = G.
[ 0 -A ]
This routine is a modified version of the LAPACK subroutine
DLAEX2.
The matrix A must be in Schur canonical form (as returned by the
LAPACK routine DHSEQR), that is, block upper triangular with
1-by-1 and 2-by-2 diagonal blocks; each 2-by-2 diagonal block has
its diagonal elements equal and its off-diagonal elements of
opposite sign.
Specification
SUBROUTINE MB03TS( ISHAM, WANTU, N, A, LDA, G, LDG, U1, LDU1, U2,
$ LDU2, J1, N1, N2, DWORK, INFO )
C .. Scalar Arguments ..
LOGICAL ISHAM, WANTU
INTEGER INFO, J1, LDA, LDG, LDU1, LDU2, N, N1, N2
C .. Array Arguments ..
DOUBLE PRECISION A(LDA,*), DWORK(*), G(LDG,*), U1(LDU1,*),
$ U2(LDU2,*)
Arguments
Mode Parameters
ISHAM LOGIGAL
Specifies the type of X:
= .TRUE.: X is a Hamiltonian matrix;
= .FALSE.: X is a skew-Hamiltonian matrix.
WANTU LOGIGAL
= .TRUE.: update the matrices U1 and U2 containing the
Schur vectors;
= .FALSE.: do not update U1 and U2.
Input/Output Parameters
N (input) INTEGER
The order of the matrix A. N >= 0.
A (input/output) DOUBLE PRECISION array, dimension (LDA,N)
On entry, the leading N-by-N part of this array must
contain the upper quasi-triangular matrix A, in Schur
canonical form.
On exit, the leading N-by-N part of this array contains
the reordered matrix A, again in Schur canonical form.
LDA INTEGER
The leading dimension of the array A. LDA >= MAX(1,N).
G (input/output) DOUBLE PRECISION array, dimension (LDG,N)
On entry, the leading N-by-N part of this array must
contain the upper triangular part of the symmetric
matrix G, if ISHAM = .TRUE., or the strictly upper
triangular part of the skew-symmetric matrix G, otherwise.
The rest of this array is not referenced.
On exit, the leading N-by-N part of this array contains
the upper or strictly upper triangular part of the
symmetric or skew-symmetric matrix G, respectively,
updated by the orthogonal transformation which reorders A.
LDG INTEGER
The leading dimension of the array G. LDG >= MAX(1,N).
U1 (input/output) DOUBLE PRECISION array, dimension (LDU1,N)
On entry, if WANTU = .TRUE., the leading N-by-N part of
this array must contain the matrix U1.
On exit, if WANTU = .TRUE., the leading N-by-N part of
this array contains U1, postmultiplied by the orthogonal
transformation which reorders A. See the description in
the SLICOT subroutine MB03TD for further details.
If WANTU = .FALSE., this array is not referenced.
LDU1 INTEGER
The leading dimension of the array U1.
LDU1 >= MAX(1,N), if WANTU = .TRUE.;
LDU1 >= 1, otherwise.
U2 (input/output) DOUBLE PRECISION array, dimension (LDU2,N)
On entry, if WANTU = .TRUE., the leading N-by-N part of
this array must contain the matrix U2.
On exit, if WANTU = .TRUE., the leading N-by-N part of
this array contains U2, postmultiplied by the orthogonal
transformation which reorders A.
If WANTU = .FALSE., this array is not referenced.
LDU2 INTEGER
The leading dimension of the array U2.
LDU2 >= MAX(1,N), if WANTU = .TRUE.;
LDU2 >= 1, otherwise.
J1 (input) INTEGER
The index of the first row of the first block A11.
If J1+N1 < N, then A11 is swapped with the block starting
at (J1+N1+1)-th diagonal element.
If J1+N1 > N, then A11 is the last block in A and swapped
with -A11', if ISHAM = .TRUE.,
or A11', if ISHAM = .FALSE..
N1 (input) INTEGER
The order of the first block A11. N1 = 0, 1 or 2.
N2 (input) INTEGER
The order of the second block A22. N2 = 0, 1 or 2.
Workspace
DWORK DOUBLE PRECISION array, dimension (N)Error Indicator
INFO INTEGER
= 0: successful exit;
= 1: the transformed matrix A would be too far from Schur
form; the blocks are not swapped and A, G, U1 and
U2 are unchanged.
References
[1] Bai, Z., and Demmel, J.W.
On swapping diagonal blocks in real Schur form.
Linear Algebra Appl., 186, pp. 73-95, 1993.
[2] Benner, P., Kressner, D., and Mehrmann, V.
Skew-Hamiltonian and Hamiltonian Eigenvalue Problems: Theory,
Algorithms and Applications. Techn. Report, TU Berlin, 2003.
Further Comments
NoneExample
Program Text
NoneProgram Data
NoneProgram Results
None