Developer Reference for Intel® oneAPI Math Kernel Library for C
p?larfc
Applies the conjugate transpose of an elementary reflector to a general matrix.
Syntax
voidpclarfc ( char*side , MKL_INT*m , MKL_INT*n , 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 );
voidpzlarfc ( char*side , MKL_INT*m , MKL_INT*n , 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
pclarfc pzlarfc The p?larfc routine function applies a complex elementary reflector Q:code:`H` to a 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 complex scalar and v is a complex vector.
If tau = 0 , then Q is taken to be the unit matrix.
Input Parameters
side
(global)
if side = 'L' : form Q^{H}*sub(C) ; if side = 'R' : form sub (C)*Q^{H} .
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) .
- v
-
(local). COMPLEX for pclarfc COMPLEX*16 for pzlarfc .
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+m-1, jv) if side = 'L' and incv = 1 , V(iv, jv:jv+m-1) if side = 'L' and incv = m_v , V(iv:iv+n-1, jv) if side = 'R' and incv = 1 , V(iv, jv:jv+n-1) if side = 'R' and incv = m_v . The array v is the representation of Q . v is not used if tau = 0 .
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 .
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) COMPLEX for pclarfc COMPLEX*16 for pzlarfc . 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). COMPLEX for pclarfc COMPLEX*16 for pzlarfc .
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) . COMPLEX for pclarfc COMPLEX*16 for pzlarfc . Workspace array of size lwork . If incv = 1, if side = ‘L’ , if ivcol = iccol , lwork ≥ nqc 0 else lwork ≥ mpc 0 + max ( 1, nqc 0 ) end if else if side = ‘R’ , lwork ≥ nqc 0 + max ( max ( 1, mpc 0 ), 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 ≥ mpc 0 + max ( max ( 1, nqc 0 ), numroc ( numroc ( m + iroffc , mb_v ,0,0, nprow ), mb_v ,0,0, lcmp ) ) else if side = ‘R’ , if ivrow = icrow , lwork ≥ mpc 0 else lwork ≥ nqc 0 + max ( 1, mpc 0 ) end if end if end if, where 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^{H}*sub(C) if side = 'L' , or sub(C) * Q^{H} if side = 'R' .