Visible to Intel only — GUID: GUID-69092636-B344-43E8-96F6-6E934B821BF3
Visible to Intel only — GUID: GUID-69092636-B344-43E8-96F6-6E934B821BF3
p?larfb
Applies a block reflector or its transpose/conjugate-transpose to a general rectangular matrix.
Syntax
void pslarfb (char *side , char *trans , char *direct , char *storev , MKL_INT *m , MKL_INT *n , MKL_INT *k , 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 pdlarfb (char *side , char *trans , char *direct , char *storev , MKL_INT *m , MKL_INT *n , MKL_INT *k , 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 pclarfb (char *side , char *trans , char *direct , char *storev , MKL_INT *m , MKL_INT *n , MKL_INT *k , 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 pzlarfb (char *side , char *trans , char *direct , char *storev , MKL_INT *m , MKL_INT *n , MKL_INT *k , 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 );
Include Files
- mkl_scalapack.h
Description
The p?larfbfunction applies a real/complex block reflector Q or its transpose QT/conjugate transpose QH 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.
Input Parameters
- side
-
(global)
if side = 'L': apply Q or QT for real flavors (QH for complex flavors) from the Left;
if side = 'R': apply Q or QTfor real flavors (QH for complex flavors) from the Right.
- trans
-
(global)
if trans = 'N': no transpose, apply Q;
for real flavors, if trans='T': transpose, apply QT
for complex flavors, if trans = 'C': conjugate transpose, apply QH;
- direct
-
(global) Indicates how Q is formed from a product of elementary reflectors.
if direct = 'F': Q = H(1)*H(2)*...*H(k) (Forward)
if direct = 'B': Q = H(k)*...*H(2)*H(1) (Backward)
- storev
-
(global)
Indicates how the vectors that define the elementary reflectors are stored:
if storev = 'C': Columnwise
if storev = 'R': Rowwise.
- 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).
- k
-
(global)
The order of the matrix T.
- v
-
(local).
Pointer into the local memory to an array of size
lld_v * LOCc(jv+k-1) if storev = 'C',
lld_v * LOCc(jv+m-1) if storev = 'R' and side = 'L',
lld_v * LOCc(jv+n-1) if storev = 'R' and side = 'R'.
It contains the local pieces of the distributed vectors V representing the Householder transformation.
if storev = 'C' and side = 'L', lld_v ≥ max(1,LOCr(iv+m-1));
if storev = 'C' and side = 'R', lld_v ≥ max(1,LOCr(iv+n-1));
if storev = 'R', lld_v≥LOCr(jv+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 matrix sub(V), respectively.
- descv
-
(global and local) array of size dlen_. The array descriptor for 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).
Workspace 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,
where
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.
Output Parameters
- t
-
(local).
Array of size mb_v * mb_vif storev = 'R', and nb_v * nb_vif storev = 'C'. The triangular matrix t is the representation of the block reflector.
- 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'. Q' is transpose (conjugate transpose) of Q.