Developer Reference for Intel® oneAPI Math Kernel Library for C
p?larfb
Applies a block reflector or its transpose/conjugate-transpose to a general rectangular matrix.
Syntax
voidpslarfb ( 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 );
voidpdlarfb ( 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 );
voidpclarfb ( 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 );
voidpzlarfb ( 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
pslarfb pdlarfb pclarfb pzlarfb The p?larfb routine function applies a real/complex block reflector Q or its transpose Q^{T} /conjugate transpose Q^{H} 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 Q:code:`T` for real flavors ( Q:code:`H` for complex flavors) from the Left; if side = 'R' : apply Q or Q:code:`T` for real flavors ( Q:code:`H` for complex flavors) from the Right.
trans
(global)
if trans = 'N' : no transpose, apply Q ; for real flavors, if trans='T' : transpose, apply Q:code:`T` for complex flavors, if trans = 'C' : conjugate transpose, apply Q^{H} ;
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). REAL for pslarfb DOUBLE PRECISION for pdlarfb COMPLEX for pclarfb COMPLEX*16 for pzlarfb . Pointer into the local memory to an array of size
( lld_v, LOCc(jv+k-1))lld_v * LOCc ( jv + k -1) if storev = 'C',
(lld_v, LOCc(jv+m-1))lld_v * LOCc ( jv + m -1) if storev = 'R' and side = 'L',
(lld_v, LOCc(jv+n-1))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). REAL for pslarfb DOUBLE PRECISION for pdlarfb COMPLEX for pclarfb COMPLEX*16 for pzlarfb .
Pointer into the local memory to an array of size (lld_c, LOCc(jc+n-1) )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) . REAL for pslarfb DOUBLE PRECISION for pdlarfb COMPLEX for pclarfb COMPLEX*16 for pzlarfb . Workspace array of size lwork . If storev = ‘C’ , if side = ‘L’ , lwork ≥ ( nqc 0 + mpc 0 ) * k else if side = ‘R’ , lwork ≥ ( nqc 0 + max ( npv 0 + numroc ( numroc ( n + icoffc , nb_v , 0, 0, npcol ), nb_v , 0, 0, lcmq ), mpc 0 ) ) * k end if else if storev = ‘R’ , if side = ‘L’ , lwork ≥ ( mpc 0 + max ( mqv 0 + numroc ( numroc ( m + iroffc , mb_v , 0, 0, nprow ), mb_v , 0, 0, lcmp ), nqc 0 ) ) * k else if side = ‘R’ , lwork ≥ ( mpc 0 + nqc 0 ) * 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). REAL for pslarfb DOUBLE PRECISION for pdlarfb COMPLEX for pclarfb COMPLEX*16 for pzlarfb .
Array of size ( mb_v, mb_v)mb_v * mb_v if storev = 'R', and ( nb_v, nb_v)nb_v * nb_v if 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 .