Visible to Intel only — GUID: GUID-7D4B95F6-1FA0-4CBE-BF5E-AF9CD20ECCA8
Visible to Intel only — GUID: GUID-7D4B95F6-1FA0-4CBE-BF5E-AF9CD20ECCA8
p?larzb
Applies a block reflector or its transpose/conjugate-transpose as returned by p?tzrzf to a general matrix.
void pslarzb (char *side , char *trans , char *direct , char *storev , MKL_INT *m , MKL_INT *n , MKL_INT *k , MKL_INT *l , float *v , MKL_INT *iv , MKL_INT *jv , MKL_INT *descv , float *t , float *c , MKL_INT *ic , MKL_INT *jc , MKL_INT *descc , float *work );
void pdlarzb (char *side , char *trans , char *direct , char *storev , MKL_INT *m , MKL_INT *n , MKL_INT *k , MKL_INT *l , double *v , MKL_INT *iv , MKL_INT *jv , MKL_INT *descv , double *t , double *c , MKL_INT *ic , MKL_INT *jc , MKL_INT *descc , double *work );
void pclarzb (char *side , char *trans , char *direct , char *storev , MKL_INT *m , MKL_INT *n , MKL_INT *k , MKL_INT *l , MKL_Complex8 *v , MKL_INT *iv , MKL_INT *jv , MKL_INT *descv , MKL_Complex8 *t , MKL_Complex8 *c , MKL_INT *ic , MKL_INT *jc , MKL_INT *descc , MKL_Complex8 *work );
void pzlarzb (char *side , char *trans , char *direct , char *storev , MKL_INT *m , MKL_INT *n , MKL_INT *k , MKL_INT *l , MKL_Complex16 *v , MKL_INT *iv , MKL_INT *jv , MKL_INT *descv , MKL_Complex16 *t , MKL_Complex16 *c , MKL_INT *ic , MKL_INT *jc , MKL_INT *descc , MKL_Complex16 *work );
- mkl_scalapack.h
The p?larzbfunction applies a real/complex block reflector Q or its transpose QT (conjugate transpose QH for complex flavors) to a real/complex distributed m-by-n matrix sub(C) = C(ic:ic+m-1, jc:jc+n-1) from the left or the right.
Q is a product of k elementary reflectors as returned by p?tzrzf.
Currently, only storev = 'R' and direct = 'B' are supported.
- side
-
(global)
if side = 'L': apply Q or QT (QH for complex flavors) from the Left;
if side = 'R': apply Q or QT (QH for complex flavors) from the Right.
- trans
-
(global)
if trans = 'N': No transpose, apply Q;
If trans='T': Transpose, apply QT (real flavors);
If trans='C': Conjugate transpose, apply QH (complex flavors).
- direct
-
(global)
Indicates how H is formed from a product of elementary reflectors.
if direct = 'F': H = H(1)*H(2)*...*H(k) - forward (not supported) ;
if direct = 'B': H = H(k)*...*H(2)*H(1) - backward.
- storev
-
(global)
Indicates how the vectors that define the elementary reflectors are stored:
if storev = 'C': columnwise (not supported ).
if storev = 'R': rowwise.
- m
-
(global)
The number of rows in the distributed submatrix sub(C). (m ≥ 0).
- n
-
(global)
The number of columns in the distributed submatrix sub(C). (n ≥ 0).
- k
-
(global)
The order of the matrix T. (= the number of elementary reflectors whose product defines the block reflector).
- l
-
(global)
The columns of the distributed submatrix 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(jv+m-1) if side = 'L', lld_v * LOCc(jv+m-1) if side = 'R'.
It contains the local pieces of the distributed vectors V representing the Householder transformation as returned by p?tzrzf.
lld_v ≥ LOCr(iv+k-1).
- iv, jv
-
(global)
The row and column indices in the global matrix V indicating the first row and the first column of the submatrix sub(V), respectively.
- descv
-
(global and local) array of size dlen_. The array descriptor for the distributed matrix V.
- t
-
(local)
Array of size mb_v* mb_v.
The lower triangular matrix T in the representation of the block reflector.
- c
-
(local).
Pointer into the local memory to an array of size lld_c * LOCc(jc+n-1).
On entry, the m-by-n distributed matrix 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 submatrix 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 storev = 'C' ,
if side = 'L' ,
lwork ≥(nqc0 + mpc0)* k
else if side = 'R' ,
lwork ≥ (nqc0 + max(npv0 + numroc(numroc(n+icoffc, nb_v, 0, 0, npcol),
nb_v, 0, 0, lcmq), mpc0))* k
end if
else if storev = 'R' ,
if side = 'L' ,
lwork ≥ (mpc0 + max(mqv0 + numroc(numroc(m+iroffc, mb_v, 0, 0, nprow),
mb_v, 0, 0, lcmp), nqc0))* k
else if side = 'R' ,
lwork ≥ (mpc0 + nqc0) * k
end if
end if.
Here lcmq = lcm/npcol with lcm = iclm(nprow, npcol),
iroffv = mod(iv-1, mb_v), icoffv = mod( jv-1, nb_v),
ivrow = indxg2p(iv, mb_v, myrow, rsrc_v, nprow),
ivcol = indxg2p(jv, nb_v, mycol, csrc_v, npcol),
mqv0 = numroc(m+icoffv, nb_v, mycol, ivcol, npcol),
npv0 = numroc(n+iroffv, mb_v, myrow, ivrow, nprow),
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),
npc0 = numroc(n+icoffc, 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.
- c
-
(local).
On exit, sub(C) is overwritten by the Q*sub(C), or Q'*sub(C), or sub(C)*Q, or sub(C)*Q', where Q' is the transpose (conjugate transpose) of Q.