Visible to Intel only — GUID: GUID-FB823822-7677-4BEE-8944-04AF5DA6D53F
Visible to Intel only — GUID: GUID-FB823822-7677-4BEE-8944-04AF5DA6D53F
p?larz
Applies an elementary reflector as returned by p?tzrzf to a general matrix.
Syntax
void pslarz (char *side , MKL_INT *m , MKL_INT *n , MKL_INT *l , float *v , MKL_INT *iv , MKL_INT *jv , MKL_INT *descv , MKL_INT *incv , float *tau , float *c , MKL_INT *ic , MKL_INT *jc , MKL_INT *descc , float *work );
void pdlarz (char *side , MKL_INT *m , MKL_INT *n , MKL_INT *l , double *v , MKL_INT *iv , MKL_INT *jv , MKL_INT *descv , MKL_INT *incv , double *tau , double *c , MKL_INT *ic , MKL_INT *jc , MKL_INT *descc , double *work );
void pclarz (char *side , MKL_INT *m , MKL_INT *n , MKL_INT *l , MKL_Complex8 *v , MKL_INT *iv , MKL_INT *jv , MKL_INT *descv , MKL_INT *incv , MKL_Complex8 *tau , MKL_Complex8 *c , MKL_INT *ic , MKL_INT *jc , MKL_INT *descc , MKL_Complex8 *work );
void pzlarz (char *side , MKL_INT *m , MKL_INT *n , MKL_INT *l , MKL_Complex16 *v , MKL_INT *iv , MKL_INT *jv , MKL_INT *descv , MKL_INT *incv , MKL_Complex16 *tau , MKL_Complex16 *c , MKL_INT *ic , MKL_INT *jc , MKL_INT *descc , MKL_Complex16 *work );
Include Files
- mkl_scalapack.h
Description
The p?larzfunction applies a real/complex elementary reflector Q (or QT) to a real/complex m-by-n distributed matrix sub(C) = C(ic:ic+m-1, jc:jc+n-1), from either the left or the right. Q is represented in the form
Q = I-tau*v*v',
where tau is a real/complex scalar and v is a real/complex vector.
If tau = 0, then Q is taken to be the unit matrix.
Q is a product of k elementary reflectors as returned by p?tzrzf.
Input Parameters
- side
-
(global)
if side = 'L': form Q*sub(C),
if side = 'R': form sub(C)*Q, Q = QT (for real flavors).
- m
-
(global)
The number of rows in the distributed matrix sub(C). (m ≥ 0).
- n
-
(global)
The number of columns in the distributed matrix sub(C). (n ≥ 0).
- l
-
(global)
The columns of the distributed matrix sub(A) containing the meaningful part of the Householder reflectors. If side = 'L', m ≥ l ≥ 0,
if side = 'R', n ≥ l ≥ 0.
- v
-
(local).
Pointer into the local memory to an array of size lld_v * LOCc(n_v) containing the local pieces of the global distributed matrix V representing the Householder transformation Q,
V(iv:iv+l-1, jv) if side = 'L' and incv = 1,
V(iv, jv:jv+l-1) if side = 'L' and incv = m_v,
V(iv:iv+l-1, jv) if side = 'R' and incv = 1,
V(iv, jv:jv+l-1) if side = 'R' and incv = m_v.
The vector v in the representation of Q. v is not used if tau = 0.
- iv, jv
-
(global) The row and column indices in the global distributed matrix V indicating the first row and the first column of the matrix sub(V), respectively.
- descv
-
(global and local) array of size dlen_. The array descriptor for the distributed matrix V.
- incv
-
(global)
The global increment for the elements of V. Only two values of incv are supported in this version, namely 1 and m_v.
incv must not be zero.
- tau
-
(local)
Array of size LOCc(jv) if incv = 1, and LOCr(iv) otherwise. This array contains the Householder scalars related to the Householder vectors.
tau is tied to the distributed matrix V.
- c
-
(local).
Pointer into the local memory to an array of size lld_c * LOCc(jc+n-1), containing the local pieces of sub(C).
- ic, jc
-
(global)
The row and column indices in the global matrix C indicating the first row and the first column of the matrix sub(C), respectively.
- descc
-
(global and local) array of size dlen_. The array descriptor for the distributed matrix C.
- work
-
(local).
Array of size lwork
If incv = 1,
if side = 'L' ,
if ivcol = iccol,
lwork ≥ NqC0
else
lwork ≥ MpC0 + max(1, NqC0)
end if
else if side = 'R' ,
lwork ≥ NqC0 + max(max(1, MpC0), numroc(numroc(n+icoffc,nb_v,0,0,npcol),nb_v,0,0,lcmq))
end if
else if incv = m_v,
if side = 'L' ,
lwork ≥ MpC0 + max(max(1, NqC0), numroc(numroc(m+iroffc,mb_v,0,0,nprow),mb_v,0,0,lcmp))
else if side = 'R' ,
if ivrow = icrow,
lwork ≥ MpC0
else
lwork ≥ NqC0 + max(1, MpC0)
end if
end if
end if.
Here lcm is the least common multiple of nprow and npcol and
lcm = ilcm( nprow, npcol ), lcmp = lcm / nprow,
lcmq = lcm / npcol,
iroffc = mod( ic-1, mb_c ), icoffc = mod( jc-1, nb_c ),
icrow = indxg2p( ic, mb_c, myrow, rsrc_c, nprow ),
iccol = indxg2p( jc, nb_c, mycol, csrc_c, npcol ),
mpc0 = numroc( m+iroffc, mb_c, myrow, icrow, nprow ),
nqc0 = numroc( n+icoffc, nb_c, mycol, iccol, npcol ),
ilcm, indxg2p, and numroc are ScaLAPACK tool functions; myrow, mycol, nprow, and npcol can be determined by calling the function blacs_gridinfo.
Output Parameters
- c
-
(local).
On exit, sub(C) is overwritten by the Q*sub(C) if side = 'L', or sub(C)*Q if side = 'R'.