Developer Reference for Intel® oneAPI Math Kernel Library for C

ID 766684
Date 11/07/2023
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

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:


Equation

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).

See Also