# ?laref

Applies Householder reflectors to matrices on either their rows or columns.

## Syntax

call slaref(type, a, lda, wantz, z, ldz, block, irow1, icol1, istart, istop, itmp1, itmp2, liloz, lihiz, vecs, v2, v3, t1, t2, t3)

call dlaref(type, a, lda, wantz, z, ldz, block, irow1, icol1, istart, istop, itmp1, itmp2, liloz, lihiz, vecs, v2, v3, t1, t2, t3)

## Description

This routine applies one or several Householder reflectors of size 3 to one or two matrices (if column is specified) on either their rows or columns.

## Input Parameters

type

  (global) CHRACTER*1.

  If `type = 'R'`, apply reflectors to the rows of the matrix (apply from left). Otherwise, apply reflectors to the columns of the matrix. Unchanged on exit.

a

  (global) REAL for slaref

  DOUBLE PRECISION for dlaref

  Array, DIMENSION (lda, *).

  On entry, the matrix to receive the reflections.

lda

  (local) INTEGER.

  On entry, the leading dimension of A; unchanged on exit.

wantz

  (global) LOGICAL.

  If `wantz = .TRUE.`, apply any column reflections to Z as well.

  If `wantz = .FALSE.`, do no additional work on Z.

z

  (global) REAL for slaref

  DOUBLE PRECISION for dlaref

  Array, DIMENSION (ldz, *).

  On entry, the second matrix to receive column reflections.

ldz

  (local) INTEGER.

  On entry, the leading dimension of Z; unchanged on exit.

block

  (global). LOGICAL.

  `= .TRUE.` : apply several reflectors at once and read their data from the vecs array;

  `= .FALSE.` : apply the single reflector given by v2, v3, t1, t2, and t3.

irow1

  (local) INTEGER.

  On entry, the local row element of the matrix A.

icol1

  (local) INTEGER.

  On entry, the local column element of the matrix A.

istart

  (global) INTEGER.

  Specifies the "number" of the first reflector.

  istart is used as an index into vecs if block is set. istart is ignored if block is .FALSE. .

istop

  (global) INTEGER.

  Specifies the "number" of the last reflector.

  istop is used as an index into vecs if block is set. istop is ignored if block is .FALSE. .

itmp1

  (local) INTEGER.

  Starting range into A. For rows, this is the local first column. For columns, this is the local first row.

itmp2

  (local) INTEGER.

  Ending range into A. For rows, this is the local last column. For columns, this is the local last row.

liloz, lihiz

  (local). INTEGER.

  Serve the same purpose as itmp1, itmp2 but for Z when wantz is set.

vecs

  (global)

  REAL for slaref

  DOUBLE PRECISION for dlaref.

  Array of size 3 *n (matrix size). This array holds the size 3 reflectors one after another and is only accessed when block is .TRUE.

v2,v3,t1,t2,t3

  (global). INTEGER.

  REAL for slaref

  DOUBLE PRECISION for dlaref.

  These parameters hold information on a single size 3 Householder reflector and are read when block is .FALSE., and overwritten when block is .TRUE..

## Output Parameters

a

  On exit, the updated matrix.

z

  Changed only if wantz is set. If wantz is .FALSE. , z is not referenced.

irow1

  Undefined.

icol1

  Undefined.

v2,v3,t1,t2,t3

  These parameters are read when block is .FALSE., and overwritten when block is .TRUE..

Parent topic: Auxiliary Routines