Looks for a small subdiagonal element from the bottom of the matrix that it can safely set to zero.
void pslasmsub (const float *a, const MKL_INT *desca, const MKL_INT *i, const MKL_INT *l, MKL_INT *k, const float *smlnum, float *buf, const MKL_INT *lwork );
void pdlasmsub (const double *a, const MKL_INT *desca, const MKL_INT *i, const MKL_INT *l, MKL_INT *k, const double *smlnum, double *buf, const MKL_INT *lwork );
void pclasmsub (const MKL_Complex8 *a , const MKL_INT *desca , const MKL_INT *i , const MKL_INT *l , MKL_INT *k , const float *smlnum , MKL_Complex8 *buf , const MKL_INT *lwork );
void pzlasmsub (const MKL_Complex16 *a , const MKL_INT *desca , const MKL_INT *i , const MKL_INT *l , MKL_INT *k , const double *smlnum , MKL_Complex16 *buf , const MKL_INT *lwork );
The p?lasmsubfunction looks for a small subdiagonal element from the bottom of the matrix that it can safely set to zero. This function performs a global maximum and must be called by all processes.
(local)
Array of size lld_a*LOCc(n_a).
On entry, the Hessenberg matrix whose tridiagonal part is being scanned. Unchanged on exit.
(global and local)
Array of size dlen_. The array descriptor for the distributed matrix A.
(global)
The global location of the bottom of the unreduced submatrix of A. Unchanged on exit.
(global)
The global location of the top of the unreduced submatrix of A.
Unchanged on exit.
(global)
On entry, a "small number" for the given matrix. Unchanged on exit. The machine-dependent constants for the stopping criterion.
(local)
This must be at least 2*ceil(ceil((i-l)/mb_a )/ lcm(nprow,npcol)). Here lcm is least common multiple and nprowxnpcol is the logical grid size.
(global)
On exit, this yields the bottom portion of the unreduced submatrix. This will satisfy: l ≤ k ≤ i-1.
(local).
Array of size lwork.
This routine parallelizes the code from ?lahqr that looks for a single small subdiagonal element.