# dlaqr5.f man page

dlaqr5.f

## Synopsis

### Functions/Subroutines

subroutine **dlaqr5** (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)**DLAQR5** performs a single small-bulge multi-shift QR sweep.

## Function/Subroutine Documentation

### subroutine dlaqr5 (logical WANTT, logical WANTZ, integer KACC22, integer N, integer KTOP, integer KBOT, integer NSHFTS, double precision, dimension( * ) SR, double precision, dimension( * ) SI, double precision, dimension( ldh, * ) H, integer LDH, integer ILOZ, integer IHIZ, double precision, dimension( ldz, * ) Z, integer LDZ, double precision, dimension( ldv, * ) V, integer LDV, double precision, dimension( ldu, * ) U, integer LDU, integer NV, double precision, dimension( ldwv, * ) WV, integer LDWV, integer NH, double precision, dimension( ldwh, * ) WH, integer LDWH)

**DLAQR5** performs a single small-bulge multi-shift QR sweep.

**Purpose:**

DLAQR5, called by DLAQR0, performs a single small-bulge multi-shift QR sweep.

**Parameters:**-
*WANTT*WANTT is LOGICAL WANTT = .true. if the quasi-triangular Schur factor is being computed. WANTT is set to .false. otherwise.

*WANTZ*WANTZ is LOGICAL WANTZ = .true. if the orthogonal Schur factor is being computed. WANTZ is set to .false. otherwise.

*KACC22*KACC22 is INTEGER with value 0, 1, or 2. Specifies the computation mode of far-from-diagonal orthogonal updates. = 0: DLAQR5 does not accumulate reflections and does not use matrix-matrix multiply to update far-from-diagonal matrix entries. = 1: DLAQR5 accumulates reflections and uses matrix-matrix multiply to update the far-from-diagonal matrix entries. = 2: DLAQR5 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*N is INTEGER N is the order of the Hessenberg matrix H upon which this subroutine operates.

*KTOP*KTOP is INTEGER

*KBOT*KBOT is INTEGER 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*NSHFTS is INTEGER NSHFTS gives the number of simultaneous shifts. NSHFTS must be positive and even.

*SR*SR is DOUBLE PRECISION array, dimension (NSHFTS)

*SI*SI is DOUBLE PRECISION array, dimension (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. On output SR and SI may be reordered.

*H*H is DOUBLE PRECISION array, dimension (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 isolated diagonal block in rows and columns KTOP through KBOT.

*LDH*LDH is INTEGER LDH is the leading dimension of H just as declared in the calling procedure. LDH.GE.MAX(1,N).

*ILOZ*ILOZ is INTEGER

*IHIZ*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*Z is DOUBLE PRECISION array, dimension (LDZ,IHIZ) If WANTZ = .TRUE., then the QR Sweep orthogonal similarity transformation is accumulated into Z(ILOZ:IHIZ,ILOZ:IHIZ) from the right. If WANTZ = .FALSE., then Z is unreferenced.

*LDZ*LDZ is INTEGER LDA is the leading dimension of Z just as declared in the calling procedure. LDZ.GE.N.

*V*V is DOUBLE PRECISION array, dimension (LDV,NSHFTS/2)

*LDV*LDV is INTEGER LDV is the leading dimension of V as declared in the calling procedure. LDV.GE.3.

*U*U is DOUBLE PRECISION array, dimension (LDU,3*NSHFTS-3)

*LDU*LDU is INTEGER LDU is the leading dimension of U just as declared in the in the calling subroutine. LDU.GE.3*NSHFTS-3.

*NH*NH is INTEGER NH is the number of columns in array WH available for workspace. NH.GE.1.

*WH*WH is DOUBLE PRECISION array, dimension (LDWH,NH)

*LDWH*LDWH is INTEGER Leading dimension of WH just as declared in the calling procedure. LDWH.GE.3*NSHFTS-3.

*NV*NV is INTEGER NV is the number of rows in WV agailable for workspace. NV.GE.1.

*WV*WV is DOUBLE PRECISION array, dimension (LDWV,3*NSHFTS-3)

*LDWV*LDWV is INTEGER LDWV is the leading dimension of WV as declared in the in the calling subroutine. LDWV.GE.NV.

**Author:**-
Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

**Date:**June 2016

**Contributors:**Karen Braman and Ralph Byers, Department of Mathematics, University of Kansas, USA

**References:**K. Braman, R. Byers and R. Mathias, The Multi-Shift QR Algorithm Part I: Maintaining Well Focused Shifts, and Level 3 Performance, SIAM Journal of Matrix Analysis, volume 23, pages 929--947, 2002.

Definition at line 259 of file dlaqr5.f.

## Author

Generated automatically by Doxygen for LAPACK from the source code.

## Referenced By

The man page dlaqr5(3) is an alias of dlaqr5.f(3).