Developer Reference for Intel® oneAPI Math Kernel Library for C
p?larf
Applies an elementary reflector to a general rectangular matrix.
Syntax
voidpslarf ( char*side , MKL_INT*m , MKL_INT*n , 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 );
voidpdlarf ( char*side , MKL_INT*m , MKL_INT*n , 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 );
voidpclarf ( 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 );
voidpzlarf ( 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
pslarf pdlarf pclarf pzlarf The p?larf routine function applies a real/complex elementary reflector Q (or Q^{T}) 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.
Input Parameters
side
(global).
= ‘L’ : form Q*sub(C) , = ‘R’ : form sub(C)*Q , Q=Q^{T} .
m
(global)
The number of rows in the distributed submatrix sub( A ). (m≥ 0) .
n
(global)
The number of columns in the distributed submatrix sub( A ). (n ≥ 0) .
- v
-
(local). REAL for pslarf DOUBLE PRECISION for pdlarf COMPLEX for pclarf COMPLEX*16 for pzlarf .
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). REAL for pslarf DOUBLE PRECISION for pdlarf COMPLEX for pclarf COMPLEX*16 for pzlarf . 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). REAL for pslarf DOUBLE PRECISION for pdlarf COMPLEX for pclarf COMPLEX*16 for pzlarf .
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 pslarf DOUBLE PRECISION for pdlarf COMPLEX for pclarf COMPLEX*16 for pzlarf . 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*sub(C) if side = 'L' , or sub( C ) * Q if side = ‘R’ .