Developer Reference for Intel® oneAPI Math Kernel Library for C

ID 766684
Date 3/31/2023
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of 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?larffunction applies a real/complex elementary reflector Q (or QT) 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=QT.

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,

      lworknqc0

    else

      lworkmpc0 + max( 1, nqc0 )

    end if

  else if side = 'R' ,

    lworknqc0 + 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,

      lworkmpc0

    else

      lworknqc0 + max( 1, mpc0 )

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

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 Q*sub(C) if side = 'L',

or sub(C) * Q if side = 'R'.

See Also