SLAQR6(3)     ScaLAPACK routine of NEC Numeric Library Collection    SLAQR6(3)



NAME
       SLAQR6 - performs a single small-bulge multi-shift QR sweep, moving the
       chain   of   bulges   from   top   to   bottom   in    the    submatrix
       H(KTOP:KBOT,KTOP:KBOT), collecting the transformations in the matrix HV
       *or* accumulating the transformations in the matrix Z (see below)

SYNOPSIS
       SUBROUTINE SLAQR6(  JOB, WANTT, WANTZ, KACC22, N, KTOP,  KBOT,  NSHFTS,
                           SR, SI, H, LDH, ILOZ, IHIZ, Z, LDZ, V, LDV, U, LDU,
                           NV, WV, LDWV, NH, WH, LDWH )

           CHARACTER       JOB

           INTEGER         IHIZ, ILOZ, KACC22,  KBOT,  KTOP,  LDH,  LDU,  LDV,
                           LDWH, LDWV, LDZ, N, NH, NSHFTS, NV

           LOGICAL         WANTT, WANTZ

           REAL            H( LDH, * ), SI( * ), SR( * ), U( LDU, * ), V( LDV,
                           * ), WH( LDWH, * ), WV( LDWV, * ), Z( LDZ, * )

PURPOSE
       This auxiliary subroutine called by PDLAQR5 performs  a  single  small-
       bulge multi-shift QR sweep, moving the chain of bulges from top to bot-
       tom in the submatrix H(KTOP:KBOT,KTOP:KBOT), collecting the transforma-
       tions  in  the  matrix  HV *or* accumulating the transformations in the
       matrix Z (see below).


ARGUMENTS
       JOB    (input) CHARACTER scalar
               Set the kind of job to do in SLAQR6, as follows:
               JOB = 'I': Introduce and chase bulges in submatrix
               JOB = 'C': Chase bulges from top to bottom of submatrix
               JOB = 'O': Chase bulges off submatrix

       WANTT  (input) LOGICAL scalar
               WANTT = .true. if the quasi-triangular Schur  factor  is  being
               computed.  WANTT is set to .false. otherwise.

       WANTZ  (input) LOGICAL scalar
               WANTZ  =  .true.  if  the orthogonal Schur factor is being com-
               puted.  WANTZ is set to .false. otherwise.

       KACC22 (input) INTEGER with value 0, 1, or 2.
               Specifies the computation mode of far-from-diagonal  orthogonal
               updates.
               = 0: SLAQR6 does not accumulate reflections and does not
                    use matrix-matrix multiply to update far-from-diagonal
                    matrix entries.
               = 1: SLAQR6 accumulates reflections and uses matrix-matrix
                    multiply to update the far-from-diagonal matrix entries.
               = 2: SLAQR6 accumulates reflections, uses matrix-matrix
                    multiply to update the far-from-diagonal matrix entries,
                    and takes advantage of 2-by-2 block structure during
                    matrix multiplies.

       N      (input) INTEGER scalar
               N  is the order of the Hessenberg matrix H upon which this sub-
               routine operates.

       KTOP   (input) INTEGER scalar

       KBOT   (input) INTEGER scalar
               These are the first and last rows and columns  of  an  isolated
               diagonal  block upon which the QR sweep is to be applied. It is
               assumed without a check that
                         either KTOP = 1  or   H(KTOP,KTOP-1) = 0
               and
                         either KBOT = N  or   H(KBOT+1,KBOT) = 0.

       NSHFTS (input) integer scalar
               NSHFTS gives the number of simultaneous shifts.  NSHFTS must be
               positive and even.

       SR     (input) REAL array of size (NSHFTS)

       SI     (input) REAL array of size (NSHFTS)
               SR  contains the real parts and SI contains the imaginary parts
               of the NSHFTS shifts of origin that define the  multi-shift  QR
               sweep.

       H      (input/output) REAL array of size (LDH,N)
               On  input  H  contains a Hessenberg matrix.  On output a multi-
               shift QR sweep with shifts SR(J)+i*SI(J) is applied to the iso-
               lated diagonal block in rows and columns KTOP through KBOT.

       LDH    (input) integer scalar
               LDH is the leading dimension of H just as declared in the call-
               ing procedure.  LDH.GE.MAX(1,N).

       ILOZ   (input) INTEGER

       IHIZ   (input) 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) REAL array of size (LDZ,IHI)
               If  WANTZ  =  .TRUE.,  then  the QR Sweep orthogonal similarity
               transformation is accumulated  into  Z(ILOZ:IHIZ,ILO:IHI)  from
               the right.
               If WANTZ = .FALSE., then Z is unreferenced.

       LDZ    (input) integer scalar
               LDA is the leading dimension of Z just as declared in the call-
               ing procedure. LDZ.GE.N.

       V      (workspace) REAL array of size (LDV,NSHFTS/2)

       LDV    (input) integer scalar
               LDV is the leading dimension of V as declared  in  the  calling
               procedure.  LDV.GE.3.

       U      (workspace) REAL array of size (LDU,3*NSHFTS-3)

       LDU    (input) integer scalar
               LDU  is  the  leading dimension of U just as declared in the in
               the calling subroutine.  LDU.GE.3*NSHFTS-3.

       NH     (input) integer scalar
               NH  is  the  number  of  columns  in  array  WH  available  for
               workspace.  NH.GE.1  is  required  for usage of this workspace,
               otherwise the updates of the far-from-diagonal elements will be
               updated without level 3 BLAS.

       WH     (workspace) REAL array of size (LDWH,NH)

       LDWH   (input) integer scalar
               Leading  dimension of WH just as declared in the calling proce-
               dure.  LDWH.GE.3*NSHFTS-3.

       NV     (input) integer scalar
               NV is the  number  of  rows  in  WV  agailable  for  workspace.
               NV.GE.1  is required for usage of this workspace, otherwise the
               updates of the far-from-diagonal elements will be updated with-
               out level 3 BLAS.

       WV     (workspace) REAL array of size (LDWV,3*NSHFTS-3)

       LDWV   (input) integer scalar
               LDWV  is  the leading dimension of WV as declared in the in the
               calling subroutine.  LDWV.GE.NV.



ScaLAPACK routine               31 October 2017                      SLAQR6(3)