?laqr6

Performs a single small-bulge multi-shift QR sweep collecting the transformations.

Syntax

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

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

Description

This auxiliary subroutine called by p?laqr5 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 V or accumulating the transformations in the matrix Z (see below).

This is a modified version of ?laqr5 from LAPACK 3.1.

Input Parameters

job

CHARACTER scalar

Set the kind of job to do in ?laqr6, 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

LOGICAL scalar

wantt= .TRUE. if the quasi-triangular Schur factor is being computed. wantt is set to .FALSE. otherwise.

wantz

LOGICAL scalar

wantz= .TRUE. if the orthogonal Schur factor is being computed. wantz is set to .FALSE. otherwise.

kacc22

INTEGER with value 0, 1, or 2.

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

= 0: ?laqr6 does not accumulate reflections and does not use matrix-matrix multiply to update far-from-diagonal matrix entries.

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

= 2: ?laqr6 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 scalar

n is the order of the Hessenberg matrix H upon which this subroutine operates.

ktop, kbot

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

INTEGER scalar

nshfts gives the number of simultaneous shifts. nshfts must be positive and even.

sr, si

REAL for slaqr6

DOUBLE PRECISION for dlaqr6

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

REAL for slaqr6

DOUBLE PRECISION for dlaqr6

Array of size (ldh,n)

On input h contains a Hessenberg matrix .

ldh

INTEGER scalar

ldh is the leading dimension of H just as declared in the calling procedure. ldh max(1,n).

iloz, ihiz

INTEGER scalar

Specify the rows of z to which transformations must be applied if wantzis .TRUE.. 1ilozihizn

z

REAL for slaqr6

DOUBLE PRECISION for dlaqr6

Array of size (ldz,ktop)

If wantz= .TRUE., then the QR sweep orthogonal similarity transformation is accumulated into the matrix Z(iloz:ihiz,kbot:ktop), stored in the array z, from the right.

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

ldz

INTEGER scalar

ldz is the leading dimension of z just as declared in the calling procedure. ldzn.

v

REAL for slaqr6

DOUBLE PRECISION for dlaqr6

(workspace) array of size (ldv,nshfts/2)

ldv

INTEGER scalar

ldv is the leading dimension of v as declared in the calling procedure. ldv3.

u

REAL for slaqr6

DOUBLE PRECISION for dlaqr6

(workspace) array of size (ldu,3*nshfts-3)

ldu

INTEGER scalar

ldu is the leading dimension of u just as declared in the calling subroutine. ldu3*nshfts-3.

nh

INTEGER scalar

nh is the number of columns in array wh available for workspace. nh1 is required for usage of this workspace, otherwise the updates of the far-from-diagonal elements will be updated without level 3 BLAS.

wh

REAL for slaqr6

DOUBLE PRECISION for dlaqr6

(workspace) array of size (ldwh,nh)

ldwh

INTEGER scalar

Leading dimension of wh just as declared in the calling procedure. ldwh3*nshfts-3.

nv

INTEGER scalar

nv is the number of rows in wv available for workspace. nv1 is required for usage of this workspace, otherwise the updates of the far-from-diagonal elements will be updated without level 3 BLAS.

wv

REAL for slaqr6

DOUBLE PRECISION for dlaqr6

(workspace) array of size (ldwv,3*nshfts-3)

ldwv

INTEGER scalar

ldwv is the leading dimension of wv as declared in the in the calling subroutine. ldwvnv.

OUTPUT Parameters

h

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.

z

If wantzis .TRUE., then the QR sweep orthogonal/unitary similarity transformation is accumulated into the matrix Z(iloz:ihiz,kbot:ktop) from the right.

If wantzis .FALSE., then z is unreferenced.

Application Notes

Notes

Based on contributions by Karen Braman and Ralph Byers, Department of Mathematics, University of Kansas, USA Robert Granat, Department of Computing Science and HPC2N, Umea University, Sweden

See Also

For more complete information about compiler optimizations, see our Optimization Notice.