# corth.f

          SUBROUTINE CORTH (NM, N, LOW, IGH, AR, AI, ORTR, ORTI)
    C***BEGIN PROLOGUE  CORTH
    C***PURPOSE  Reduce a complex general matrix to complex upper Hessenberg
    C            form using unitary similarity transformations.
    C***LIBRARY   SLATEC (EISPACK)
    C***CATEGORY  D4C1B2
    C***TYPE      COMPLEX (ORTHES-S, CORTH-C)
    C***KEYWORDS  EIGENVALUES, EIGENVECTORS, EISPACK
    C***AUTHOR  Smith, B. T., et al.
    C***DESCRIPTION
    C
    C     This subroutine is a translation of a complex analogue of
    C     the ALGOL procedure ORTHES, NUM. MATH. 12, 349-368(1968)
    C     by Martin and Wilkinson.
    C     HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 339-358(1971).
    C
    C     Given a COMPLEX GENERAL matrix, this subroutine
    C     reduces a submatrix situated in rows and columns
    C     LOW through IGH to upper Hessenberg form by
    C     unitary similarity transformations.
    C
    C     On INPUT
    C
    C        NM must be set to the row dimension of the two-dimensional
    C          array parameters, AR and AI, as declared in the calling
    C          program dimension statement.  NM is an INTEGER variable.
    C
    C        N is the order of the matrix A=(AR,AI).  N is an INTEGER
    C          variable.  N must be less than or equal to NM.
    C
    C        LOW and IGH are two INTEGER variables determined by the
    C          balancing subroutine  CBAL.  If  CBAL  has not been used,
    C          set LOW=1 and IGH equal to the order of the matrix, N.
    C
    C        AR and AI contain the real and imaginary parts, respectively,
    C          of the complex input matrix.  AR and AI are two-dimensional
    C          REAL arrays, dimensioned AR(NM,N) and AI(NM,N).
    C
    C     On OUTPUT
    C
    C        AR and AI contain the real and imaginary parts, respectively,
    C          of the Hessenberg matrix.  Information about the unitary
    C          transformations used in the reduction is stored in the
    C          remaining triangles under the Hessenberg matrix.
    C
    C        ORTR and ORTI contain further information about the unitary
    C          transformations.  Only elements LOW through IGH are used.
    C          ORTR and ORTI are one-dimensional REAL arrays, dimensioned
    C          ORTR(IGH) and ORTI(IGH).
    C
    C     Calls PYTHAG(A,B) for sqrt(A**2 + B**2).
    C
    C     Questions and comments should be directed to B. S. Garbow,
    C     APPLIED MATHEMATICS DIVISION, ARGONNE NATIONAL LABORATORY
    C     ------------------------------------------------------------------
    C
    C***REFERENCES  B. T. Smith, J. M. Boyle, J. J. Dongarra, B. S. Garbow,
    C                 Y. Ikebe, V. C. Klema and C. B. Moler, Matrix Eigen-
    C                 system Routines - EISPACK Guide, Springer-Verlag,
    C                 1976.
    C***ROUTINES CALLED  PYTHAG
    C***REVISION HISTORY  (YYMMDD)
    C   760101  DATE WRITTEN
    C   890831  Modified array declarations.  (WRB)
    C   890831  REVISION DATE from Version 3.2
    C   891214  Prologue converted to Version 4.0 format.  (BAB)
    C   920501  Reformatted the REFERENCES section.  (WRB)
    C***END PROLOGUE  CORTH