p?larzb
p?larzb
Applies a block reflector or its transpose/conjugate-transpose as returned by
p?tzrzf
to a general matrix.Syntax
void
pslarzb
(
char
*side
,
char
*trans
,
char
*direct
,
char
*storev
,
MKL_INT
*m
,
MKL_INT
*n
,
MKL_INT
*k
,
MKL_INT
*l
,
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
pdlarzb
(
char
*side
,
char
*trans
,
char
*direct
,
char
*storev
,
MKL_INT
*m
,
MKL_INT
*n
,
MKL_INT
*k
,
MKL_INT
*l
,
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
pclarzb
(
char
*side
,
char
*trans
,
char
*direct
,
char
*storev
,
MKL_INT
*m
,
MKL_INT
*n
,
MKL_INT
*k
,
MKL_INT
*l
,
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
pzlarzb
(
char
*side
,
char
*trans
,
char
*direct
,
char
*storev
,
MKL_INT
*m
,
MKL_INT
*n
,
MKL_INT
*k
,
MKL_INT
*l
,
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 (conjugate transpose for complex flavors) to a real/complex distributed , from the left or the right.
p?larzb
function
applies a real/complex block reflector Q
or its transpose Q
T
Q
H
m
-by-n
matrix sub(C
) = C
(ic
:ic
+m
-1jc
:jc
+n
-1)Currently, only and are supported.
storev
= 'R'
direct
= 'B'
Input Parameters
- side
- (global)if: applyside='L'QorQ(TQfor complex flavors) from the Left;Hif: applyside='R'QorQ(TQfor complex flavors) from the Right.H
- trans
- (global)if: No transpose, applytrans='N'Q;If: Transpose, applytrans='T'(real flavors);QTIf: Conjugate transpose, applytrans='C'(complex flavors).QH
- direct
- (global)Indicates howHis formed from a product of elementary reflectors.if- forward (not supported) ;direct='F':H=H(1)*H(2)*...*H(k)if- backward.direct='B':H=H(k)*...*H(2)*H(1)
- storev
- (global)Indicates how the vectors that define the elementary reflectors are stored:if: columnwise (not supported ).storev='C'if: rowwise.storev='R'
- m
- (global)The number of rows in the distributed submatrix sub(C).(.m≥0)
- n
- (global)The number of columns in the distributed submatrix sub(C).(.n≥0)
- k
- (global)The order of the matrixT. (= the number of elementary reflectors whose product defines the block reflector).
- l
- (global)The columns of the distributed submatrix sub(A) containing the meaningful part of the Householder reflectors.If,side='L',m≥l≥0if,side='R'.n≥l≥0
- v
- (local).Pointer into the local memory to an array of sizeiflld_v*LOCc(jv+m-1)side='L',iflld_v*LOCc(jv+m-1).side='R'It contains the local pieces of the distributed vectorsVrepresenting the Householder transformation as returned byp?tzrzf.lld_v≥LOCr(iv+k-1).
- iv,jv
- (global)The row and column indices in the global matrixVindicating the first row and the first column of the submatrix sub(V), respectively.
- descv
- (global and local) array of sizedlen_. The array descriptor for the distributed matrixV.
- t
- (local)Array of sizemb_v*mb_v.The lower triangular matrixTin the representation of the block reflector.
- c
- (local).Pointer into the local memory to an array of size.lld_c*LOCc(jc+n-1)On entry, them-by-ndistributed matrix sub(C).
- ic,jc
- (global)The row and column indices in the global matrixCindicating the first row and the first column of the submatrix sub(C), respectively.
- descc
- (global and local) array of sizedlen_. The array descriptor for the distributed matrixC.
- work
- (local).Array of sizelwork.If storev = 'C' ,if side = 'L' ,lwork ≥(nqc0 + mpc0)* kelse if side = 'R' ,lwork ≥ (nqc0 + max(npv0 + numroc(numroc(n+icoffc, nb_v, 0, 0, npcol),nb_v, 0, 0, lcmq), mpc0))* kend ifelse 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))* kelse if side = 'R' ,lwork ≥ (mpc0 + nqc0) * kend ifend if.Herewithlcmq=lcm/npcol,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, 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 theorQ*sub(C),orQ'*sub(C),sub(, orC)*Qsub(, whereC)*Q'Q'is the transpose (conjugate transpose) ofQ.