# ?orgl2/?ungl2

Generates all or part of the orthogonal/unitary matrix Q from an LQ factorization determined by ?gelqf (unblocked algorithm).

## Syntax

call sorgl2( m, n, k, a, lda, tau, work, info )

call dorgl2( m, n, k, a, lda, tau, work, info )

call cungl2( m, n, k, a, lda, tau, work, info )

call zungl2( m, n, k, a, lda, tau, work, info )

## Description

The routine ?orgl2/?ungl2 generates a m-by-n real/complex matrix Q with orthonormal rows, which is defined as the first m rows of a product of k elementary reflectors of order n

`Q = H(k)*...*H(2)*H(1)`for real flavors, or `Q = (H(k))H*...*(H(2))H*(H(1))H` for complex flavors as returned by ?gelqf.

## Input Parameters

m

  INTEGER. The number of rows of the matrix Q. `m ≥ 0`.

n

  INTEGER. The number of columns of the matrix Q. `n ≥ m`.

k

  INTEGER. The number of elementary reflectors whose product defines the matrix Q. `m ≥ k ≥ 0`.

a

  REAL for sorgl2

  DOUBLE PRECISION for dorgl2

  COMPLEX for cungl2

  COMPLEX*16 for zungl2.

  Array, DIMENSION (lda, n). On entry, the i-th row must contain the vector which defines the elementary reflector `H(i), for i = 1,2,..., k`, as returned by ?gelqf in the first k rows of its array argument a.

lda

  INTEGER. The first dimension of the array a. `lda ≥ max(1,m)`.

tau

  REAL for sorgl2

  DOUBLE PRECISION for dorgl2

  COMPLEX for cungl2

  COMPLEX*16 for zungl2.

  Array, DIMENSION (k).

  tau(i) must contain the scalar factor of the elementary reflector H(i), as returned by ?gelqf.

work

  REAL for sorgl2

  DOUBLE PRECISION for dorgl2

  COMPLEX for cungl2

  COMPLEX*16 for zungl2.

  Workspace array, DIMENSION (m).

## Output Parameters

a

  On exit, the m-by-n matrix Q.

info

  INTEGER.

  = 0: successful exit

  < 0: if `info = -i`, the i-th argument has an illegal value.

Parent topic: Auxiliary Routines