Purpose
  To compute for a single-input single-output descriptor system,
  given by the system matrix
     [ D     C    ]
     [ B  A - s*E ],
  with E nonsingular, a reduced system matrix,
     [ d     c    ]
     [ b  a - s*e ],
  such that d has a "sufficiently" large magnitude.
Specification
      SUBROUTINE TG01OD( JOBE, N, DCBA, LDDCBA, E, LDE, NZ, G, TOL,
     $                   DWORK, LDWORK, INFO )
C     .. Scalar Arguments ..
      CHARACTER         JOBE
      INTEGER           INFO, LDDCBA, LDWORK, LDE, N, NZ
      DOUBLE PRECISION  G, TOL
C     .. Array Arguments ..
      DOUBLE PRECISION  DCBA(LDDCBA,*), DWORK(*), E(LDE,*)
Arguments
Mode Parameters
  JOBE    CHARACTER*1
          Specifies whether E is a general or an identity matrix,
          as follows:
          = 'G':  The matrix E is a general matrix;
          = 'I':  The matrix E is assumed identity and is not given.
Input/Output Parameters
  N       (input) INTEGER
          The dimension of the descriptor state vector; also the
          order of square matrices A and E, the number of rows of
          matrix B, and the number of columns of matrix C.  N >= 0.
  DCBA    (input/output) DOUBLE PRECISION array, dimension
          (LDDCBA,N+1)
          On entry, the leading (N+1)-by-(N+1) part of this array
          must contain the original system matrices A, B, C, and D,
          stored as follows
             [ D  C ]
             [ B  A ].
          On exit, the leading (NZ+1)-by-(NZ+1) part of this array
          contains the reduced system matrices a, b, c, and d.
  LDDCBA  INTEGER
          The leading dimension of the array DCBA.  LDDCBA >= N+1.
  E       (input/output) DOUBLE PRECISION array, dimension (LDE,*)
          On entry, if JOBE = 'G', the leading N-by-N part of this
          array must contain the nonsingular descriptor matrix E.
          On exit, if JOBE = 'G', the leading NZ-by-NZ part of this
          array contains the reduced descriptor matrix e.
          If JOBE = 'I', this array is not referenced.
  LDE     INTEGER
          The leading dimension of the array E.
          LDE >= MAX(1,N), if JOBE = 'G';
          LDE >= 1,        if JOBE = 'I'.
  NZ      (output) INTEGER
          The order of the reduced system.
  G       (output) DOUBLE PRECISION
          The gain of the reduced system.
Tolerances
  TOL     DOUBLE PRECISION
          The tolerance to be used in determining if the transformed
          d has a "sufficiently" large magnitude. If the user sets
          TOL > 0, then the given value of TOL is used. If the user
          sets TOL <= 0, then an implicitly computed, default
          tolerance, defined by TOLDEF = EPS**(3/4), is used
          instead, where EPS is the machine precision (see LAPACK
          Library routine DLAMCH).
Workspace
  DWORK   DOUBLE PRECISION array, dimension (LDWORK)
          On exit, if INFO = 0, DWORK(1) returns the optimal value
          of LDWORK.
          On exit, if INFO = -11, DWORK(1) returns the minimum value
          of LDWORK.
  LDWORK  INTEGER
          The length of the array DWORK.
          LDWORK >= 2*N+1,  if JOBE = 'G';
          LDWORK >=   N+1,  if JOBE = 'I'.
          For good performance when JOBE = 'G', LDWORK should be
          larger. Specifically,
             LDWORK >= MAX( N*NB(DGEQRF), (N+1)*NB(DORMQR) ),
          where NB(X) is the optimal block sizes for the LAPACK
          Library routine X.
          If LDWORK = -1, then a workspace query is assumed;
          the routine only calculates the optimal size of the
          DWORK array, returns this value as the first entry of
          the DWORK array, and no error message related to LDWORK
          is issued by XERBLA.
Error Indicator
  INFO    INTEGER
          = 0:  successful exit;
          < 0:  if INFO = -i, the i-th argument had an illegal
                value.
Method
Householder transformations and Givens rotations are used to process the matrices. If E is a general matrix, it is first triangularized using the QR decomposition, and the triangular form is preserved during the remaining computations.Numerical Aspects
The algorithm is numerically backward stable.Further Comments
NoneExample
Program Text
NoneProgram Data
NoneProgram Results
None