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