hetrf_aa_2stage#
Functions
-
void chetrf_aa_2stage(const char *uplo, const INT n, c64 *restrict A, const INT lda, c64 *restrict TB, const INT ltb, INT *restrict ipiv, INT *restrict ipiv2, c64 *restrict work, const INT lwork, INT *info)#
CHETRF_AA_2STAGE computes the factorization of a complex Hermitian matrix A using the Aasen’s algorithm.
The form of the factorization is
where U (or L) is a product of permutation and unit upper (lower) triangular matrices, and T is a Hermitian band matrix with the bandwidth ofA = U**H*T*U or A = L*T*L**H
nb(nbis internally selected and stored inTB[0], and T is LU factorized with partial pivoting).This is the blocked version of the algorithm, calling Level 3 BLAS.
Parameters
inuplo'U': Upper triangle of A is stored'L': Lower triangle of A is stored
innThe order of the matrix A.
n>=0.inoutAArray of dimension
(lda,n). On entry, the Hermitian matrix A. Ifuplo='U', the leadingn-by-nupper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. Ifuplo='L', the leadingn-by-nlower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, L is stored below (or above) the subdiagonal blocks, whenuplo='L'(or'U').inldaThe leading dimension of the array A.
lda>=max(1,n).outTBArray of dimension
max(1,ltb). On exit, details of the LU factorization of the band matrix.inltbThe size of the array TB.
ltb>=max(1,4*n), internally used to selectnbsuch thatltb>=(3*nb+1)*n. Ifltb=-1, then a workspace query is assumed; the routine only calculates the optimal size ofltb, returns this value as the first entry of TB, and no error message related toltbis issued.outipivArray of dimension
n. On exit, it contains the details of the interchanges, i.e., the row and columnkof A were interchanged with the row and columnipiv[k].outipiv2Array of dimension
n. On exit, it contains the details of the interchanges, i.e., the row and columnkof T were interchanged with the row and columnipiv2[k].outworkArray of dimension
max(1,lwork).inlworkThe size of
work.lwork>=max(1,n), internally used to selectnbsuch thatlwork>=n*nb. Iflwork=-1, then a workspace query is assumed; the routine only calculates the optimal size of theworkarray, returns this value as the first entry of theworkarray, and no error message related tolworkis issued.outinfoinfo=0: successful exitinfo<0: ifinfo=-i, the i-th argument had an illegal valueinfo>0: ifinfo=i, band LU factorization failed on the i-th column
void chetrf_aa_2stage(
const char* uplo,
const INT n,
c64* restrict A,
const INT lda,
c64* restrict TB,
const INT ltb,
INT* restrict ipiv,
INT* restrict ipiv2,
c64* restrict work,
const INT lwork,
INT* info
);
Functions
-
void zhetrf_aa_2stage(const char *uplo, const INT n, c128 *restrict A, const INT lda, c128 *restrict TB, const INT ltb, INT *restrict ipiv, INT *restrict ipiv2, c128 *restrict work, const INT lwork, INT *info)#
ZHETRF_AA_2STAGE computes the factorization of a complex Hermitian matrix A using the Aasen’s algorithm.
The form of the factorization is
where U (or L) is a product of permutation and unit upper (lower) triangular matrices, and T is a Hermitian band matrix with the bandwidth ofA = U**H*T*U or A = L*T*L**H
nb(nbis internally selected and stored inTB[0], and T is LU factorized with partial pivoting).This is the blocked version of the algorithm, calling Level 3 BLAS.
Parameters
inuplo'U': Upper triangle of A is stored'L': Lower triangle of A is stored
innThe order of the matrix A.
n>=0.inoutAArray of dimension
(lda,n). On entry, the Hermitian matrix A. Ifuplo='U', the leadingn-by-nupper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced. Ifuplo='L', the leadingn-by-nlower triangular part of A contains the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced. On exit, L is stored below (or above) the subdiagonal blocks, whenuplo='L'(or'U').inldaThe leading dimension of the array A.
lda>=max(1,n).outTBArray of dimension
max(1,ltb). On exit, details of the LU factorization of the band matrix.inltbThe size of the array TB.
ltb>=max(1,4*n), internally used to selectnbsuch thatltb>=(3*nb+1)*n. Ifltb=-1, then a workspace query is assumed; the routine only calculates the optimal size ofltb, returns this value as the first entry of TB, and no error message related toltbis issued.outipivArray of dimension
n. On exit, it contains the details of the interchanges, i.e., the row and columnkof A were interchanged with the row and columnipiv[k].outipiv2Array of dimension
n. On exit, it contains the details of the interchanges, i.e., the row and columnkof T were interchanged with the row and columnipiv2[k].outworkArray of dimension
max(1,lwork).inlworkThe size of
work.lwork>=max(1,n), internally used to selectnbsuch thatlwork>=n*nb. Iflwork=-1, then a workspace query is assumed; the routine only calculates the optimal size of theworkarray, returns this value as the first entry of theworkarray, and no error message related tolworkis issued.outinfoinfo=0: successful exitinfo<0: ifinfo=-i, the i-th argument had an illegal valueinfo>0: ifinfo=i, band LU factorization failed on the i-th column
void zhetrf_aa_2stage(
const char* uplo,
const INT n,
c128* restrict A,
const INT lda,
c128* restrict TB,
const INT ltb,
INT* restrict ipiv,
INT* restrict ipiv2,
c128* restrict work,
const INT lwork,
INT* info
);