Developer Reference

  • 2021.1
  • 12/04/2020
  • Public Content
Contents

p?larf

Applies an elementary reflector to a general rectangular matrix.

Syntax

void
pslarf
(
char
*side
,
MKL_INT
*m
,
MKL_INT
*n
,
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
pdlarf
(
char
*side
,
MKL_INT
*m
,
MKL_INT
*n
,
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
pclarf
(
char
*side
,
MKL_INT
*m
,
MKL_INT
*n
,
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
pzlarf
(
char
*side
,
MKL_INT
*m
,
MKL_INT
*n
,
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?larf
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.
Input Parameters
side
(global).
=
'L'
: form
Q
*sub(
C
)
,
=
'R'
: form
sub(
C
)*
Q
,
Q
=
Q
T
.
m
(global)
The number of rows in the distributed submatrix sub(
A
).
(
m
0)
.
n
(global)
The number of columns in the distributed submatrix sub(
A
).
(
n
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
+
m
-1,
jv
)
if
side
=
'L'
and
incv
= 1
,
V
(
iv
,
jv
:
jv
+
m
-1)
if
side
=
'L'
and
incv
=
m_v
,
V
(
iv
:
iv
+
n
-1,
jv
)
if
side
=
'R'
and
incv
= 1
,
V
(
iv
,
jv
:
jv
+
n
-1)
if
side
=
'R'
and
incv
=
m_v
.
The array
v
is the representation of
Q
.
v
is not used if
tau
= 0
.
iv
,
jv
(global) 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) 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,
where
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.