Visible to Intel only — GUID: GUID-D2411E6E-CFB9-4368-B24A-46811873788F
Visible to Intel only — GUID: GUID-D2411E6E-CFB9-4368-B24A-46811873788F
p?lahrd
Reduces the first nb columns of a general rectangular matrix A so that elements below the k-th subdiagonal are zero, by an orthogonal/unitary transformation, and returns auxiliary matrices that are needed to apply the transformation to the unreduced part of A.
Syntax
void pslahrd (MKL_INT *n , MKL_INT *k , MKL_INT *nb , float *a , MKL_INT *ia , MKL_INT *ja , MKL_INT *desca , float *tau , float *t , float *y , MKL_INT *iy , MKL_INT *jy , MKL_INT *descy , float *work );
void pdlahrd (MKL_INT *n , MKL_INT *k , MKL_INT *nb , double *a , MKL_INT *ia , MKL_INT *ja , MKL_INT *desca , double *tau , double *t , double *y , MKL_INT *iy , MKL_INT *jy , MKL_INT *descy , double *work );
void pclahrd (MKL_INT *n , MKL_INT *k , MKL_INT *nb , MKL_Complex8 *a , MKL_INT *ia , MKL_INT *ja , MKL_INT *desca , MKL_Complex8 *tau , MKL_Complex8 *t , MKL_Complex8 *y , MKL_INT *iy , MKL_INT *jy , MKL_INT *descy , MKL_Complex8 *work );
void pzlahrd (MKL_INT *n , MKL_INT *k , MKL_INT *nb , MKL_Complex16 *a , MKL_INT *ia , MKL_INT *ja , MKL_INT *desca , MKL_Complex16 *tau , MKL_Complex16 *t , MKL_Complex16 *y , MKL_INT *iy , MKL_INT *jy , MKL_INT *descy , MKL_Complex16 *work );
Include Files
- mkl_scalapack.h
Description
The p?lahrdfunction reduces the first nb columns of a real general n-by-(n-k+1) distributed matrix A(ia:ia+n-1 , ja:ja+n-k) so that elements below the k-th subdiagonal are zero. The reduction is performed by an orthogonal/unitary similarity transformation Q'*A*Q. The function returns the matrices V and T which determine Q as a block reflector I-V*T*V', and also the matrix Y = A*V*T.
This is an auxiliary function called by p?gehrd. In the following comments sub(A) denotes A(ia:ia+n-1, ja:ja+n-1).
Input Parameters
- n
-
(global)
The order of the distributed matrix sub(A). n ≥ 0.
- k
-
(global)
The offset for the reduction. Elements below the k-th subdiagonal in the first nb columns are reduced to zero.
- nb
-
(global)
The number of columns to be reduced.
- a
-
(local).
Pointer into the local memory to an array of size lld_a * LOCc(ja+n-k). On entry, this array contains the local pieces of the n-by-(n-k+1) general distributed matrix A(ia:ia+n-1, ja:ja+n-k).
- ia, ja
-
(global) The row and column indices in the global matrix A indicating the first row and the first column of the matrix sub(A), respectively.
- desca
-
(global and local) array of size dlen_. The array descriptor for the distributed matrix A.
- iy, jy
-
(global) The row and column indices in the global matrix Y indicating the first row and the first column of the matrix sub(Y), respectively.
- descy
-
(global and local) array of size dlen_. The array descriptor for the distributed matrix Y.
- work
-
(local).
Array of size nb.
Output Parameters
- a
-
(local).
On exit, the elements on and above the k-th subdiagonal in the first nb columns are overwritten with the corresponding elements of the reduced distributed matrix; the elements below the k-th subdiagonal, with the array tau, represent the matrix Q as a product of elementary reflectors. The other columns of the matrix A(ia:ia+n-1, ja:ja+n-k) are unchanged. (See Application Notes below.)
- tau
-
(local)
Array of size LOCc(ja+n-2). The scalar factors of the elementary reflectors (see Application Notes below). tau is tied to the distributed matrix A.
- t
-
(local)
Array of size nb_a* nb_a. The upper triangular matrix T.
- y
-
(local).
Pointer into the local memory to an array of size lld_y* nb_a. On exit, this array contains the local pieces of the n-by-nb distributed matrix Y. lld_y ≥ LOCr(ia+n-1).
Application Notes
The matrix Q is represented as a product of nb elementary reflectors
Q = H(1)*H(2)*...*H(nb).
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+k-1)= 0, v(i+k)= 1; v(i+k+1:n) is stored on exit in A(ia+i+k:ia+n-1, ja+i-1), and tau in tau[ja+i-2].
The elements of the vectors v together form the (n-k+1)-by-nb matrix V which is needed, with T and Y, to apply the transformation to the unreduced part of the matrix, using an update of the form: A(ia:ia+n-1, ja:ja+n-k) := (I-V*T*V')*(A(ia:ia+n-1, ja:ja+n-k)-Y*V'). The contents of A(ia:ia+n-1, ja:ja+n-k) on exit are illustrated by the following example with n = 7, k = 3, and nb = 2:
where a denotes an element of the original matrix A(ia:ia+n-1, ja:ja+n-k), h denotes a modified element of the upper Hessenberg matrix H, and vi denotes an element of the vector defining H(i).