## MB02CY

### Applying the MB02CX transformations on other columns / rows of the generator

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

Purpose

      To apply the transformations created by the SLICOT Library
      routine MB02CX on other columns / rows of the generator,
      contained in the arrays A and B of positive and negative
      generators, respectively.

Specification

          SUBROUTINE MB02CY( TYPET, STRUCG, P, Q, N, K, A, LDA, B, LDB, H,
         $                   LDH, CS, LCS, DWORK, LDWORK, INFO )
    C     .. Scalar Arguments ..
          INTEGER           INFO, K, LDA, LDB, LCS, LDH, LDWORK, N, P, Q
          CHARACTER         STRUCG, TYPET
    C     .. Array Arguments ..
          DOUBLE PRECISION  A(LDA, *), B(LDB, *), CS(*), DWORK(*), H(LDH,*)

Arguments

Mode Parameters

      TYPET   CHARACTER*1
              Specifies the type of the generator, as follows:
              = 'R':  A and B are additional columns of the generator;
              = 'C':  A and B are additional rows of the generator.
              Note:   in the sequel, the notation x / y means that
                      x corresponds to TYPET = 'R' and y corresponds to
                      TYPET = 'C'.

      STRUCG  CHARACTER*1
              Information about the structure of the two generators,
              as follows:
              = 'T':  the trailing block of the positive generator
                      is lower / upper triangular, and the trailing
                      block of the negative generator is zero;
              = 'N':  no special structure to mention.

Input/Output Parameters

      P       (input)  INTEGER
              The number of rows / columns in A containing the positive
              generators.  P >= 0.

      Q       (input)  INTEGER
              The number of rows / columns in B containing the negative
              generators.  Q >= 0.

      N       (input)  INTEGER
              The number of columns / rows in A and B to be processed.
              N >= 0.

      K       (input)  INTEGER
              The number of columns / rows in H.  P >= K >= 0.

      A       (input/output)  DOUBLE PRECISION array, dimension
              (LDA, N) / (LDA, P)
              On entry, the leading P-by-N / N-by-P part of this array
              must contain the positive part of the generator.
              On exit, the leading P-by-N / N-by-P part of this array
              contains the transformed positive part of the generator.

      LDA     INTEGER
              The leading dimension of the array A.
              LDA >= MAX(1,P),    if TYPET = 'R';
              LDA >= MAX(1,N),    if TYPET = 'C'.

      B       (input/output)  DOUBLE PRECISION array, dimension
              (LDB, N) / (LDB, Q)
              On entry, the leading Q-by-N / N-by-Q part of this array
              must contain the negative part of the generator.
              On exit, the leading Q-by-N / N-by-Q part of this array
              contains the transformed negative part of the generator.

      LDB     INTEGER
              The leading dimension of the array B.
              LDB >= MAX(1,Q),    if TYPET = 'R';
              LDB >= MAX(1,N),    if TYPET = 'C'.

      H       (input)  DOUBLE PRECISION array, dimension
              (LDH, K) / (LDH, Q)
              The leading Q-by-K / K-by-Q part of this array must
              contain part of the necessary information for the
              Householder transformations computed by SLICOT Library
              routine MB02CX.

      LDH     INTEGER
              The leading dimension of the array H.
              LDH >= MAX(1,Q),    if TYPET = 'R';
              LDH >= MAX(1,K),    if TYPET = 'C'.

      CS      (input)  DOUBLE PRECISION array, dimension (LCS)
              The leading 2*K + MIN(K,Q) part of this array must
              contain the necessary information for modified hyperbolic
              rotations and the scalar factors of the Householder
              transformations computed by SLICOT Library routine MB02CX.

      LCS     INTEGER
              The length of the array CS.  LCS >= 2*K + MIN(K,Q).

Workspace

      DWORK   DOUBLE PRECISION array, dimension (LDWORK)
              On exit, if  INFO = 0,  DWORK(1)  returns the optimal
              value of LDWORK.
              On exit, if  INFO = -16,  DWORK(1)  returns the minimum
              value of LDWORK.

      LDWORK  INTEGER
              The length of the array DWORK.  LDWORK >= MAX(1,N).
              For optimum performance LDWORK should be larger.

Error Indicator

      INFO    INTEGER
              = 0:  succesful exit;
              < 0:  if INFO = -i, the i-th argument had an illegal
                    value.

Method

      The Householder transformations and modified hyperbolic rotations
      computed by SLICOT Library routine MB02CX are applied to the
      corresponding parts of the matrices A and B.

Further Comments

      None

Example

Program Text

      None

Program Data

      None

Program Results

      None

Return to Supporting Routines index