Developer Reference for Intel® oneAPI Math Kernel Library for C

ID 766684
Date 3/22/2024
Public
Document Table of Contents

p?larzc

Applies (multiplies by) the conjugate transpose of an elementary reflector as returned by p?tzrzf to a general matrix.

Syntax

void pclarzc (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 pzlarzc (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?larzcfunction applies a complex elementary reflector QH to a 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 complex scalar and v is a 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 QH*sub(C);

if side = 'R': form sub(C)*QH .

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', ml 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 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).

If incv = 1,
  if side = 'L' ,
    if ivcol = iccol,
      lwork nqc0
    else
      lwork  mpc0 + max(1, nqc0)
    end if
  else if side = 'R' ,
    lwork nqc0 + max(max(1, mpc0), numroc(numroc(n+icoffc, nb_v, 0, 0, npcol),
           nb_v, 0, 0, lcmq))  end if
else if incv = m_v,
  if side = 'L' ,
    lworkmpc0 + max(max(1, nqc0), numroc(numroc(m+iroffc, mb_v, 0, 0, nprow),
           mb_v, 0, 0, lcmp))
  else if side = 'R',
    if ivrow = icrow,
      lwork mpc0
    else
      lworknqc0 + max(1, mpc0)
    end if
  end if
         end if

Here lcm is the least common multiple of nprow and npcol;

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),

mpc0 = numroc(m+iroffc, 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 QH*sub(C) if side = 'L', or sub(C)*QH if side = 'R'.

See Also