Reduces a complex Hermitian matrix to Hermitian tridiagonal form.
p?hentrdis a prototype version of
p?hetrdwhich uses tailored codes (either the serial,
?hetrd, or the parallel code,
p?hettrd) when adequate workspace is provided.
p?hentrdreduces a complex Hermitian matrix sub(
A) to Hermitian tridiagonal form
Tby an unitary similarity transformation:
Q' * sub(
T, where sub(
p?hentrdis faster than
p?hetrdon almost all matrices, particularly small ones (i.e.
n< 500 * sqrt(P) ), provided that enough workspace is available to use the tailored codes.
The tailored codes provide performance that is essentially independent of the input data layout.
The tailored codes place no restrictions on
ja, MB or NB. At present,
ja, MB and NB are restricted to those values allowed by
p?hetrdto keep the interface simple (see the Application Notes section for more information about the restrictions).
- (global)CHARACTER.Specifies whether the upper or lower triangular part of the Hermitian matrix sub(A) is stored:= 'U': Upper triangular= 'L': Lower triangular
- (global)INTEGER.The number of rows and columns to be operated on, i.e. the order of the distributed submatrix sub(A).n>= 0.
- (local)COMPLEXforpchentrdDOUBLE COMPLEXforpzhentrdPointer into the local memory to an array of size(.lld_a,LOCc(ja+n-1))On entry, this array contains the local pieces of the Hermitian distributed matrix sub(A). Ifuplo= 'U', the leadingn-by-nupper triangular part of sub(A) contains the upper triangular part of the matrix, and its strictly lower triangular part is not referenced. Ifuplo= 'L', the leadingn-by-nlower triangular part of sub(A) contains the lower triangular part of the matrix, and its strictly upper triangular part is not referenced.
- (global)INTEGER.The row index in the global arrayaindicating the first row of sub(A).
- (global)INTEGER.The column index in the global arrayaindicating the first column of sub(A).
- (global and local)INTEGER.Array of sizedlen_.The array descriptor for the distributed matrixA.
- (local)COMPLEXforpchentrdDOUBLE COMPLEXforpzhentrdArray, size (lwork)
- (local or global)INTEGER.The size of the arraywork.lworkis local input and must be at leastlwork>= MAX( NB * ( NP +1 ), 3 * NB ).For optimal performance, greater workspace is needed:lwork>= 2*(ANB+1 )*( 4*NPS+2 ) + (NPS+ 4 ) *NPSANB=pjlaenv(ICTXT, 3, 'p?hettrd', 'L', 0, 0, 0, 0 )ICTXT=desca(ctxt_)SQNPC= INT(sqrt( REAL(NPROW*NPCOL) ) )NPS= MAX(numroc(n, 1, 0, 0,SQNPC), 2*ANB)numrocis a ScaLAPACK tool function.