# ?larf

Applies an elementary reflector to a general rectangular matrix.

## Syntax

call slarf( side, m, n, v, incv, tau, c, ldc, work )

call dlarf( side, m, n, v, incv, tau, c, ldc, work )

call clarf( side, m, n, v, incv, tau, c, ldc, work )

call zlarf( side, m, n, v, incv, tau, c, ldc, work )

## Description

The routine applies a real/complex elementary reflector H to a real/complex m-by-n matrix C, from either the left or the right. H is represented in the form

`H = I - tau*v*v'`,

where tau is a real/complex scalar and v is a real/complex vector.

If `tau = 0`, then H is taken to be the unit matrix. For clarf/zlarf, to apply H' (the conjugate transpose of H), supply conjg(tau) instead of tau.

## Input Parameters

side

  CHARACTER*1.

  If `side = 'L'`: form H*C

  If `side = 'R'`: form C*H.

m

  INTEGER. The number of rows of the matrix C.

n

  INTEGER. The number of columns of the matrix C.

v

  REAL for slarf

  DOUBLE PRECISION for dlarf

  COMPLEX for clarf

  COMPLEX*16 for zlarf

  Array, DIMENSION

  `(1 + (m-1)*abs(incv))` if `side = 'L'` or

  `(1 + (n-1)*abs(incv))` if `side = 'R'`. The vector v in the representation of H. v is not used if tau = 0.

incv

  INTEGER. The increment between elements of v.

  `incv ≠ 0`.

tau

  REAL for slarf

  DOUBLE PRECISION for dlarf

  COMPLEX for clarf

  COMPLEX*16 for zlarf

  The value tau in the representation of H.

c

  REAL for slarf

  DOUBLE PRECISION for dlarf

  COMPLEX for clarf

  COMPLEX*16 for zlarf

  Array, DIMENSION (ldc,n).

  On entry, the m-by-n matrix C.

ldc

  INTEGER. The leading dimension of the array c.

  `ldc ≥ max(1,m)`.

work

  REAL for slarf

  DOUBLE PRECISION for dlarf

  COMPLEX for clarf

  COMPLEX*16 for zlarf

  Workspace array, DIMENSION

  (n) if `side = 'L'` or

  (m) if `side = 'R'`.

## Output Parameters

c

  On exit, C is overwritten by the matrix H*C if `side = 'L'`, or C*H if `side = 'R'`.

Parent topic: Auxiliary Routines