ml_comqr3 Subroutine

subroutine ml_comqr3(nm, n, low, igh, ortr, orti, hr, hi, wr, wi, zr, zi, ierr, job)

Uses


 MODIFICATION OF EISPACK COMQR2 TO ADD JOB PARAMETER
 JOB = 0  OUTPUT H = SCHUR TRIANGULAR FORM, Z NOT USED
     = 1  OUTPUT H = SCHUR FORM, Z = UNITARY SIMILARITY
     = 2  SAME AS COMQR2
     = 3  OUTPUT H = HESSENBERG FORM, Z = UNITARY SIMILARITY
 ALSO ELIMINATE MACHEP
 C. MOLER, 11/22/78 AND 09/14/80
 OVERFLOW CONTROL IN EIGENVECTOR BACKSUBSTITUTION, 3/16/82

 THIS SUBROUTINE IS A TRANSLATION OF A UNITARY ANALOGUE OF THE
 ALGOL PROCEDURE  COMLR2, NUM. MATH. 16, 181-204(1970) BY PETERS
 AND WILKINSON.
 HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 372-395(1971).
 THE UNITARY ANALOGUE SUBSTITUTES THE QR ALGORITHM OF FRANCIS
 (COMP. JOUR. 4, 332-345(1962)) FOR THE LR ALGORITHM.

 THIS SUBROUTINE FINDS THE EIGENVALUES AND EIGENVECTORS
 OF A COMPLEX UPPER HESSENBERG MATRIX BY THE QR
 METHOD. THE EIGENVECTORS OF A COMPLEX GENERAL MATRIX
 CAN ALSO BE FOUND IF  CORTH  HAS BEEN USED TO REDUCE
 THIS GENERAL MATRIX TO HESSENBERG FORM.

 ON INPUT.

    NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL
      ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM
      DIMENSION STATEMENT.

    N IS THE ORDER OF THE MATRIX.

    LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING
      SUBROUTINE ML_CBAL. IF  CBAL  HAS NOT BEEN USED,
      SET LOW=1, IGH=N.

    ORTR AND ORTI CONTAIN INFORMATION ABOUT THE UNITARY TRANS-
      FORMATIONS USED IN THE REDUCTION BY  CORTH, IF PERFORMED.
      ONLY ELEMENTS LOW THROUGH IGH ARE USED. IF THE EIGENVECTORS
      OF THE HESSENBERG MATRIX ARE DESIRED, SET ORTR(J) AND
      ORTI(J) TO 0.0D0 FOR THESE ELEMENTS.

    HR AND HI CONTAIN THE REAL AND IMAGINARY PARTS,
      RESPECTIVELY, OF THE COMPLEX UPPER HESSENBERG MATRIX.
      THEIR LOWER TRIANGLES BELOW THE SUBDIAGONAL CONTAIN FURTHER
      INFORMATION ABOUT THE TRANSFORMATIONS WHICH WERE USED IN THE
      REDUCTION BY  CORTH, IF PERFORMED. IF THE EIGENVECTORS OF
      THE HESSENBERG MATRIX ARE DESIRED, THESE ELEMENTS MAY BE
      ARBITRARY.

 ON OUTPUT.

    ORTR, ORTI, AND THE UPPER HESSENBERG PORTIONS OF HR AND HI
      HAVE BEEN DESTROYED.

    WR AND WI CONTAIN THE REAL AND IMAGINARY PARTS,
      RESPECTIVELY, OF THE EIGENVALUES. IF AN ERROR
      EXIT IS MADE, THE EIGENVALUES SHOULD BE CORRECT
      FOR INDICES IERR+1,...,N.

    ZR AND ZI CONTAIN THE REAL AND IMAGINARY PARTS,
      RESPECTIVELY, OF THE EIGENVECTORS. THE EIGENVECTORS
      ARE UNNORMALIZED. IF AN ERROR EXIT IS MADE, NONE OF
      THE EIGENVECTORS HAS BEEN FOUND.

    IERR IS SET TO
      ZERO       FOR NORMAL RETURN,
      J          IF THE J-TH EIGENVALUE HAS NOT BEEN

DETERMINED AFTER A TOTAL OF 30*N ITERATIONS.

 MODIFIED TO GET RID OF ALL COMPLEX ARITHMETIC, C. MOLER, 6/27/79.

 QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO B. S. GARBOW,
 APPLIED MATHEMATICS DIVISION, ARGONNE NATIONAL LABORATORY

 ------------------------------------------------------------------


 .......... INITIALIZE EIGENVECTOR MATRIX ..........


 .......... CREATE REAL SUBDIAGONAL ELEMENTS ..........


**** THE FOLLOWING SECTION CHANGED FOR OVERFLOW CONTROL C. MOLER, 3/16/82


 .......... END BACKSUBSTITUTION ..........






Arguments

Type IntentOptional Attributes Name
integer :: nm
integer :: n
integer :: low
integer :: igh
double precision :: ortr(igh)
double precision :: orti(igh)
double precision :: hr(nm,n)
double precision :: hi(nm,n)
double precision :: wr(n)
double precision :: wi(n)
double precision :: zr(nm,n)
double precision :: zi(nm,n)
integer :: ierr
integer :: job

Variables

Type Visibility Attributes Name Initial
integer, public :: en
integer, public :: enm1
integer, public :: i
integer, public :: iend
integer, public :: ii
integer, public :: ip1
integer, public :: itn
integer, public :: its
integer, public :: j
integer, public :: jj
integer, public :: k
integer, public :: l
integer, public :: ll
integer, public :: lp1
integer, public :: m
integer, public :: nn
double precision, public :: norm
double precision, public :: si
integer, public :: spag_nextblock_1
double precision, public :: sr
double precision, public :: ti
double precision, public :: tr
double precision, public :: xi
double precision, public :: xr
double precision, public :: yi
double precision, public :: yr
double precision, public :: zzi
double precision, public :: zzr

Source Code

   subroutine ml_comqr3(nm, n, low, igh, ortr, orti, hr, hi, wr, wi, zr, zi, ierr, job)
      import  int32, real64
      integer(kind=int32) :: igh
      integer(kind=int32) :: n
      integer(kind=int32) :: nm
      integer(kind=int32) :: low
      real(kind=real64) :: ortr(igh)
      real(kind=real64) :: orti(igh)
      real(kind=real64) :: hr(nm, n)
      real(kind=real64) :: hi(nm, n)
      real(kind=real64) :: wr(n)
      real(kind=real64) :: wi(n)
      real(kind=real64) :: zr(nm, n)
      real(kind=real64) :: zi(nm, n)
      integer(kind=int32) :: ierr
      integer(kind=int32) :: job
   end subroutine ml_comqr3