Developer Reference for Intel® oneAPI Math Kernel Library for C
A newer version of this document is available. Customers should click here to go to the newest version.
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 function called by p?laqr0 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) scalar wanttis non-zero if the quasi-triangular Schur factor is being computed. wantt is set to zero otherwise.  |  
     
wantz  |  
      (global) scalar wantzis non-zero if the orthogonal Schur factor is being computed. wantz is set to zero otherwise.  |  
     
kacc22  |  
      (global) 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) scalar The order of the Hessenberg matrix H and, if wantzis non-zero, the order of the orthogonal matrix Z.  |  
     
ktop, kbot  |  
      (global) 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) scalar nshfts gives the number of simultaneous shifts. nshfts must be positive and even.  |  
     
sr, si  |  
      (global) 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  |  
      (local) Array of size lld_h * LOCc(n) On input h contains a Hessenberg matrix H.  |  
     
desch  |  
      (global and local) array of size dlen_. The array descriptor for the distributed matrix H .  |  
     
iloz, ihiz  |  
      (global) Specify the rows of the matrix Z to which transformations must be applied if wantzis non-zero. 1 ≤iloz≤ihiz≤n  |  
     
z  |  
      (local) array of size lld_z * LOCc(n) If wantzis non-zero, then the QR Sweep orthogonal similarity transformation is accumulated into the matrix Z(iloz:ihiz,kbot:ktop) from the right. If wantzequals zero, then z is unreferenced.  |  
     
descz  |  
      (global and local) array of size dlen_. The array descriptor for the distributed matrix Z.  |  
     
work  |  
      (local workspace) array of size lwork  |  
     
lwork  |  
      (local) The size of the work array (lwork≥1). If lwork=-1, then a workspace query is assumed.  |  
     
iwork  |  
      (local workspace) array of size liwork  |  
     
liwork  |  
      (local) 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 wantzis non-zero, z is updated with transformations applied only to the submatrix Z(iloz:ihiz,kbot:ktop).  |  
     
work[0]  |  
      On exit, if info = 0, work[0] returns the optimal lwork.  |  
     
iwork[0]  |  
      On exit, if info = 0, iwork[0] returns the optimal liwork.  |