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



NAME
       DLAQR6 - 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 DLAQR6(  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

           DOUBLE          PRECISION  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 DLAQR6, 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: DLAQR6 does not accumulate reflections and does not
                    use matrix-matrix multiply to update far-from-diagonal
                    matrix entries.
               = 1: DLAQR6 accumulates reflections and uses matrix-matrix
                    multiply to update the far-from-diagonal matrix entries.
               = 2: DLAQR6 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) DOUBLE PRECISION array of size (NSHFTS)

       SI     (input) DOUBLE PRECISION 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) DOUBLE PRECISION 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) DOUBLE PRECISION 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) DOUBLE PRECISION 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) DOUBLE PRECISION 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) DOUBLE PRECISION 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) DOUBLE PRECISION 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                      DLAQR6(3)