Developer Reference for Intel® oneAPI Math Kernel Library for Fortran
p?larfb
Applies a block reflector or its transpose/conjugate-transpose to a general rectangular matrix.
Syntax
call pslarfb(side, trans, direct, storev, m, n, k, v, iv, jv, descv, t, c, ic, jc, descc,
work)
call pdlarfb(side, trans, direct, storev, m, n, k, v, iv, jv, descv, t, c, ic, jc, descc,
work)
call pclarfb(side, trans, direct, storev, m, n, k, v, iv, jv, descv, t, c, ic, jc, descc,
work)
call pzlarfb(side, trans, direct, storev, m, n, k, v, iv, jv, descv, t, c, ic, jc, descc,
work)
Include Files
mkl_scalapack.h
Description
pslarfb pdlarfb pclarfb pzlarfb The p?larfb routine function applies a real/complex block reflector Q or its transpose Q^{T} /conjugate transpose Q^{H} to a real/complex distributed m -by- n matrix sub( C ) = C(ic:ic+m-1 , jc:jc+n-1) from the left or the right.
Input Parameters
side
(global) CHARACTER .
if side = 'L' : apply Q or QT for real flavors ( QH for complex flavors) from the Left; if side = 'R' : apply Q or QT for real flavors ( QH for complex flavors) from the Right.
trans
(global) CHARACTER .
if trans = 'N' : no transpose, apply Q ; for real flavors, if trans='T' : transpose, apply QT for complex flavors, if trans = 'C' : conjugate transpose, apply Q^{H} ;
direct
(global) CHARACTER . Indicates how Q is formed from a product of elementary reflectors.
if direct = 'F' : Q = H(1)*H(2)*...*H(k) (Forward) if direct = 'B' : Q = H(k)*...*H(2)*H(1) (Backward)
storev
(global) CHARACTER .
Indicates how the vectors that define the elementary reflectors are stored: if storev = 'C' : Columnwise if storev = 'R' : Rowwise.
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) .
k
(global) INTEGER .
The order of the matrix T.
- v
-
(local). REAL for pslarfb DOUBLE PRECISION for pdlarfb COMPLEX for pclarfb COMPLEX*16 for pzlarfb . Pointer into the local memory to an array of size
( lld_v, LOCc(jv+k-1)) if storev = 'C',
(lld_v, LOCc(jv+m-1)) if storev = 'R' and side = 'L',
(lld_v, LOCc(jv+n-1)) if storev = 'R' and side = ‘R’ .
It contains the local pieces of the distributed vectors V representing the Householder transformation. if storev = 'C' and side = 'L', lld_v ≥ max(1,LOCr(iv+m-1)) ; if storev = 'C' and side = 'R', lld_v ≥ max(1,LOCr(iv+n-1)) ; if storev = 'R', lld_v≥LOCr(jv+k-1) .
iv , jv
(global) INTEGER .
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) INTEGER array of size dlen_ . The array descriptor for the distributed matrix V .
- c
-
(local). REAL for pslarfb DOUBLE PRECISION for pdlarfb COMPLEX for pclarfb COMPLEX*16 for pzlarfb .
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 pslarfb DOUBLE PRECISION for pdlarfb COMPLEX for pclarfb COMPLEX*16 for pzlarfb . Workspace array of size lwork . If storev = ‘C’ , if side = ‘L’ , lwork ≥ ( nqc 0 + mpc 0 ) * k else if side = ‘R’ , lwork ≥ ( nqc 0 + max ( npv 0 + numroc ( numroc ( n + icoffc , nb_v , 0, 0, npcol ), nb_v , 0, 0, lcmq ), mpc 0 ) ) * k end if else if storev = ‘R’ , if side = ‘L’ , lwork ≥ ( mpc 0 + max ( mqv 0 + numroc ( numroc ( m + iroffc , mb_v , 0, 0, nprow ), mb_v , 0, 0, lcmp ), nqc 0 ) ) * k else if side = ‘R’ , lwork ≥ ( mpc 0 + nqc 0 ) * k end if end if, where lcmq = lcm / npcol with 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 , and numroc are ScaLAPACK tool functions; myrow , mycol , nprow , and npcol can be determined by calling the subroutine blacs_gridinfo .
Output Parameters
- t
-
(local). REAL for pslarfb DOUBLE PRECISION for pdlarfb COMPLEX for pclarfb COMPLEX*16 for pzlarfb .
Array of size ( mb_v, mb_v) if storev = 'R', and ( nb_v, nb_v) if storev = 'C' . The triangular matrix t is the representation of the block reflector.
- c
-
(local). On exit, sub( C ) is overwritten by the Q*sub(C) , or Q'*sub(C) , or sub(C)*Q , or sub(C)*Q' . Q' is transpose (conjugate transpose) of Q .