text:       subroutine rg(nm,n,a,wr,wi,matz,z,iv1,fv1,ierr)
  c
        integer n,nm,is1,is2,ierr,matz
        double precision a(nm,n),wr(n),wi(n),z(nm,n),fv1(n)
        integer iv1(n)
  c
  c     this subroutine calls the recommended sequence of
  c     subroutines from the eigensystem subroutine package (eispack)
  c     to find the eigenvalues and eigenvectors (if desired)
  c     of a real general matrix.
  c
  c     on input
  c
  c        nm  must be set to the row dimension of the two-dimensional
  c        array parameters as declared in the calling program
  c        dimension statement.
  c
  c        n  is the order of the matrix  a.
  c
  c        a  contains the real general matrix.
  c
  c        matz  is an integer variable set equal to zero if
  c        only eigenvalues are desired.  otherwise it is set to
  c        any non-zero integer for both eigenvalues and eigenvectors.
  c
  c     on output
  c
  c        wr  and  wi  contain the real and imaginary parts,
  c        respectively, of the eigenvalues.  complex conjugate
  c        pairs of eigenvalues appear consecutively with the
  c        eigenvalue having the positive imaginary part first.
  c
  c        z  contains the real and imaginary parts of the eigenvectors
  c        if matz is not zero.  if the j-th eigenvalue is real, the
  c        j-th column of  z  contains its eigenvector.  if the j-th
  c        eigenvalue is complex with positive imaginary part, the
  c        j-th and (j+1)-th columns of  z  contain the real and
  c        imaginary parts of its eigenvector.  the conjugate of this
  c        vector is the eigenvector for the conjugate eigenvalue.
  c
  c        ierr  is an integer output variable set equal to an error
  c           completion code described in the documentation for hqr
  c           and hqr2.  the normal completion code is zero.
  c
  c        iv1  and  fv1  are temporary storage arrays.
  c
  c     questions and comments should be directed to burton s. garbow,
  c     mathematics and computer science div, argonne national laboratory
  c
  c     this version dated august 1983.
  c
  c     ------------------------------------------------------------------
  c
        if (n .le. nm) go to 10
        ierr = 10 * n
        go to 50
  c
     10 call  balanc(nm,n,a,is1,is2,fv1)
        call  elmhes(nm,n,is1,is2,a,iv1)
        if (matz .ne. 0) go to 20
  c     .......... find eigenvalues only ..........
        call  hqr(nm,n,is1,is2,a,wr,wi,ierr)
        go to 50
  c     .......... find both eigenvalues and eigenvectors ..........
     20 call  eltran(nm,n,is1,is2,a,iv1,z)
        call  hqr2(nm,n,is1,is2,a,wr,wi,z,ierr)
        if (ierr .ne. 0) go to 50
        call  balbak(nm,n,is1,is2,fv1,n,z)
     50 return
        end
  