Developer Reference for Intel® oneAPI Math Kernel Library for C

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

?unmbr

Multiplies an arbitrary complex matrix by the unitary matrix Q or P determined by ?gebrd.

Syntax

lapack_int LAPACKE_cunmbr (int matrix_layout, char vect, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_float* a, lapack_int lda, const lapack_complex_float* tau, lapack_complex_float* c, lapack_int ldc);

lapack_int LAPACKE_zunmbr (int matrix_layout, char vect, char side, char trans, lapack_int m, lapack_int n, lapack_int k, const lapack_complex_double* a, lapack_int lda, const lapack_complex_double* tau, lapack_complex_double* c, lapack_int ldc);

Include Files

  • mkl.h

Description

Given an arbitrary complex matrix C, this routine forms one of the matrix products Q*C, QH*C, C*Q, C*QH, P*C, PH*C, C*P, or C*PH, where Q and P are unitary matrices computed by a call to gebrd/gebrd. The routine overwrites the product on C.

Input Parameters

In the descriptions below, r denotes the order of Q or PH:

If side = 'L', r = m; if side = 'R', r = n.

matrix_layout

Specifies whether matrix storage layout is row major (LAPACK_ROW_MAJOR) or column major (LAPACK_COL_MAJOR).

vect

Must be 'Q' or 'P'.

If vect = 'Q', then Q or QH is applied to C.

If vect = 'P', then P or PH is applied to C.

side

Must be 'L' or 'R'.

If side = 'L', multipliers are applied to C from the left.

If side = 'R', they are applied to C from the right.

trans

Must be 'N' or 'C'.

If trans = 'N', then Q or P is applied to C.

If trans = 'C', then QH or PH is applied to C.

m

The number of rows in C.

n

The number of columns in C.

k

One of the dimensions of A in ?gebrd:

If vect = 'Q', the number of columns in A;

If vect = 'P', the number of rows in A.

Constraints: m 0, n 0, k 0.

a, c

Arrays:

a is the array a as returned by ?gebrd.

The size of a depends on the value of the matrix_layout, vect, and side parameters:

matrix_layout vect side size

column major

'Q'

-

max(1, lda*k)

column major

'P'

'L'

max(1, lda*m)

column major

'P'

'R'

max(1, lda*n)

row major

'Q'

'L'

max(1, lda*m)

row major

'Q'

'R'

max(1, lda*n)

row major

'P'

-

max(1, lda*k)

c(size max(1, ldc*n) for column major layout and max(1, ldc*m for row major layout) holds the matrix C.

lda

The leading dimension of a. Constraints:

lda max(1, r) for column major layout and at least max(1, k) for row major layout if vect = 'Q';

lda max(1, min(r,k)) for column major layout and at least max(1, r) for row major layout if vect = 'P'.

ldc

The leading dimension of c; ldc max(1, m).

tau

Array, size at least max (1, min(r, k)).

For vect = 'Q', the array tauq as returned by ?gebrd. For vect = 'P', the array taup as returned by ?gebrd.

Output Parameters

c

Overwritten by the product Q*C, QH*C, C*Q, C*QH, P*C, PH*C, C*P, or C*PH, as specified by vect, side, and trans.

Return Values

This function returns a value info.

If info=0, the execution is successful.

If info = -i, the i-th parameter had an illegal value.

Application Notes

The computed product differs from the exact product by a matrix E such that ||E||2 = O(ε)*||C||2.

The total number of floating-point operations is approximately

8*n*k(2*m - k) if side = 'L' and mk;

8*m*k(2*n - k) if side = 'R' and nk;

8*m2*n if side = 'L' and m < k;

8*n2*m if side = 'R' and n < k.

The real counterpart of this routine is ormbr.