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
call pslahrd(n, k, nb, a, ia, ja, desca, tau, t, y, iy, jy, descy, work)
call pdlahrd(n, k, nb, a, ia, ja, desca, tau, t, y, iy, jy, descy, work)
call pclahrd(n, k, nb, a, ia, ja, desca, tau, t, y, iy, jy, descy, work)
call pzlahrd(n, k, nb, a, ia, ja, desca, tau, t, y, iy, jy, descy, work)
Description
The p?lahrdroutine 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 routine 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 routine called by p?gehrd. In the following comments sub(A) denotes A(ia:ia+n-1, ja:ja+n-1).
Input Parameters
- n
-
(global) INTEGER.
The order of the distributed matrix sub(A). n ≥ 0.
- k
-
(global) INTEGER.
The offset for the reduction. Elements below the k-th subdiagonal in the first nb columns are reduced to zero.
- nb
-
(global) INTEGER.
The number of columns to be reduced.
- a
-
(local).
REAL for pslahrd
DOUBLE PRECISION for pdlahrd
COMPLEX for pclahrd
COMPLEX*16 for pzlahrd.
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) INTEGER. 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) INTEGER array of size dlen_. The array descriptor for the distributed matrix A.
- iy, jy
-
(global) INTEGER. 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) INTEGER array of size dlen_. The array descriptor for the distributed matrix Y.
- work
-
(local).
REAL for pslahrd
DOUBLE PRECISION for pdlahrd
COMPLEX for pclahrd
COMPLEX*16 for pzlahrd.
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 A(ia:ia+n-1, ja:ja+n-k) are unchanged. (See Application Notes below.)
- tau
-
(local)
REAL for pslahrd
DOUBLE PRECISION for pdlahrd
COMPLEX for pclahrd
COMPLEX*16 for pzlahrd.
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) REAL for pslahrd
DOUBLE PRECISION for pdlahrd
COMPLEX for pclahrd
COMPLEX*16 for pzlahrd.
Array of size nb_aby nb_a. The upper triangular matrix T.
- y
-
(local).
REAL for pslahrd
DOUBLE PRECISION for pdlahrd
COMPLEX for pclahrd
COMPLEX*16 for pzlahrd.
Pointer into the local memory to an array of size lld_yby 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-1).
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).