Developer Reference for Intel® oneAPI Math Kernel Library for C
p?laqr5
Performs a single small-bulge multi-shift QR sweep.
Syntax
void pslaqr5 ( 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*desch , MKL_INT*iloz , MKL_INT*ihiz , float*z , MKL_INT*descz , float*work , MKL_INT*lwork , MKL_INT*iwork , MKL_INT*liwork );
void pdlaqr5 ( 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*desch , MKL_INT*iloz , MKL_INT*ihiz , double*z , MKL_INT*descz , double*work , MKL_INT*lwork , MKL_INT*iwork , MKL_INT*liwork );
Include Files
mkl_scalapack.h
Description
This auxiliary subroutine function called by p?laqr0 (Computes the eigenvalues of a Hessenberg matrix and optionally returns the matrices from the Schur decomposition.) performs a single small-bulge multi-shift QR sweep by chasing separated groups of bulges along the main block diagonal of a Hessenberg matrix H .
Input Parameters
- wantt
-
(global) LOGICAL scalar
wantt = .TRUE. is non-zero if the quasi-triangular Schur factor is being computed. wantt is set to .FALSE. zero otherwise.
- wantz
-
(global) LOGICAL scalar
wantz = .TRUE. is non-zero if the orthogonal Schur factor is being computed. wantz is set to .FALSE. zero otherwise.
- kacc22
-
(global) INTEGER Value 0, 1, or 2. Specifies the computation mode of far-from-diagonal orthogonal updates. = 0: p?laqr5 does not accumulate reflections and does not use matrix-matrix multiply to update far-from-diagonal matrix entries. = 1: p?laqr5 accumulates reflections and uses matrix-matrix multiply to update the far-from-diagonal matrix entries. = 2: p?laqr5 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
-
(global) INTEGER scalar
The order of the Hessenberg matrix H and, if wantz is non-zero , the order of the orthogonal matrix Z .
- ktop , kbot
-
(global) 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
-
(global) INTEGER scalar nshfts gives the number of simultaneous shifts. nshfts must be positive and even.
- sr , si
-
REAL for pslaqr5 DOUBLE PRECISION for pdlaqr5 (global) 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 pslaqr5 DOUBLE PRECISION for pdlaqr5
(local) Array of size lld_h * LOCc ( n )
On input h contains a Hessenberg matrix H .
- desch
-
(global and local) INTEGER array of size dlen_ . The array descriptor for the distributed matrix H .
- iloz , ihiz
-
(global) INTEGER
Specify the rows of the matrix Z to which transformations must be applied if wantz is non-zero . 1 ≤ iloz ≤ ihiz ≤ n
- z
-
REAL for pslaqr5 DOUBLE PRECISION for pdlaqr5
(local) array of size lld_z * LOCc ( n )
If wantz = .TRUE. is non-zero , then the QR Sweep orthogonal similarity transformation is accumulated into the matrix Z ( iloz : ihiz , kbot : ktop ) from the right. If wantz = .FALSE. equals zero , then z is unreferenced.
- descz
-
(global and local) INTEGER array of size dlen_ . The array descriptor for the distributed matrix Z .
- work
-
REAL for pslaqr5 DOUBLE PRECISION for pdlaqr5 (local workspace) array of size lwork
- lwork
-
(local) INTEGER The size of the work array ( lwork ≥ 1). If lwork =-1, then a workspace query is assumed.
- iwork
-
(local workspace) INTEGER array of size liwork
- liwork
-
(local) INTEGER The size of the iwork array ( liwork ≥ 1). If liwork =-1, then a workspace query is assumed.
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 of the matrix H .
z
If wantz is non-zero , z is updated with transformations applied only to the submatrix Z ( iloz : ihiz , kbot : ktop ).
work (1) [0]
On exit, if info = 0, work [0] returns the optimal lwork .
iwork (1) [0]
On exit, if info = 0, iwork [0] returns the optimal liwork .