Developer Reference for Intel® oneAPI Math Kernel Library for C
p?gelq2
Computes an LQ factorization of a general rectangular matrix (unblocked algorithm).
Syntax
voidpsgelq2 ( MKL_INT*m , MKL_INT*n , float*a , MKL_INT*ia , MKL_INT*ja , MKL_INT*desca , float*tau , float*work , MKL_INT*lwork , MKL_INT*info );
voidpdgelq2 ( MKL_INT*m , MKL_INT*n , double*a , MKL_INT*ia , MKL_INT*ja , MKL_INT*desca , double*tau , double*work , MKL_INT*lwork , MKL_INT*info );
voidpcgelq2 ( MKL_INT*m , MKL_INT*n , MKL_Complex8*a , MKL_INT*ia , MKL_INT*ja , MKL_INT*desca , MKL_Complex8*tau , MKL_Complex8*work , MKL_INT*lwork , MKL_INT*info );
voidpzgelq2 ( MKL_INT*m , MKL_INT*n , MKL_Complex16*a , MKL_INT*ia , MKL_INT*ja , MKL_INT*desca , MKL_Complex16*tau , MKL_Complex16*work , MKL_INT*lwork , MKL_INT*info );
Include Files
mkl_scalapack.h
Description
psgelq2 pdgelq2 pcgelq2 pzgelq2 The p?gelq2 routine function computes an LQ factorization of a real/complex distributed m -by- n matrix sub(A) = A(ia:ia+m-1, ja:ja+n-1) = L*Q .
Input Parameters
m
(global)
The number of rows of the distributed matrix sub( A ). (m≥0) .
n
(global)
The number of columns of the distributed matrix sub( A ). (n≥0) .
- a
-
(local). REAL for psgelq2 DOUBLE PRECISION for pdgelq2 COMPLEX for pcgelq2 COMPLEX*16 for pzgelq2 .
Pointer into the local memory to an array of size lld_a * LOCc(ja+n-1) .
On entry, this array contains the local pieces of the m -by- n distributed matrix sub( A ) which is to be factored.
ia , ja
(global) The row and column indices in the global matrix A indicating the first row and the first column of sub( A ), respectively.
desca
(global and local) array of size dlen_ . The array descriptor for the distributed matrix A .
- work
-
(local). REAL for psgelq2 DOUBLE PRECISION for pdgelq2 COMPLEX for pcgelq2 COMPLEX*16 for pzgelq2 . This is a workspace array of size lwork .
lwork
(local or global)
The size of the array work . lwork is local input and must be at least lwork≥nq0 + max( 1, mp0 ) , where iroff = mod(ia-1, mb_a), icoff = mod(ja-1, nb_a) , iarow = indxg2p(ia, mb_a, myrow, rsrc_a, nprow) , iacol = indxg2p(ja, nb_a, mycol, csrc_a, npcol) , mp0 = numroc(m+iroff, mb_a, myrow, iarow, nprow) , nq0 = numroc(n+icoff, nb_a, mycol, iacol, npcol) ,
indxg2p and numroc are ScaLAPACK tool functions; myrow , mycol , nprow , and npcol can be determined by calling the function blacs_gridinfo .
Output Parameters
- a
-
(local). On exit, the elements on and below the diagonal of sub( A ) contain the m by min( m,n ) lower trapezoidal matrix L ( L is lower triangular if m ≤ n ); the elements above the diagonal, with the array tau , represent the orthogonal/unitary matrix Q as a product of elementary reflectors (see Application Notes below) .
- tau
-
(local). REAL for psgelq2 DOUBLE PRECISION for pdgelq2 COMPLEX for pcgelq2 COMPLEX*16 for pzgelq2 . Array of size LOCr(ia+min(m, n)-1) . This array contains the scalar factors of the elementary reflectors. tau is tied to the distributed matrix A .
work
On exit, work(1)work[0] returns the minimal and optimal lwork .
info
(local) If info = 0 , the execution is successful. if info < 0: If the i -th argument is an array and the j -th entry , indexed j -1, had an illegal value, then info = - ( i *100+ j ), if the i -th argument is a scalar and had an illegal value, then info = -i .
Application Notes
The matrix Q is represented as a product of elementary reflectors
Q =H(ia+k-1)*H(ia+k-2)*. . . *H(ia) for real flavors, Q =(H(ia+k-1))^{H}*(H(ia+k-2))^{H}...*(H(ia))^{H} for complex flavors,
where k = min(m,n) .
Each H(i) has the form
H(i) = I - tau*v*v'
where tau is a real/complex scalar, and v is a real/complex vector with v(1: i-1) = 0 and v(i) = 1 ; v(i+1: n) (for real flavors) or conjg(v(i+1: n)) (for complex flavors) is stored on exit in A(ia+i-1,ja+i:ja+n-1) , and tau in tau(ia+i-1)[ia+i-2] .