hesv_aa_2stage#
Functions
-
void chesv_aa_2stage(const char *uplo, const INT n, const INT nrhs, c64 *restrict A, const INT lda, c64 *restrict TB, const INT ltb, INT *restrict ipiv, INT *restrict ipiv2, c64 *restrict B, const INT ldb, c64 *restrict work, const INT lwork, INT *info)#
CHESV_AA_2STAGE computes the solution to a complex system of linear equations A * X = B, where A is an N-by-N Hermitian matrix and X and B are N-by-NRHS matrices.
Aasen’s 2-stage algorithm is used to factor A as A = U**H * T * U, if uplo = ‘U’, or A = L * T * L**H, if uplo = ‘L’, where U (or L) is a product of permutation and unit upper (lower) triangular matrices, and T is Hermitian and band. The matrix T is then LU-factored with partial pivoting. The factored form of A is then used to solve the system of equations A * X = B.
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.innrhsThe number of right hand sides, i.e., the number of columns of the matrix B.
nrhs>=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 columnipiv[k].inoutBArray of dimension
(ldb,nrhs). On entry, the right hand side matrix B. On exit, the solution matrix X.inldbThe leading dimension of the array B.
ldb>=max(1,n).outworkArray of dimension
max(1,lwork). On exit, ifinfo=0,work[0]returns the optimallwork.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 chesv_aa_2stage(
const char* uplo,
const INT n,
const INT nrhs,
c64* restrict A,
const INT lda,
c64* restrict TB,
const INT ltb,
INT* restrict ipiv,
INT* restrict ipiv2,
c64* restrict B,
const INT ldb,
c64* restrict work,
const INT lwork,
INT* info
);
Functions
-
void zhesv_aa_2stage(const char *uplo, const INT n, const INT nrhs, c128 *restrict A, const INT lda, c128 *restrict TB, const INT ltb, INT *restrict ipiv, INT *restrict ipiv2, c128 *restrict B, const INT ldb, c128 *restrict work, const INT lwork, INT *info)#
ZHESV_AA_2STAGE computes the solution to a complex system of linear equations A * X = B, where A is an N-by-N Hermitian matrix and X and B are N-by-NRHS matrices.
Aasen’s 2-stage algorithm is used to factor A as A = U**H * T * U, if uplo = ‘U’, or A = L * T * L**H, if uplo = ‘L’, where U (or L) is a product of permutation and unit upper (lower) triangular matrices, and T is Hermitian and band. The matrix T is then LU-factored with partial pivoting. The factored form of A is then used to solve the system of equations A * X = B.
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.innrhsThe number of right hand sides, i.e., the number of columns of the matrix B.
nrhs>=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 columnipiv[k].inoutBArray of dimension
(ldb,nrhs). On entry, the right hand side matrix B. On exit, the solution matrix X.inldbThe leading dimension of the array B.
ldb>=max(1,n).outworkArray of dimension
max(1,lwork). On exit, ifinfo=0,work[0]returns the optimallwork.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 zhesv_aa_2stage(
const char* uplo,
const INT n,
const INT nrhs,
c128* restrict A,
const INT lda,
c128* restrict TB,
const INT ltb,
INT* restrict ipiv,
INT* restrict ipiv2,
c128* restrict B,
const INT ldb,
c128* restrict work,
const INT lwork,
INT* info
);