Developer Reference for Intel® oneAPI Math Kernel Library for Fortran
p?larz
Applies an elementary reflector as returned by p?tzrzf to a general matrix.
Syntax
call pslarz(side, m, n, l, v, iv, jv, descv, incv, tau, c, ic, jc, descc, work)
call pdlarz(side, m, n, l, v, iv, jv, descv, incv, tau, c, ic, jc, descc, work)
call pclarz(side, m, n, l, v, iv, jv, descv, incv, tau, c, ic, jc, descc, work)
call pzlarz(side, m, n, l, v, iv, jv, descv, incv, tau, c, ic, jc, descc, work)
Include Files
mkl_scalapack.h
Description
pslarz pdlarz pclarz pzlarz The p?larz routine function applies a real/complex elementary reflector Q (or QT ) 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.
Q is a product of k elementary reflectors as returned by p?tzrzf (Reduces the upper trapezoidal matrix A to upper triangular form.) .
Input Parameters
side
(global) CHARACTER .
if side = 'L' : form Q*sub(C ), if side = 'R' : form sub (C)*Q , Q = Q^{T} (for real flavors).
m
(global) INTEGER .
The number of rows in the distributed matrix sub( C ). (m ≥ 0) .
n
(global) INTEGER .
The number of columns in the distributed matrix sub( C ). (n ≥ 0) .
l
(global) INTEGER .
The columns of the distributed matrix sub( A ) containing the meaningful part of the Householder reflectors. If side = 'L' , m ≥ l ≥ 0, if side = 'R' , n ≥ l ≥ 0 .
- v
-
(local). REAL for pslarz DOUBLE PRECISION for pdlarz COMPLEX for pclarz COMPLEX*16 for pzlarz .
Pointer into the local memory to an array of size ( lld_v ,*) containing the local pieces of the global distributed matrix V representing the Householder transformation Q ,
V(iv:iv+l-1, jv) if side = 'L' and incv = 1 , V(iv, jv:jv+l-1) if side = 'L' and incv = m_v , V(iv:iv+l-1, jv) if side = 'R' and incv = 1 , V(iv, jv:jv+l-1) if side = 'R' and incv = m_v . The vector v in the representation of Q . v is not used if tau = 0 .
iv , jv
(global) INTEGER . The row and column indices in the global distributed matrix V indicating the first row and the first column of the matrix sub( V ), respectively.
descv
(global and local) INTEGER array of size dlen_ . The array descriptor for the distributed matrix V .
incv
(global) INTEGER .
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 pslarz DOUBLE PRECISION for pdlarz COMPLEX for pclarz COMPLEX*16 for pzlarz . 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 pslarz DOUBLE PRECISION for pdlarz COMPLEX for pclarz COMPLEX*16 for pzlarz .
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) INTEGER .
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) INTEGER array of size dlen_ . The array descriptor for the distributed matrix C .
- work
-
(local). REAL for pslarz DOUBLE PRECISION for pdlarz COMPLEX for pclarz COMPLEX*16 for pzlarz . 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. Here 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 ), mpc 0 = numroc ( m + iroffc , mb_c , myrow , icrow , nprow ), nqc 0 = 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 subroutine 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' .