hptrf#

Functions

void chptrf(
    const char*          uplo,
    const INT            n,
          c64*  restrict AP,
          INT*  restrict ipiv,
          INT*           info
);
void chptrf(const char *uplo, const INT n, c64 *restrict AP, INT *restrict ipiv, INT *info)#

CHPTRF computes the factorization of a complex Hermitian packed matrix A using the Bunch-Kaufman diagonal pivoting method:

A = U*D*U**H or A = L*D*L**H

where U (or L) is a product of permutation and unit upper (lower) triangular matrices, and D is Hermitian and block diagonal with 1-by-1 and 2-by-2 diagonal blocks.

Parameters

in
uplo

Specifies whether the upper or lower triangular part of the Hermitian matrix A is stored:

  • = ‘U’: Upper triangle of A is stored

  • = ‘L’: Lower triangle of A is stored

in
n

The order of the matrix A. n >= 0.

inout
AP

On entry, the upper or lower triangle of the Hermitian matrix A, packed columnwise in a linear array of dimension n*(n+1)/2. On exit, the block diagonal matrix D and the multipliers used to obtain the factor U or L, stored as a packed triangular matrix.

out
ipiv

Details of the interchanges and the block structure of D. Array of dimension n, 0-based indexing.

  • If ipiv[k] >= 0, then rows and columns k and ipiv[k] were interchanged and D(k,k) is a 1-by-1 diagonal block.

  • If uplo = ‘U’ and ipiv[k] = ipiv[k-1] < 0, then rows and columns k-1 and -ipiv[k]-1 were interchanged and D(k-1:k,k-1:k) is a 2-by-2 diagonal block.

  • If uplo = ‘L’ and ipiv[k] = ipiv[k+1] < 0, then rows and columns k+1 and -ipiv[k]-1 were interchanged and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.

out
info

Exit status:

  • = 0: successful exit

  • < 0: if info = -i, the i-th argument had an illegal value

  • > 0: if info = i, D(i,i) is exactly zero. The factorization has been completed, but the block diagonal matrix D is exactly singular, and division by zero will occur if it is used to solve a system of equations.

Functions

void zhptrf(
    const char*          uplo,
    const INT            n,
          c128* restrict AP,
          INT*  restrict ipiv,
          INT*           info
);
void zhptrf(const char *uplo, const INT n, c128 *restrict AP, INT *restrict ipiv, INT *info)#

ZHPTRF computes the factorization of a complex Hermitian packed matrix A using the Bunch-Kaufman diagonal pivoting method:

A = U*D*U**H or A = L*D*L**H

where U (or L) is a product of permutation and unit upper (lower) triangular matrices, and D is Hermitian and block diagonal with 1-by-1 and 2-by-2 diagonal blocks.

Parameters

in
uplo

Specifies whether the upper or lower triangular part of the Hermitian matrix A is stored:

  • = ‘U’: Upper triangle of A is stored

  • = ‘L’: Lower triangle of A is stored

in
n

The order of the matrix A. n >= 0.

inout
AP

On entry, the upper or lower triangle of the Hermitian matrix A, packed columnwise in a linear array of dimension n*(n+1)/2. On exit, the block diagonal matrix D and the multipliers used to obtain the factor U or L, stored as a packed triangular matrix.

out
ipiv

Details of the interchanges and the block structure of D. Array of dimension n, 0-based indexing.

  • If ipiv[k] >= 0, then rows and columns k and ipiv[k] were interchanged and D(k,k) is a 1-by-1 diagonal block.

  • If uplo = ‘U’ and ipiv[k] = ipiv[k-1] < 0, then rows and columns k-1 and -ipiv[k]-1 were interchanged and D(k-1:k,k-1:k) is a 2-by-2 diagonal block.

  • If uplo = ‘L’ and ipiv[k] = ipiv[k+1] < 0, then rows and columns k+1 and -ipiv[k]-1 were interchanged and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.

out
info

Exit status:

  • = 0: successful exit

  • < 0: if info = -i, the i-th argument had an illegal value

  • > 0: if info = i, D(i,i) is exactly zero. The factorization has been completed, but the block diagonal matrix D is exactly singular, and division by zero will occur if it is used to solve a system of equations.