Developer Reference for Intel® oneAPI Math Kernel Library for Fortran
?ormr2/?unmr2
Multiplies a general matrix by the orthogonal/unitary matrix from a RQ factorization determined by ?gerqf (unblocked algorithm).
Syntax
call sormr2 ( side , trans , m , n , k , a , lda , tau , c , ldc , work , info )
call dormr2 ( side , trans , m , n , k , a , lda , tau , c , ldc , work , info )
call cunmr2 ( side , trans , m , n , k , a , lda , tau , c , ldc , work , info )
call zunmr2 ( side , trans , m , n , k , a , lda , tau , c , ldc , work , info )
Include Files
mkl.fi
Description
The routine ?ormr2 / ?unmr2 overwrites the general real/complex m -by- n matrix C with
Q*C if side = 'L' and trans = 'N' , or
Q^{T}*C / Q^{H}*C if side = 'L' and trans = 'T' (for real flavors) or trans = 'C' (for complex flavors), or
C*Q if side = 'R ‘ and trans = 'N' , or
C*Q^{T} / C*Q^{H} if side = 'R' and trans = 'T' (for real flavors) or trans = 'C' (for complex flavors).
Here Q is a real orthogonal or complex unitary matrix defined as the product of k elementary reflectors
Q = H(1)*H(2)*...*H(k) for real flavors, or Q = (H(1))^{H}*(H(2))^{H}*...*(H(k))^{H} as returned by ?gerqf .
Q is of order m if side = 'L' and of order n if side = 'R' .
Input Parameters
- side
-
CHARACTER*1 . = ‘L’ : apply Q or Q^{T} / Q^{H} from the left = ‘R’ : apply Q or Q^{T} / Q^{H} from the right
- trans
-
CHARACTER*1 . = ‘N’ : apply Q (no transpose) = ‘T’ : apply Q:code:`T` (transpose, for real flavors) = ‘C’ : apply Q:code:`H` (conjugate transpose, for complex flavors)
- m
-
INTEGER . The number of rows of the matrix C . m≥ 0 .
- n
-
INTEGER . The number of columns of the matrix C . n≥ 0 .
- k
-
INTEGER . The number of elementary reflectors whose product defines the matrix Q . If side = 'L' , m≥k≥ 0 ; if side = 'R' , n≥k≥ 0 .
- a
-
REAL for sormr2 DOUBLE PRECISION for dormr2 COMPLEX for cunmr2 DOUBLE COMPLEX for zunmr2 . Array, DIMENSION ( lda , m ) if side = 'L' , ( lda , n ) if side = ‘R’ The i -th row must contain the vector which defines the elementary reflector H(i), for i = 1,2,...,k , as returned by ?gerqf in the last k rows of its array argument a . The array a is modified by the routine but restored on exit.
- lda
-
INTEGER . The leading dimension of the array a . lda≥ max(1,k) .
- tau
-
REAL for sormr2 DOUBLE PRECISION for dormr2 COMPLEX for cunmr2 DOUBLE COMPLEX for zunmr2 . Array, DIMENSION ( k ). tau(i) must contain the scalar factor of the elementary reflector H(i), as returned by ?gerqf .
- c
-
REAL for sormr2 DOUBLE PRECISION for dormr2 COMPLEX for cunmr2 DOUBLE COMPLEX for zunmr2 . 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 sormr2 DOUBLE PRECISION for dormr2 COMPLEX for cunmr2 DOUBLE COMPLEX for zunmr2 . Workspace array, DIMENSION ( n ) if side = 'L' , ( m ) if side = 'R'
Output Parameters
- c
-
On exit, c is overwritten by Q*C or Q:code:`T` * C / Q^{H}*C , or C*Q , or C*Q^{T} / C*Q^{H} .
info
INTEGER .
= 0: successful exit
< 0: if info = -i , the i -th argument had an illegal value