Developer Reference

Contents

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
p?larzb
function
applies a real/complex block reflector
Q
or its transpose
Q
T
(conjugate transpose
Q
H
for complex flavors) 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.
Q
is a product of
k
elementary reflectors as returned by
p?tzrzf
.
Currently, only
storev
=
'R'
and
direct
=
'B'
are supported.
Input Parameters
side
(global)
if
side
=
'L'
: apply
Q
or
Q
T
(
Q
H
for complex flavors) from the Left;
if
side
=
'R'
: apply
Q
or
Q
T
(
Q
H
for complex flavors) from the Right.
trans
(global)
if
trans
=
'N'
: No transpose, apply
Q
;
If
trans
=
'T'
: Transpose, apply
Q
T
(real flavors);
If
trans
=
'C'
: Conjugate transpose, apply
Q
H
(complex flavors).
direct
(global)
Indicates how
H
is formed from a product of elementary reflectors.
if
direct
=
'F'
:
H
=
H
(1)*
H
(2)*...*
H
(
k
)
- forward (not supported) ;
if
direct
=
'B'
:
H
=
H
(
k
)*...*
H
(2)*
H
(1)
- backward.
storev
(global)
Indicates how the vectors that define the elementary reflectors are stored:
if
storev
=
'C'
: columnwise (not supported ).
if
storev
=
'R'
: rowwise.
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 matrix
T
. (= 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
0
,
if
side
=
'R'
,
n
l
0
.
v
(local).
Pointer into the local memory to an array of size
lld_v
*
LOCc
(
jv
+
m
-1)
if
side
=
'L'
,
lld_v
*
LOCc
(
jv
+
m
-1)
if
side
=
'R'
.
It contains the local pieces of the distributed vectors
V
representing the Householder transformation as returned by
p?tzrzf
.
lld_v
LOCr
(
iv
+
k
-1).
iv
,
jv
(global)
The row and column indices in the global matrix
V
indicating the first row and the first column of the submatrix sub(
V
), respectively.
descv
(global and local) array of size
dlen_
. The array descriptor for the distributed matrix
V
.
t
(local)
Array of size
mb_v
*
mb_v
.
The lower triangular matrix
T
in 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, the
m
-by-
n
distributed matrix 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 submatrix sub(
C
), respectively.
descc
(global and local) array of size
dlen_
. The array descriptor for the distributed matrix
C
.
work
(local).
Array of size
lwork
.
If storev = 'C' ,
  if side = 'L' ,
    lwork ≥(nqc0 + mpc0)* k
  else if side = 'R' ,
    lwork ≥ (nqc0 + max(npv0 + numroc(numroc(n+icoffc, nb_v, 0, 0, npcol),
   nb_v, 0, 0, lcmq), mpc0))* k
  end if
else 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))* k
  else if side = 'R' ,
    lwork ≥ (mpc0 + nqc0) * k
  end if
end if.
Here
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
function
blacs_gridinfo
.
Output Parameters
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'
, where
Q'
is the transpose (conjugate transpose) of
Q
.

Product and Performance Information

1

Performance varies by use, configuration and other factors. Learn more at www.Intel.com/PerformanceIndex.