# ?laqr5

Performs a single small-bulge multi-shift QR sweep.

## Syntax

call slaqr5( 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 )

call 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 )

call claqr5( wantt, wantz, kacc22, n, ktop, kbot, nshfts, s, h, ldh, iloz, ihiz, z, ldz, v, ldv, u, ldu, nv, wv, ldwv, nh, wh, ldwh )

call zlaqr5( wantt, wantz, kacc22, n, ktop, kbot, nshfts, s, h, ldh, iloz, ihiz, z, ldz, v, ldv, u, ldu, nv, wv, ldwv, nh, wh, ldwh )

## Description

This auxiliary routine called by ?laqr0 performs a single small-bulge multi-shift QR sweep.

## Input Parameters

wantt

  LOGICAL.

  `wantt = .TRUE.` if the quasi-triangular/triangular Schur factor is computed.

  wantt is set to .FALSE. otherwise.

wantz

  LOGICAL.

  `wantz = .TRUE.` if the orthogonal/unitary Schur factor is computed.

  wantz is set to .FALSE. otherwise.

kacc22

  INTEGER. Possible values are 0, 1, or 2.

  Specifies the computation mode of far-from-diagonal orthogonal updates.

  `= 0`: the routine does not accumulate reflections and does not use matrix-matrix multiply to update far-from-diagonal matrix entries.

  `= 1`: the routine accumulates reflections and uses matrix-matrix multiply to update the far-from-diagonal matrix entries.

  `= 2`: the routine 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

  INTEGER. The order of the Hessenberg matrix H upon which the routine operates.

ktop, kbot

  INTEGER.

  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

  INTEGER.

  Number of simultaneous shifts, must be positive and even.

sr, si

  REAL for slaqr5

  DOUBLE PRECISION for dlaqr5

  Arrays, DIMENSION (nshfts) each.

  sr contains the real parts and si contains the imaginary parts of the nshfts shifts of origin that define the multi-shift QR sweep.
s

  COMPLEX for claqr5

  COMPLEX*16 for zlaqr5.

  Arrays, DIMENSION (nshfts).

  s contains the shifts of origin that define the multi-shift QR sweep.
h

  REAL for slaqr5

  DOUBLE PRECISION for dlaqr5

  COMPLEX for claqr5

  COMPLEX*16 for zlaqr5.

  Array, DIMENSION (ldh, n), on input contains the Hessenberg matrix.

ldh

  INTEGER. The leading dimension of the array h just as declared in the calling routine. ``ldh ≥ max(1, n)``.

iloz, ihiz

  INTEGER. Specify the rows of Z to which transformations must be applied if wantz is `.TRUE.. 1 ≤ iloz ≤ ihiz ≤ n`.

z

  REAL for slaqr5

  DOUBLE PRECISION for dlaqr5

  COMPLEX for claqr5

  COMPLEX*16 for zlaqr5.

  Array, DIMENSION (ldz, ihi), contains the matrix Z if wantz is .TRUE.. If wantz is .FALSE., then z is not referenced.

ldz

  INTEGER. The leading dimension of the array z just as declared in the calling routine. `ldz ≥ n`.

v

  REAL for slaqr5

  DOUBLE PRECISION for dlaqr5

  COMPLEX for claqr5

  COMPLEX*16 for zlaqr5.

  Workspace array with dimension `(ldv, nshfts/2)`.

ldv

  INTEGER. The leading dimension of the array v just as declared in the calling routine. `ldv ≥ 3`.

u

  REAL for slaqr5

  DOUBLE PRECISION for dlaqr5

  COMPLEX for claqr5

  COMPLEX*16 for zlaqr5.

  Workspace array with dimension `(ldu, 3*nshfts-3)`.

ldu

  INTEGER. The leading dimension of the array u just as declared in the calling routine. `ldu ≥ 3*nshfts-3`.

nh

  INTEGER. The number of column in the array wh available for workspace. `nh ≥ 1`.

wh

  REAL for slaqr5

  DOUBLE PRECISION for dlaqr5

  COMPLEX for claqr5

  COMPLEX*16 for zlaqr5.

  Workspace array with dimension `(ldwh, nh)`

ldwh

  INTEGER. The leading dimension of the array wh just as declared in the calling routine. `ldwh ≥ 3*nshfts-3`

nv

  INTEGER. The number of rows of the array wv available for workspace. `nv ≥ 1`.

wv

  REAL for slaqr5

  DOUBLE PRECISION for dlaqr5

  COMPLEX for claqr5

  COMPLEX*16 for zlaqr5.

  Workspace array with dimension `(ldwv, 3*nshfts-3)`.

ldwv

  INTEGER. The leading dimension of the array wv just as declared in the calling routine. `ldwv ≥ nv`.

## Output Parameters

h

  On output a multi-shift QR Sweep with shifts `sr(j)+i*si(j)` or `s(j)` is applied to the isolated diagonal block in rows and columns ktop through kbot .

z

  If wantz is .TRUE., then the QR Sweep orthogonal/unitary similarity transformation is accumulated into z(iloz:ihiz, ilo:ihi) from the right.

  If wantz is .FALSE., then z is unreferenced.

Parent topic: Auxiliary Routines