MB04WU

Generating an orthogonal basis spanning an isotropic subspace (unblocked version)

[Specification] [Arguments] [Method] [References] [Comments] [Example]

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 rotations,

      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 rotations 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
          rotations 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
  None
Example

Program Text

  None
Program Data
  None
Program Results
  None

Return to Supporting Routines index