SLAQR2(3)      LAPACK routine of NEC Numeric Library Collection      SLAQR2(3)



NAME
       SLAQR2

SYNOPSIS
       SUBROUTINE SLAQR2 (WANTT, WANTZ, N, KTOP, KBOT, NW, H, LDH, ILOZ, IHIZ,
           Z, LDZ, NS, ND, SR, SI, V, LDV, NH, T, LDT, NV, WV, LDWV, WORK,
           LWORK)



PURPOSE
               SLAQR2 is identical to SLAQR3 except that it avoids
               recursion by calling SLAHQR instead of SLAQR4.

               Aggressive early deflation:

               This subroutine accepts as input an upper Hessenberg matrix
               H and performs an orthogonal similarity transformation
               designed to detect and deflate fully converged eigenvalues from
               a trailing principal submatrix.  On output H has been over-
               written by a new Hessenberg matrix that is a perturbation of
               an orthogonal similarity transformation of H.  It is to be
               hoped that the final version of H has many zero subdiagonal
               entries.




ARGUMENTS
           WANTT     (input)
                     WANTT is LOGICAL
                     If .TRUE., then the Hessenberg matrix H is fully updated
                     so that the quasi-triangular Schur factor may be
                     computed (in cooperation with the calling subroutine).
                     If .FALSE., then only enough of H is updated to preserve
                     the eigenvalues.

           WANTZ     (input)
                     WANTZ is LOGICAL
                     If .TRUE., then the orthogonal matrix Z is updated so
                     so that the orthogonal Schur factor may be computed
                     (in cooperation with the calling subroutine).
                     If .FALSE., then Z is not referenced.

           N         (input)
                     N is INTEGER
                     The order of the matrix H and (if WANTZ is .TRUE.) the
                     order of the orthogonal matrix Z.

           KTOP      (input)
                     KTOP is INTEGER
                     It is assumed that either KTOP = 1 or H(KTOP,KTOP-1)=0.
                     KBOT and KTOP together determine an isolated block
                     along the diagonal of the Hessenberg matrix.

           KBOT      (input)
                     KBOT is INTEGER
                     It is assumed without a check that either
                     KBOT = N or H(KBOT+1,KBOT)=0.  KBOT and KTOP together
                     determine an isolated block along the diagonal of the
                     Hessenberg matrix.

           NW        (input)
                     NW is INTEGER
                     Deflation window size.  1 .LE. NW .LE. (KBOT-KTOP+1).

           H         (input/output)
                     H is REAL array, dimension (LDH,N)
                     On input the initial N-by-N section of H stores the
                     Hessenberg matrix undergoing aggressive early deflation.
                     On output H has been transformed by an orthogonal
                     similarity transformation, perturbed, and the returned
                     to Hessenberg form that (it is to be hoped) has some
                     zero subdiagonal entries.

           LDH       (input)
                     LDH is integer
                     Leading dimension of H just as declared in the calling
                     subroutine.  N .LE. LDH

           ILOZ      (input)
                     ILOZ is INTEGER

           IHIZ      (input)
                     IHIZ is INTEGER
                     Specify the rows of Z to which transformations must be
                     applied if WANTZ is .TRUE.. 1 .LE. ILOZ .LE. IHIZ .LE. N.

           Z         (input/output)
                     Z is REAL array, dimension (LDZ,N)
                     IF WANTZ is .TRUE., then on output, the orthogonal
                     similarity transformation mentioned above has been
                     accumulated into Z(ILOZ:IHIZ,ILO:IHI) from the right.
                     If WANTZ is .FALSE., then Z is unreferenced.

           LDZ       (input)
                     LDZ is integer
                     The leading dimension of Z just as declared in the
                     calling subroutine.  1 .LE. LDZ.

           NS        (output)
                     NS is integer
                     The number of unconverged (ie approximate) eigenvalues
                     returned in SR and SI that may be used as shifts by the
                     calling subroutine.

           ND        (output)
                     ND is integer
                     The number of converged eigenvalues uncovered by this
                     subroutine.

           SR        (output)
                     SR is REAL array, dimension KBOT

           SI        (output)
                     SI is REAL array, dimension KBOT
                     On output, the real and imaginary parts of approximate
                     eigenvalues that may be used for shifts are stored in
                     SR(KBOT-ND-NS+1) through SR(KBOT-ND) and
                     SI(KBOT-ND-NS+1) through SI(KBOT-ND), respectively.
                     The real and imaginary parts of converged eigenvalues
                     are stored in SR(KBOT-ND+1) through SR(KBOT) and
                     SI(KBOT-ND+1) through SI(KBOT), respectively.

           V         (output)
                     V is REAL array, dimension (LDV,NW)
                     An NW-by-NW work array.

           LDV       (input)
                     LDV is integer scalar
                     The leading dimension of V just as declared in the
                     calling subroutine.  NW .LE. LDV

           NH        (input)
                     NH is integer scalar
                     The number of columns of T.  NH.GE.NW.

           T         (output)
                     T is REAL array, dimension (LDT,NW)

           LDT       (input)
                     LDT is integer
                     The leading dimension of T just as declared in the
                     calling subroutine.  NW .LE. LDT

           NV        (input)
                     NV is integer
                     The number of rows of work array WV available for
                     workspace.  NV.GE.NW.

           WV        (output)
                     WV is REAL array, dimension (LDWV,NW)

           LDWV      (input)
                     LDWV is integer
                     The leading dimension of W just as declared in the
                     calling subroutine.  NW .LE. LDV

           WORK      (output)
                     WORK is REAL array, dimension LWORK.
                     On exit, WORK(1) is set to an estimate of the optimal value
                     of LWORK for the given values of N, NW, KTOP and KBOT.

           LWORK     (input)
                     LWORK is integer
                     The dimension of the work array WORK.  LWORK = 2*NW
                     suffices, but greater efficiency may result from larger
                     values of LWORK.

                     If LWORK = -1, then a workspace query is assumed; SLAQR2
                     only estimates the optimal workspace size for the given
                     values of N, NW, KTOP and KBOT.  The estimate is returned
                     in WORK(1).  No error message related to LWORK is issued
                     by XERBLA.  Neither H nor Z are accessed.



LAPACK routine                  31 October 2017                      SLAQR2(3)