Developer Reference for Intel® oneAPI Math Kernel Library for Fortran
?orm2l/?unm2l
Multiplies a general matrix by the orthogonal/unitary matrix from a QL factorization determined by ?geqlf (unblocked algorithm).
Syntax
call sorm2l ( side , trans , m , n , k , a , lda , tau , c , ldc , work , info )
call dorm2l ( side , trans , m , n , k , a , lda , tau , c , ldc , work , info )
call cunm2l ( side , trans , m , n , k , a , lda , tau , c , ldc , work , info )
call zunm2l ( side , trans , m , n , k , a , lda , tau , c , ldc , work , info )
Include Files
mkl.fi
Description
The routine ?orm2l / ?unm2l 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(k)*...*H(2)*H(1) as returned by ?geqlf .
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 sorm2l DOUBLE PRECISION for dorm2l COMPLEX for cunm2l DOUBLE COMPLEX for zunm2l . Array, DIMENSION ( lda , k ). The i -th column must contain the vector which defines the elementary reflector H(i), for i = 1,2,..., k , as returned by ?geqlf in the last k columns 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 . If side = 'L' , lda≥ max(1, m) if side = 'R' , lda≥ max(1, n) .
- tau
-
REAL for sorm2l DOUBLE PRECISION for dorm2l COMPLEX for cunm2l DOUBLE COMPLEX for zunm2l . Array, DIMENSION ( k ). tau(i) must contain the scalar factor of the elementary reflector H(i), as returned by ?geqlf .
- c
-
REAL for sorm2l DOUBLE PRECISION for dorm2l COMPLEX for cunm2l DOUBLE COMPLEX for zunm2l . 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 sorm2l DOUBLE PRECISION for dorm2l COMPLEX for cunm2l DOUBLE COMPLEX for zunm2l . 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