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
voidpslahrd ( 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 );
voidpdlahrd ( 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 );
voidpclahrd ( 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 );
voidpzlahrd ( 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) .