Developer Reference for Intel® oneAPI Math Kernel Library for C
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
pslahrd pdlahrd pclahrd pzlahrd The p?lahrd routine function 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 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 routine function called by p?gehrd (Reduces a general matrix to upper Hessenberg form.) . 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). 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) 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). 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 the matrix 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)
DOUBLE PRECISION for pdlahrd COMPLEX for pclahrd COMPLEX*16 for pzlahrd .
Array of size nb_a * 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_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) .