p?larf
p?larf
Applies an elementary reflector to a general rectangular matrix.
Syntax
void
pslarf
(
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
);
void
pdlarf
(
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
);
void
pclarf
(
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
);
void
pzlarf
(
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
The ) to a real/complex , from either the left or the right.
p?larf
function
applies a real/complex elementary reflector Q
(or Q
T
m
-by-n
distributed matrix sub(
, C
) = C
(ic
:ic
+m
-1jc
:jc
+n
-1)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 , then
tau
= 0Q
is taken to be the unit matrix.Input Parameters
- side
- (global).='L': form,Q*sub(C)='R': formsub(,C)*Q.Q=QT
- 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).Pointer into the local memory to an array of size, containing the local pieces of the global distributed matrixlld_v*LOCc(n_v)Vrepresenting the Householder transformationQ,V(ifiv:iv+m-1,jv)andside='L',incv= 1V(ifiv,jv:jv+m-1)andside='L',incv=m_vV(ifiv:iv+n-1,jv)andside='R',incv= 1V(ifiv,jv:jv+n-1)andside='R'.incv=m_vThe arrayvis the representation ofQ.vis not used if.tau= 0
- iv,jv
- (global) The row and column indices in the global matrixVindicating the first row and the first column of the matrix sub(V), respectively.
- descv
- (global and local) array of sizedlen_. The array descriptor for the distributed matrix V.
- incv
- (global)The global increment for the elements ofV. Only two values ofincvare supported in this version, namely 1 andm_v.incvmust not be zero.
- tau
- (local).Array of sizeLOCc(jv) if, andincv= 1LOCr(iv) otherwise. This array contains the Householder scalars related to the Householder vectors.tauis tied to the distributed matrixV.
- c
- (local).Pointer into the local memory to an array of size, containing the local pieces of sub(lld_c*LOCc(jc+n-1)C).
- ic,jc
- (global)The row and column indices in the global matrixCindicating the first row and the first column of the matrix sub(C), respectively.
- descc
- (global and local) array of sizedlen_. The array descriptor for the distributed matrixC.
- work
- (local).Array of sizelwork.Ifincv= 1,ifside='L',ifivcol=iccol,lwork≥nqc0elselwork≥mpc0 +max( 1,nqc0 )end ifelse ifside='R',lwork≥nqc0 +max(max( 1,mpc0),numroc(numroc(n+icoffc,nb_v,0,0,npcol),nb_v,0,0,lcmq) )end ifelse ifincv=m_v,ifside='L',lwork≥mpc0 +max(max(1,nqc0 ),numroc(numroc(m+iroffc,mb_v,0,0,nprow),mb_v,0,0,lcmp) )else ifside='R',ifivrow=icrow,lwork≥mpc0elselwork≥nqc0 +max(1,mpc0 )end ifend ifend if,wherelcmis the least common multiple ofnprowandnpcolandlcm=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, andnumrocare ScaLAPACK tool functions;myrow,mycol,nprow, andnpcolcan be determined by calling thefunctionblacs_gridinfo.
Output Parameters
- c
- (local).On exit, sub(C) is overwritten by theifQ*sub(C),side='L'or sub(C) *Qifside='R'.