hesv_rk#
Functions
-
void chesv_rk(const char *uplo, const INT n, const INT nrhs, c64 *restrict A, const INT lda, c64 *restrict E, INT *restrict ipiv, c64 *restrict B, const INT ldb, c64 *restrict work, const INT lwork, INT *info)#
CHESV_RK 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.
The bounded Bunch-Kaufman (rook) diagonal pivoting method is used to factor A as A = P*U*D*(U**H)*(P**T), if uplo = ‘U’, or A = P*L*D*(L**H)*(P**T), if uplo = ‘L’, where U (or L) is unit upper (or lower) triangular matrix, U**H (or L**H) is the conjugate transpose of U (or L), P is a permutation matrix, P**T is the transpose of P, and D is Hermitian and block diagonal with 1-by-1 and 2-by-2 diagonal blocks.
chetrf_rkis called to compute the factorization of a complex Hermitian matrix. The factored form of A is then used to solve the system of equations A * X = B by calling BLAS3 routinechetrs_3.Only diagonal elements of the Hermitian block diagonal matrix D on the diagonal of A, i.e.
D(k,k)=A(k,k); (superdiagonal (or subdiagonal) elements of D are stored on exit in arrayE), andIf
uplo='U': factor U in the superdiagonal part of A. Ifuplo='L': factor L in the subdiagonal part of A.
For more info see the description of
chetrf_rk.Parameters
inuplo'U': Upper triangle of A is stored'L': Lower triangle of A is stored
innThe number of linear equations, i.e., the 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, ifinfo=0, diagonal of the block diagonal matrix D and factors U or L as computed bychetrf_rk:inldaThe leading dimension of the array A.
lda>=max(1,n).outEArray of dimension
n. On exit, contains the output computed by the factorization routinechetrf_rk, i.e. the superdiagonal (or subdiagonal) elements of the Hermitian block diagonal matrix D with 1-by-1 or 2-by-2 diagonal blocks, where ifuplo='U':E[i]=D(i-1,i),i=1:n-1,E[0]is set to 0; ifuplo='L':E[i]=D(i+1,i),i=0:n-2,E[n-1]is set to 0. For a 1-by-1 diagonal blockD(k), the elementE[k]is set to 0 in bothuplo='U'oruplo='L'cases. For more info see the description ofchetrf_rk.outipivinoutBArray of dimension
(ldb,nrhs). On entry, then-by-nrhsright hand side matrix B. On exit, ifinfo=0, then-by-nrhssolution matrix X.inldbThe leading dimension of the array B.
ldb>=max(1,n).outworkArray of dimension
max(1,lwork). Work array used in the factorization stage. On exit, ifinfo=0,work[0]returns the optimallwork.inlworkThe length of
work.lwork>=1. For best performance of the factorization stagelwork>=n*nb, wherenbis the optimal block size forchetrf_rk. 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=-k, the k-th argument had an illegal valueinfo>0: ifinfo=k, the matrix A is singular.
void chesv_rk(
const char* uplo,
const INT n,
const INT nrhs,
c64* restrict A,
const INT lda,
c64* restrict E,
INT* restrict ipiv,
c64* restrict B,
const INT ldb,
c64* restrict work,
const INT lwork,
INT* info
);
Functions
-
void zhesv_rk(const char *uplo, const INT n, const INT nrhs, c128 *restrict A, const INT lda, c128 *restrict E, INT *restrict ipiv, c128 *restrict B, const INT ldb, c128 *restrict work, const INT lwork, INT *info)#
ZHESV_RK 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.
The bounded Bunch-Kaufman (rook) diagonal pivoting method is used to factor A as A = P*U*D*(U**H)*(P**T), if uplo = ‘U’, or A = P*L*D*(L**H)*(P**T), if uplo = ‘L’, where U (or L) is unit upper (or lower) triangular matrix, U**H (or L**H) is the conjugate transpose of U (or L), P is a permutation matrix, P**T is the transpose of P, and D is Hermitian and block diagonal with 1-by-1 and 2-by-2 diagonal blocks.
zhetrf_rkis called to compute the factorization of a complex Hermitian matrix. The factored form of A is then used to solve the system of equations A * X = B by calling BLAS3 routinezhetrs_3.Only diagonal elements of the Hermitian block diagonal matrix D on the diagonal of A, i.e.
D(k,k)=A(k,k); (superdiagonal (or subdiagonal) elements of D are stored on exit in arrayE), andIf
uplo='U': factor U in the superdiagonal part of A. Ifuplo='L': factor L in the subdiagonal part of A.
For more info see the description of
zhetrf_rk.Parameters
inuplo'U': Upper triangle of A is stored'L': Lower triangle of A is stored
innThe number of linear equations, i.e., the 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, ifinfo=0, diagonal of the block diagonal matrix D and factors U or L as computed byzhetrf_rk:inldaThe leading dimension of the array A.
lda>=max(1,n).outEArray of dimension
n. On exit, contains the output computed by the factorization routinezhetrf_rk, i.e. the superdiagonal (or subdiagonal) elements of the Hermitian block diagonal matrix D with 1-by-1 or 2-by-2 diagonal blocks, where ifuplo='U':E[i]=D(i-1,i),i=1:n-1,E[0]is set to 0; ifuplo='L':E[i]=D(i+1,i),i=0:n-2,E[n-1]is set to 0. For a 1-by-1 diagonal blockD(k), the elementE[k]is set to 0 in bothuplo='U'oruplo='L'cases. For more info see the description ofzhetrf_rk.outipivinoutBArray of dimension
(ldb,nrhs). On entry, then-by-nrhsright hand side matrix B. On exit, ifinfo=0, then-by-nrhssolution matrix X.inldbThe leading dimension of the array B.
ldb>=max(1,n).outworkArray of dimension
max(1,lwork). Work array used in the factorization stage. On exit, ifinfo=0,work[0]returns the optimallwork.inlworkThe length of
work.lwork>=1. For best performance of the factorization stagelwork>=n*nb, wherenbis the optimal block size forzhetrf_rk. 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=-k, the k-th argument had an illegal valueinfo>0: ifinfo=k, the matrix A is singular.
void zhesv_rk(
const char* uplo,
const INT n,
const INT nrhs,
c128* restrict A,
const INT lda,
c128* restrict E,
INT* restrict ipiv,
c128* restrict B,
const INT ldb,
c128* restrict work,
const INT lwork,
INT* info
);