Developer Reference

Contents

p?larz

Applies an elementary reflector as returned by
p?tzrzf
to a general matrix.

Syntax

void
pslarz
(
char
*side
,
MKL_INT
*m
,
MKL_INT
*n
,
MKL_INT
*l
,
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
pdlarz
(
char
*side
,
MKL_INT
*m
,
MKL_INT
*n
,
MKL_INT
*l
,
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
pclarz
(
char
*side
,
MKL_INT
*m
,
MKL_INT
*n
,
MKL_INT
*l
,
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
pzlarz
(
char
*side
,
MKL_INT
*m
,
MKL_INT
*n
,
MKL_INT
*l
,
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
p?larz
function
applies a real/complex elementary reflector
Q
(or
Q
T
) 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
.
Input Parameters
side
(global)
if
side
=
'L'
: form
Q
*sub(
C
),
if
side
=
'R'
: form sub
(
C
)*
Q
,
Q
=
Q
T
(for real flavors).
m
(global)
The number of rows in the distributed matrix sub(
C
).
(
m
0)
.
n
(global)
The number of columns in the distributed matrix sub(
C
).
(
n
0)
.
l
(global)
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).
Pointer into the local memory to an array of size
lld_v
*
LOCc
(
n_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) 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) array of size
dlen_
. The array descriptor for the distributed matrix
V
.
incv
(global)
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)
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).
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)
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) array of size
dlen_
. The array descriptor for the distributed matrix
C
.
work
(local).
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
function
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'
.

Product and Performance Information

1

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