Developer Reference for Intel® oneAPI Math Kernel Library for C
?laqr6
Performs a single small-bulge multi-shift QR sweep collecting the transformations.
Syntax
void slaqr6 ( char*job , MKL_INT*wantt , MKL_INT*wantz , MKL_INT*kacc22 , MKL_INT*n , MKL_INT*ktop , MKL_INT*kbot , MKL_INT*nshfts , float*sr , float*si , float*h , MKL_INT*ldh , MKL_INT*iloz , MKL_INT*ihiz , float*z , MKL_INT*ldz , float*v , MKL_INT*ldv , float*u , MKL_INT*ldu , MKL_INT*nv , float*wv , MKL_INT*ldwv , MKL_INT*nh , float*wh , MKL_INT*ldwh );
void dlaqr6 ( char*job , MKL_INT*wantt , MKL_INT*wantz , MKL_INT*kacc22 , MKL_INT*n , MKL_INT*ktop , MKL_INT*kbot , MKL_INT*nshfts , double*sr , double*si , double*h , MKL_INT*ldh , MKL_INT*iloz , MKL_INT*ihiz , double*z , MKL_INT*ldz , double*v , MKL_INT*ldv , double*u , MKL_INT*ldu , MKL_INT*nv , double*wv , MKL_INT*ldwv , MKL_INT*nh , double*wh , MKL_INT*ldwh );
Include Files
mkl_scalapack.h
Description
This auxiliary subroutine called by p?laqr5 (Performs a single small-bulge multi-shift QR sweep.) function 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 Vor accumulating the transformations in the matrix Z (see below).
This is a modified version of ?laqr5 (Performs a single small-bulge multi-shift QR sweep.) ?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. is non-zero if the quasi-triangular Schur factor is being computed. wantt is set to .FALSE. zero otherwise.
- wantz
-
LOGICAL scalar
wantz = .TRUE. is non-zero if the orthogonal Schur factor is being computed. wantz is set to .FALSE. zero 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 function 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 nshftssr 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 H .
- ldh
-
INTEGER scalar
ldh is the leading dimension of H just as declared in the calling function . ldh ≥ max(1, n ).
- iloz , ihiz
-
INTEGER scalar
Specify the rows of the matrix Zz to which transformations must be applied if wantz is non-zero . 1 ≤ iloz ≤ ihiz ≤ n
- z
-
REAL for slaqr6 DOUBLE PRECISION for dlaqr6
Array of size ldz * ktop
If wantz = .TRUE. is non-zero , 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. equals zero , then z is unreferenced.
- ldz
-
INTEGER scalar
ldz is the leading dimension of z just as declared in the calling function . ldz ≥ n .
- 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 function . ldv ≥ 3.
- 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 function . ldu ≥ 3* nshfts -3.
- nh
-
INTEGER scalar nh is the number of columns in array wh available for workspace. nh ≥ 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
-
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 function . ldwh ≥ 3* nshfts -3.
- nv
-
INTEGER scalar nv is the number of rows in wv available for workspace. nv ≥ 1 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
- ldwv
-
INTEGER scalar
ldwv is the leading dimension of wv as declared in the in the calling function . ldwv ≥ nv .
OUTPUT Parameters
h
A multi-shift QR sweep with shifts sr [ j ]+ i * si [ j ] is applied to the isolated diagonal block in matrix rows and columns ktop through kbot .
z
If wantz is non-zero , then the QR sweep orthogonal/unitary similarity transformation is accumulated into the matrix Z ( iloz : ihiz , kbot : ktop ) from the right.
If wantz equals zero , 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