lahef_rk(3)

πŸ’– NAME πŸ’–

okay so this is the lahef_rk(3) page, bestie β€” lahef_rk - la{he,sy}f_rk: triangular factor step. it lives in the Library Functions Manual, and it's serving the full glow-up docs for the triangular factor step routines. periodt. πŸ’…


✨ SYNOPSIS ✨

🫢 Functions

  • subroutine clahef_rk (uplo, n, nb, kb, a, lda, e, ipiv, w, ldw, info) β€” CLAHEF_RK computes a partial factorization of a complex Hermitian indefinite matrix using bounded Bunch-Kaufman (rook) diagonal pivoting method.
  • subroutine clasyf_rk (uplo, n, nb, kb, a, lda, e, ipiv, w, ldw, info) β€” CLASYF_RK computes a partial factorization of a complex symmetric indefinite matrix using bounded Bunch-Kaufman (rook) diagonal pivoting method.
  • subroutine dlasyf_rk (uplo, n, nb, kb, a, lda, e, ipiv, w, ldw, info) β€” DLASYF_RK computes a partial factorization of a real symmetric indefinite matrix using bounded Bunch-Kaufman (rook) diagonal pivoting method.
  • subroutine slasyf_rk (uplo, n, nb, kb, a, lda, e, ipiv, w, ldw, info) β€” SLASYF_RK computes a partial factorization of a real symmetric indefinite matrix using bounded Bunch-Kaufman (rook) diagonal pivoting method.
  • subroutine zlahef_rk (uplo, n, nb, kb, a, lda, e, ipiv, w, ldw, info) β€” ZLAHEF_RK computes a partial factorization of a complex Hermitian indefinite matrix using bounded Bunch-Kaufman (rook) diagonal pivoting method.
  • subroutine zlasyf_rk (uplo, n, nb, kb, a, lda, e, ipiv, w, ldw, info) β€” ZLASYF_RK computes a partial factorization of a complex symmetric indefinite matrix using bounded Bunch-Kaufman (rook) diagonal pivoting method.

🌈 Detailed Description 🌈

this section is lowkey just the landing pad, bestie β€” the actual function docs are right below in Function Documentation. no cap. πŸ¦‹


πŸŽ€ Function Documentation πŸŽ€

πŸ’œ Function: clahef_rk πŸ’œ

the full signature, exactly as the page gives it:

subroutine clahef_rk (character uplo, integer n, integer nb, integer kb,
    complex, dimension( lda, * ) a, integer lda, complex, dimension( * ) e,
    integer, dimension( * ) ipiv, complex, dimension( ldw, * ) w, integer
    ldw, integer info)

CLAHEF_RK computes a partial factorization of a complex Hermitian indefinite matrix using bounded Bunch-Kaufman (rook) diagonal pivoting method.

🎯 Purpose:

okay so CLAHEF_RK computes a partial factorization of a complex Hermitian matrix A using the bounded Bunch-Kaufman (rook) diagonal pivoting method. the partial factorization has the form:

A  =  ( I  U12 ) ( A11  0  ) (  I       0    )  if UPLO = 'U', or:
      ( 0  U22 ) (  0   D  ) ( U12**H U22**H )

A  =  ( L11  0 ) (  D   0  ) ( L11**H L21**H )  if UPLO = 'L',
      ( L21  I ) (  0  A22 ) (  0       I    )

where the order of D is at most NB. the actual order is returned in the argument KB, and is either NB or NB-1, or N if N <= NB.

CLAHEF_RK is an auxiliary routine called by CHETRF_RK. it uses blocked code (calling Level 3 BLAS) to update the submatrix A11 (if UPLO = 'U') or A22 (if UPLO = 'L'). πŸ’–

🌸 Parameters

  • UPLO β€” is CHARACTER*1. specifies whether the upper or lower triangular part of the Hermitian matrix A is stored:
    • = 'U': Upper triangular
    • = 'L': Lower triangular
  • N β€” is INTEGER. the order of the matrix A. N >= 0.
  • NB β€” is INTEGER. the maximum number of columns of the matrix A that should be factored. NB should be at least 2 to allow for 2-by-2 pivot blocks.
  • KB β€” is INTEGER. the number of columns of A that were actually factored. KB is either NB-1 or NB, or N if N <= NB.
  • A β€” is COMPLEX array, dimension (LDA,N).
    • on entry, the Hermitian matrix A.
    • if UPLO = 'U': the leading N-by-N upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced.
    • if UPLO = 'L': the leading N-by-N lower 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, contains:
      • a) 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 array E), and
      • b) if UPLO = 'U': factor U in the superdiagonal part of A. if UPLO = 'L': factor L in the subdiagonal part of A.
  • LDA β€” is INTEGER. the leading dimension of the array A. LDA >= max(1,N).
  • E β€” is COMPLEX array, dimension (N). on exit, contains the superdiagonal (or subdiagonal) elements of the Hermitian block diagonal matrix D with 1-by-1 or 2-by-2 diagonal blocks, where:
    • if UPLO = 'U': E(i) = D(i-1,i), i=2:N, E(1) is set to 0;
    • if UPLO = 'L': E(i) = D(i+1,i), i=1:N-1, E(N) is set to 0.

NOTE: for 1-by-1 diagonal block D(k), where 1 <= k <= N, the element E(k) is set to 0 in both UPLO = 'U' or UPLO = 'L' cases.

  • IPIV β€” is INTEGER array, dimension (N). IPIV describes the permutation matrix P in the factorization of matrix A as follows. the absolute value of IPIV(k) represents the index of row and column that were interchanged with the k-th row and column. the value of UPLO describes the order in which the interchanges were applied. also, the sign of IPIV represents the block structure of the Hermitian block diagonal matrix D with 1-by-1 or 2-by-2 diagonal blocks which correspond to 1 or 2 interchanges at each factorization step.

if UPLO = 'U', (in factorization order, k decreases from N to 1):

  • a) a single positive entry IPIV(k) > 0 means: D(k,k) is a 1-by-1 diagonal block. if IPIV(k) != k, rows and columns k and IPIV(k) were interchanged in the submatrix A(1:N,N-KB+1:N); if IPIV(k) = k, no interchange occurred.
  • b) a pair of consecutive negative entries IPIV(k) < 0 and IPIV(k-1) < 0 means: D(k-1:k,k-1:k) is a 2-by-2 diagonal block. (NOTE: negative entries in IPIV appear ONLY in pairs).
    1. if -IPIV(k) != k, rows and columns k and -IPIV(k) were interchanged in the matrix A(1:N,N-KB+1:N). if -IPIV(k) = k, no interchange occurred.
    2. if -IPIV(k-1) != k-1, rows and columns k-1 and -IPIV(k-1) were interchanged in the submatrix A(1:N,N-KB+1:N). if -IPIV(k-1) = k-1, no interchange occurred.
  • c) in both cases a) and b) is always ABS( IPIV(k) ) <= k.
  • d) NOTE: any entry IPIV(k) is always NONZERO on output.

if UPLO = 'L', (in factorization order, k increases from 1 to N):

  • a) a single positive entry IPIV(k) > 0 means: D(k,k) is a 1-by-1 diagonal block. if IPIV(k) != k, rows and columns k and IPIV(k) were interchanged in the submatrix A(1:N,1:KB). if IPIV(k) = k, no interchange occurred.
  • b) a pair of consecutive negative entries IPIV(k) < 0 and IPIV(k+1) < 0 means: D(k:k+1,k:k+1) is a 2-by-2 diagonal block. (NOTE: negative entries in IPIV appear ONLY in pairs).
    1. if -IPIV(k) != k, rows and columns k and -IPIV(k) were interchanged in the submatrix A(1:N,1:KB). if -IPIV(k) = k, no interchange occurred.
    2. if -IPIV(k+1) != k+1, rows and columns k-1 and -IPIV(k-1) were interchanged in the submatrix A(1:N,1:KB). if -IPIV(k+1) = k+1, no interchange occurred.
  • c) in both cases a) and b) is always ABS( IPIV(k) ) >= k.
  • d) NOTE: any entry IPIV(k) is always NONZERO on output.
  • W β€” is COMPLEX array, dimension (LDW,NB).
  • LDW β€” is INTEGER. the leading dimension of the array W. LDW >= max(1,N).
  • INFO β€” is INTEGER.
    • = 0: successful exit
    • < 0: if INFO = -k, the k-th argument had an illegal value
    • > 0: if INFO = k, the matrix A is singular, because:
      • if UPLO = 'U': column k in the upper triangular part of A contains all zeros.
      • if UPLO = 'L': column k in the lower triangular part of A contains all zeros.

therefore D(k,k) is exactly zero, and superdiagonal elements of column k of U (or subdiagonal elements of column k of L) are all zeros. 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.

NOTE: INFO only stores the first occurrence of a singularity, any subsequent occurrence of singularity is not stored in INFO even though the factorization always completes. 😭

πŸ’Œ Author

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

Contributors:

okay so before we move on, here are the contributor receipts for clahef_rk, bestie πŸ’–

  • December 2016, Igor Kozachenko, Computer Science Division, University of California, Berkeley
  • September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas, School of Mathematics, University of Manchester

Definition at line 260 of file clahef_rk.f.


clasyf_rk πŸ’…

subroutine clasyf_rk (character uplo, integer n, integer nb, integer kb,
    complex, dimension( lda, * ) a, integer lda, complex, dimension( * ) e,
    integer, dimension( * ) ipiv, complex, dimension( ldw, * ) w, integer
    ldw, integer info)

clasyf_rk computes a partial factorization of a complex symmetric indefinite matrix using the bounded Bunch-Kaufman (rook) diagonal pivoting method. it's giving "auxiliary routine that does the actual blocked factorization work" ✨

Purpose πŸŽ€

okay so CLASYF_RK computes a partial factorization of a complex symmetric matrix A using the bounded Bunch-Kaufman (rook) diagonal pivoting method. the partial factorization has the form:

A  =  ( I  U12 ) ( A11  0  ) (  I       0    )  if UPLO = 'U', or:
      ( 0  U22 ) (  0   D  ) ( U12**T U22**T )

A  =  ( L11  0 ) (  D   0  ) ( L11**T L21**T )  if UPLO = 'L',
      ( L21  I ) (  0  A22 ) (  0       I    )

where the order of D is at most NB. the actual order is returned in the argument KB, and is either NB or NB-1, or N if N <= NB.

CLASYF_RK is an auxiliary routine called by CSYTRF_RK. it uses blocked code (calling Level 3 BLAS) to update the submatrix A11 (if UPLO = 'U') or A22 (if UPLO = 'L'). she's an icon, she's a legend, she's the moment πŸ‘‘

Parameters 🌸

  • UPLO β€” UPLO is CHARACTER*1. specifies whether the upper or lower triangular part of the symmetric matrix A is stored:
    • = 'U': upper triangular
    • = 'L': lower triangular
  • N β€” N is INTEGER. the order of the matrix A. N >= 0.
  • NB β€” NB is INTEGER. the maximum number of columns of the matrix A that should be factored. NB should be at least 2 to allow for 2-by-2 pivot blocks.
  • KB β€” KB is INTEGER. the number of columns of A that were actually factored. KB is either NB-1 or NB, or N if N <= NB.
  • A β€” A is COMPLEX array, dimension (LDA,N).
    • on entry, the symmetric matrix A.
      • if UPLO = 'U': the leading N-by-N upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced.
      • if UPLO = 'L': the leading N-by-N lower 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, contains:
      • a) ONLY diagonal elements of the symmetric 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 array E), and
      • b) if UPLO = 'U': factor U in the superdiagonal part of A. if UPLO = 'L': factor L in the subdiagonal part of A.
  • LDA β€” LDA is INTEGER. the leading dimension of the array A. LDA >= max(1,N).
  • E β€” E is COMPLEX array, dimension (N). on exit, contains the superdiagonal (or subdiagonal) elements of the symmetric block diagonal matrix D with 1-by-1 or 2-by-2 diagonal blocks, where:
    • if UPLO = 'U': E(i) = D(i-1,i), i=2:N, E(1) is set to 0;
    • if UPLO = 'L': E(i) = D(i+1,i), i=1:N-1, E(N) is set to 0.
NOTE: for 1-by-1 diagonal block D(k), where 1 <= k <= N, the element E(k) is set to 0 in both UPLO = 'U' or UPLO = 'L' cases.
  • IPIV β€” IPIV is INTEGER array, dimension (N). IPIV describes the permutation matrix P in the factorization of matrix A as follows. the absolute value of IPIV(k) represents the index of row and column that were interchanged with the k-th row and column. the value of UPLO describes the order in which the interchanges were applied. also, the sign of IPIV represents the block structure of the symmetric block diagonal matrix D with 1-by-1 or 2-by-2 diagonal blocks which correspond to 1 or 2 interchanges at each factorization step.

if UPLO = 'U', (in factorization order, k decreases from N to 1):

  • a) a single positive entry IPIV(k) > 0 means:
    • D(k,k) is a 1-by-1 diagonal block.
    • if IPIV(k) != k, rows and columns k and IPIV(k) were interchanged in the submatrix A(1:N,N-KB+1:N);
    • if IPIV(k) = k, no interchange occurred.
  • b) a pair of consecutive negative entries IPIV(k) < 0 and IPIV(k-1) < 0 means:
    • D(k-1:k,k-1:k) is a 2-by-2 diagonal block.
    • (NOTE: negative entries in IPIV appear ONLY in pairs).
    • 1) if -IPIV(k) != k, rows and columns k and -IPIV(k) were interchanged in the matrix A(1:N,N-KB+1:N). if -IPIV(k) = k, no interchange occurred.
    • 2) if -IPIV(k-1) != k-1, rows and columns k-1 and -IPIV(k-1) were interchanged in the submatrix A(1:N,N-KB+1:N). if -IPIV(k-1) = k-1, no interchange occurred.
  • c) in both cases a) and b) is always ABS( IPIV(k) ) <= k.
  • d) NOTE: any entry IPIV(k) is always NONZERO on output.

if UPLO = 'L', (in factorization order, k increases from 1 to N):

  • a) a single positive entry IPIV(k) > 0 means:
    • D(k,k) is a 1-by-1 diagonal block.
    • if IPIV(k) != k, rows and columns k and IPIV(k) were interchanged in the submatrix A(1:N,1:KB).
    • if IPIV(k) = k, no interchange occurred.
  • b) a pair of consecutive negative entries IPIV(k) < 0 and IPIV(k+1) < 0 means:
    • D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
    • (NOTE: negative entries in IPIV appear ONLY in pairs).
    • 1) if -IPIV(k) != k, rows and columns k and -IPIV(k) were interchanged in the submatrix A(1:N,1:KB). if -IPIV(k) = k, no interchange occurred.
    • 2) if -IPIV(k+1) != k+1, rows and columns k-1 and -IPIV(k-1) were interchanged in the submatrix A(1:N,1:KB). if -IPIV(k+1) = k+1, no interchange occurred.
  • c) in both cases a) and b) is always ABS( IPIV(k) ) >= k.
  • d) NOTE: any entry IPIV(k) is always NONZERO on output.
  • W β€” W is COMPLEX array, dimension (LDW,NB).
  • LDW β€” LDW is INTEGER. the leading dimension of the array W. LDW >= max(1,N).
  • INFO β€” INFO is INTEGER.
    • = 0: successful exit
    • < 0: if INFO = -k, the k-th argument had an illegal value
    • > 0: if INFO = k, the matrix A is singular, because:
      • if UPLO = 'U': column k in the upper triangular part of A contains all zeros.
      • if UPLO = 'L': column k in the lower triangular part of A contains all zeros.

therefore D(k,k) is exactly zero, and superdiagonal elements of column k of U (or subdiagonal elements of column k of L) are all zeros. 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.

NOTE: INFO only stores the first occurrence of a singularity, any subsequent occurrence of singularity is not stored in INFO even though the factorization always completes. 😭 this is important, bestie.

Author πŸ‘‘

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

Contributors πŸ’–

  • December 2016, Igor Kozachenko, Computer Science Division, University of California, Berkeley
  • September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas, School of Mathematics, University of Manchester

Definition at line 260 of file clasyf_rk.f.


dlasyf_rk πŸ¦‹

subroutine dlasyf_rk (character uplo, integer n, integer nb, integer kb,
    double precision, dimension( lda, * ) a, integer lda, double precision,
    dimension( * ) e, integer, dimension( * ) ipiv, double precision,
    dimension( ldw, * ) w, integer ldw, integer info)

dlasyf_rk computes a partial factorization of a real symmetric indefinite matrix using bounded Bunch-Kaufman (rook) diagonal pivoting method. yes ma'am, the real-valued sibling is here too ✨

Purpose πŸŽ€

okay so DLASYF_RK is literally the partial-factorization bestie for a real symmetric matrix A, and it uses the bounded Bunch-Kaufman (rook) diagonal pivoting method. The partial factorization has this exact shape:

A  =  ( I  U12 ) ( A11  0  ) (  I       0    )  if UPLO = 'U', or:
      ( 0  U22 ) (  0   D  ) ( U12**T U22**T )

A  =  ( L11  0 ) (  D   0  ) ( L11**T L21**T )  if UPLO = 'L',
      ( L21  I ) (  0  A22 ) (  0       I    )

and the tea is: the order of D is at most NB. The actual order comes back in the argument KB, and it’s either NB or NB-1, or N if N <= NB.

DLASYF_RK is an auxiliary routine called by DSYTRF_RK. It uses blocked code (calling Level 3 BLAS) to update the submatrix A11 (if UPLO = 'U') or A22 (if UPLO = 'L'). no cap, that’s the whole vibe. ✨

✨ Parameters ✨

  • UPLO β€” CHARACTER*1. Specifies whether the upper or lower triangular part of the symmetric matrix A is stored:
    • = 'U': Upper triangular
    • = 'L': Lower triangular
  • N β€” INTEGER. The order of the matrix A. N >= 0.
  • NB β€” INTEGER. The maximum number of columns of the matrix A that should be factored. NB should be at least 2 to allow for 2-by-2 pivot blocks.
  • KB β€” INTEGER. The number of columns of A that were actually factored. KB is either NB-1 or NB, or N if N <= NB.
  • A β€” DOUBLE PRECISION array, dimension (LDA,N). On entry, the symmetric matrix A.
    • If UPLO = 'U': the leading N-by-N upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced.
    • If UPLO = 'L': the leading N-by-N lower 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, contains:

  • a) ONLY diagonal elements of the symmetric 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 array E), and
  • b) If UPLO = 'U': factor U in the superdiagonal part of A. If UPLO = 'L': factor L in the subdiagonal part of A.
  • LDA β€” INTEGER. The leading dimension of the array A. LDA >= max(1,N).
  • E β€” DOUBLE PRECISION array, dimension (N). On exit, contains the superdiagonal (or subdiagonal) elements of the symmetric block diagonal matrix D with 1-by-1 or 2-by-2 diagonal blocks, where:
    • If UPLO = 'U': E(i) = D(i-1,i), i=2:N, E(1) is set to 0;
    • If UPLO = 'L': E(i) = D(i+1,i), i=1:N-1, E(N) is set to 0.

NOTE: For 1-by-1 diagonal block D(k), where 1 <= k <= N, the element E(k) is set to 0 in both UPLO = 'U' or UPLO = 'L' cases. she’s consistent, your honor.

  • IPIV β€” INTEGER array, dimension (N). IPIV describes the permutation matrix P in the factorization of matrix A as follows. The absolute value of IPIV(k) represents the index of row and column that were interchanged with the k-th row and column. The value of UPLO describes the order in which the interchanges were applied. Also, the sign of IPIV represents the block structure of the symmetric block diagonal matrix D with 1-by-1 or 2-by-2 diagonal blocks which correspond to 1 or 2 interchanges at each factorization step.

If UPLO = 'U', (in factorization order, k decreases from N to 1):

  • a) A single positive entry IPIV(k) > 0 means: D(k,k) is a 1-by-1 diagonal block. If IPIV(k) != k, rows and columns k and IPIV(k) were interchanged in the submatrix A(1:N,N-KB+1:N); If IPIV(k) = k, no interchange occurred.
  • b) A pair of consecutive negative entries IPIV(k) < 0 and IPIV(k-1) < 0 means: D(k-1:k,k-1:k) is a 2-by-2 diagonal block. (NOTE: negative entries in IPIV appear ONLY in pairs).
    1. If -IPIV(k) != k, rows and columns k and -IPIV(k) were interchanged in the matrix A(1:N,N-KB+1:N). If -IPIV(k) = k, no interchange occurred.
    2. If -IPIV(k-1) != k-1, rows and columns k-1 and -IPIV(k-1) were interchanged in the submatrix A(1:N,N-KB+1:N). If -IPIV(k-1) = k-1, no interchange occurred.
  • c) In both cases a) and b) is always ABS( IPIV(k) ) <= k.
  • d) NOTE: Any entry IPIV(k) is always NONZERO on output.

If UPLO = 'L', (in factorization order, k increases from 1 to N):

  • a) A single positive entry IPIV(k) > 0 means: D(k,k) is a 1-by-1 diagonal block. If IPIV(k) != k, rows and columns k and IPIV(k) were interchanged in the submatrix A(1:N,1:KB). If IPIV(k) = k, no interchange occurred.
  • b) A pair of consecutive negative entries IPIV(k) < 0 and IPIV(k+1) < 0 means: D(k:k+1,k:k+1) is a 2-by-2 diagonal block. (NOTE: negative entries in IPIV appear ONLY in pairs).
    1. If -IPIV(k) != k, rows and columns k and -IPIV(k) were interchanged in the submatrix A(1:N,1:KB). If -IPIV(k) = k, no interchange occurred.
    2. If -IPIV(k+1) != k+1, rows and columns k-1 and -IPIV(k-1) were interchanged in the submatrix A(1:N,1:KB). If -IPIV(k+1) = k+1, no interchange occurred.
  • c) In both cases a) and b) is always ABS( IPIV(k) ) >= k.
  • d) NOTE: Any entry IPIV(k) is always NONZERO on output.
  • W β€” DOUBLE PRECISION array, dimension (LDW,NB).
  • LDW β€” INTEGER. The leading dimension of the array W. LDW >= max(1,N).
  • INFO β€” INTEGER.
    • = 0: successful exit
    • < 0: If INFO = -k, the k-th argument had an illegal value
    • > 0: If INFO = k, the matrix A is singular, because:
      • If UPLO = 'U': column k in the upper triangular part of A contains all zeros.
      • If UPLO = 'L': column k in the lower triangular part of A contains all zeros.

Therefore D(k,k) is exactly zero, and superdiagonal elements of column k of U (or subdiagonal elements of column k of L ) are all zeros. 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. like bestie, do not do that. πŸ’€

NOTE: INFO only stores the first occurrence of a singularity, any subsequent occurrence of singularity is not stored in INFO even though the factorization always completes.

πŸ’œ Author πŸ’œ

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

πŸŽ€ Contributors: πŸŽ€

  • December 2016, Igor Kozachenko, Computer Science Division, University of California, Berkeley
  • September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas, School of Mathematics, University of Manchester

Definition at line 260 of file dlasyf_rk.f.


πŸ’– slasyf_rk πŸ’–

   subroutine slasyf_rk (character uplo, integer n, integer nb, integer kb,
       real, dimension( lda, * ) a, integer lda, real, dimension( * ) e,
       integer, dimension( * ) ipiv, real, dimension( ldw, * ) w, integer ldw,
       integer info)

SLASYF_RK computes a partial factorization of a real symmetric indefinite matrix using bounded Bunch-Kaufman (rook) diagonal pivoting method. same energy, different precision. ✨

Purpose

SLASYF_RK computes a partial factorization of a real symmetric matrix A using the bounded Bunch-Kaufman (rook) diagonal pivoting method. The partial factorization has the form:

A  =  ( I  U12 ) ( A11  0  ) (  I       0    )  if UPLO = 'U', or:
      ( 0  U22 ) (  0   D  ) ( U12**T U22**T )

A  =  ( L11  0 ) (  D   0  ) ( L11**T L21**T )  if UPLO = 'L',
      ( L21  I ) (  0  A22 ) (  0       I    )

where the order of D is at most NB. The actual order is returned in the argument KB, and is either NB or NB-1, or N if N <= NB.

SLASYF_RK is an auxiliary routine called by SSYTRF_RK. It uses blocked code (calling Level 3 BLAS) to update the submatrix A11 (if UPLO = 'U') or A22 (if UPLO = 'L').

✨ Parameters (again, for SLASYF_RK) ✨

  • UPLO β€” CHARACTER*1. Specifies whether the upper or lower triangular part of the symmetric matrix A is stored:
    • = 'U': Upper triangular
    • = 'L': Lower triangular
  • N β€” INTEGER. The order of the matrix A. N >= 0.
  • NB β€”
  • NB β€” INTEGER. The max number of columns of the matrix A that should be factored, bestie. NB should be at least 2 so that 2-by-2 pivot blocks are even allowed to exist πŸ’…
  • KB β€” INTEGER. The number of columns of A that were actually factored. KB is either NB-1 or NB, or N if N <= NB. slay, it did the thing ✨
  • A β€” REAL array, dimension (LDA,N).
    • On entry: the symmetric matrix A.
      • If UPLO = 'U': the leading N-by-N upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced.
      • If UPLO = 'L': the leading N-by-N lower 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, contains:
      • a) ONLY diagonal elements of the symmetric 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 array E), and
      • b) If UPLO = 'U': factor U in the superdiagonal part of A. If UPLO = 'L': factor L in the subdiagonal part of A.
  • LDA β€” INTEGER. The leading dimension of the array A. LDA >= max(1,N). no pressure or anything 🫢
  • E β€” REAL array, dimension (N).

On exit, contains the superdiagonal (or subdiagonal) elements of the symmetric block diagonal matrix D with 1-by-1 or 2-by-2 diagonal blocks, where:

  • If UPLO = 'U': E(i) = D(i-1,i), i=2:N, E(1) is set to 0;
  • If UPLO = 'L': E(i) = D(i+1,i), i=1:N-1, E(N) is set to 0.
NOTE: For 1-by-1 diagonal block D(k), where 1 <= k <= N, the element E(k) is set to 0 in both UPLO = 'U' or UPLO = 'L' cases. both. fr fr both. πŸŽ€
  • IPIV β€” INTEGER array, dimension (N).

IPIV describes the permutation matrix P in the factorization of matrix A as follows. The absolute value of IPIV(k) represents the index of row and column that were interchanged with the k-th row and column. The value of UPLO describes the order in which the interchanges were applied. Also, the sign of IPIV represents the block structure of the symmetric block diagonal matrix D with 1-by-1 or 2-by-2 diagonal blocks which correspond to 1 or 2 interchanges at each factorization step.

If UPLO = 'U' (in factorization order, k decreases from N to 1):

  • a) A single positive entry IPIV(k) > 0 means: D(k,k) is a 1-by-1 diagonal block.
    • If IPIV(k) != k, rows and columns k and IPIV(k) were interchanged in the submatrix A(1:N,N-KB+1:N);
    • If IPIV(k) = k, no interchange occurred.
  • b) A pair of consecutive negative entries IPIV(k) < 0 and IPIV(k-1) < 0 means: D(k-1:k,k-1:k) is a 2-by-2 diagonal block. (NOTE: negative entries in IPIV appear ONLY in pairs).
    1. If -IPIV(k) != k, rows and columns k and -IPIV(k) were interchanged in the matrix A(1:N,N-KB+1:N). If -IPIV(k) = k, no interchange occurred.
    2. If -IPIV(k-1) != k-1, rows and columns k-1 and -IPIV(k-1) were interchanged in the submatrix A(1:N,N-KB+1:N). If -IPIV(k-1) = k-1, no interchange occurred.
  • c) In both cases a) and b) it's always ABS( IPIV(k) ) <= k. periodt.
  • d) NOTE: Any entry IPIV(k) is always NONZERO on output. πŸ’€

If UPLO = 'L' (in factorization order, k increases from 1 to N):

  • a) A single positive entry IPIV(k) > 0 means: D(k,k) is a 1-by-1 diagonal block.
    • If IPIV(k) != k, rows and columns k and IPIV(k) were interchanged in the submatrix A(1:N,1:KB).
    • If IPIV(k) = k, no interchange occurred.
  • b) A pair of consecutive negative entries IPIV(k) < 0 and IPIV(k+1) < 0 means: D(k:k+1,k:k+1) is a 2-by-2 diagonal block. (NOTE: negative entries in IPIV appear ONLY in pairs).
    1. If -IPIV(k) != k, rows and columns k and -IPIV(k) were interchanged in the submatrix A(1:N,1:KB). If -IPIV(k) = k, no interchange occurred.
    2. If -IPIV(k+1) != k+1, rows and columns k-1 and -IPIV(k-1) were interchanged in the submatrix A(1:N,1:KB). If -IPIV(k+1) = k+1, no interchange occurred.
  • c) In both cases a) and b) it's always ABS( IPIV(k) ) >= k. yes the inequality flipped, that's not a typo bestie πŸ‘€
  • d) NOTE: Any entry IPIV(k) is always NONZERO on output.
  • W β€” REAL array, dimension (LDW,NB). that's it. that's the whole description. iconic minimalism 🌸
  • LDW β€” INTEGER. The leading dimension of the array W. LDW >= max(1,N).
  • INFO β€” INTEGER.
    • = 0: successful exit πŸŽ‰
    • < 0: If INFO = -k, the k-th argument had an illegal value. rude.
    • > 0: If INFO = k, the matrix A is singular, because:
      • If UPLO = 'U': column k in the upper triangular part of A contains all zeros.
      • If UPLO = 'L': column k in the lower triangular part of A contains all zeros.

Therefore D(k,k) is exactly zero, and superdiagonal elements of column k of U (or subdiagonal elements of column k of L) are all zeros. 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. 🚨 like actually do not do that. division by zero is not the vibe. 🚨

NOTE: INFO only stores the first occurrence of a singularity, any subsequent occurrence of singularity is not stored in INFO even though the factorization always completes.

✨ Author ✨

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.


🫢 Contributors 🫢

  • December 2016, Igor Kozachenko, Computer Science Division, University of California, Berkeley
  • September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas, School of Mathematics, University of Manchester

Definition at line 260 of file slasyf_rk.f.


🌈 subroutine zlahef_rk 🌈

subroutine zlahef_rk (character uplo, integer n, integer nb, integer kb,
    complex*16, dimension( lda, * ) a, integer lda, complex*16, dimension( *
    ) e, integer, dimension( * ) ipiv, complex*16, dimension( ldw, * ) w,
    integer ldw, integer info)

ZLAHEF_RK computes a partial factorization of a complex Hermitian indefinite matrix using the bounded Bunch-Kaufman (rook) diagonal pivoting method. okay go off bestie πŸ‘‘

πŸ’œ Purpose πŸ’œ

ZLAHEF_RK computes a partial factorization of a complex Hermitian
matrix A using the bounded Bunch-Kaufman (rook) diagonal
pivoting method. The partial factorization has the form:

A  =  ( I  U12 ) ( A11  0  ) (  I       0    )  if UPLO = 'U', or:
      ( 0  U22 ) (  0   D  ) ( U12**H U22**H )

A  =  ( L11  0 ) (  D   0  ) ( L11**H L21**H )  if UPLO = 'L',
      ( L21  I ) (  0  A22 ) (  0       I    )

where the order of D is at most NB. The actual order is returned in the argument KB, and is either NB or NB-1, or N if N <= NB.

ZLAHEF_RK is an auxiliary routine called by ZHETRF_RK. It uses blocked code (calling Level 3 BLAS) to update the submatrix A11 (if UPLO = 'U') or A22 (if UPLO = 'L'). blocked code + Level 3 BLAS = main character energy for real πŸ”₯

πŸŽ€ Parameters πŸŽ€

  • UPLO β€” CHARACTER*1. Specifies whether the upper or lower triangular part of the Hermitian matrix A is stored:
    • = 'U': Upper triangular
    • = 'L': Lower triangular
  • N β€” INTEGER. The order of the matrix A. N >= 0.
  • NB β€” INTEGER. The maximum number of columns of the matrix A that should be factored. NB should be at least 2 to allow for 2-by-2 pivot blocks.
  • KB β€” INTEGER. The number of columns of A that were actually factored. KB is either NB-1 or NB, or N if N <= NB.
  • A β€”

Okay so A is a COMPLEX*16 array, dimension (LDA,N). On entry, it's the Hermitian matrix A, bestie πŸ’–

  • If UPLO = 'U': the leading N-by-N upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced.
  • If UPLO = 'L': the leading N-by-N lower 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, it contains:

  • a) 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 array E), and
  • b) If UPLO = 'U': factor U in the superdiagonal part of A. If UPLO = 'L': factor L in the subdiagonal part of A.
  • LDA β€” INTEGER. The leading dimension of the array A. LDA >= max(1,N). Slay ✨
  • E β€” COMPLEX*16 array, dimension (N). On exit, it contains the superdiagonal (or subdiagonal) elements of the Hermitian block diagonal matrix D with 1-by-1 or 2-by-2 diagonal blocks, where:
    • If UPLO = 'U': E(i) = D(i-1,i), i=2:N, E(1) is set to 0;
    • If UPLO = 'L': E(i) = D(i+1,i), i=1:N-1, E(N) is set to 0.
NOTE: For 1-by-1 diagonal block D(k), where 1 <= k <= N, the element E(k) is set to 0 in both UPLO = 'U' or UPLO = 'L' cases. No cap 🫢
  • IPIV β€” INTEGER array, dimension (N). IPIV describes the permutation matrix P in the factorization of matrix A as follows. The absolute value of IPIV(k) represents the index of row and column that were interchanged with the k-th row and column. The value of UPLO describes the order in which the interchanges were applied. Also, the sign of IPIV represents the block structure of the Hermitian block diagonal matrix D with 1-by-1 or 2-by-2 diagonal blocks which correspond to 1 or 2 interchanges at each factorization step. This one is giving main character energy, ngl πŸ’…
    • If UPLO = 'U', (in factorization order, k decreases from N to 1):
      • a) A single positive entry IPIV(k) > 0 means: D(k,k) is a 1-by-1 diagonal block. If IPIV(k) != k, rows and columns k and IPIV(k) were interchanged in the submatrix A(1:N,N-KB+1:N); If IPIV(k) = k, no interchange occurred.
      • b) A pair of consecutive negative entries IPIV(k) < 0 and IPIV(k-1) < 0 means: D(k-1:k,k-1:k) is a 2-by-2 diagonal block. (NOTE: negative entries in IPIV appear ONLY in pairs).
        1. If -IPIV(k) != k, rows and columns k and -IPIV(k) were interchanged in the matrix A(1:N,N-KB+1:N). If -IPIV(k) = k, no interchange occurred.
        2. If -IPIV(k-1) != k-1, rows and columns k-1 and -IPIV(k-1) were interchanged in the submatrix A(1:N,N-KB+1:N). If -IPIV(k-1) = k-1, no interchange occurred.
      • c) In both cases a) and b) is always ABS( IPIV(k) ) <= k.
      • d) NOTE: Any entry IPIV(k) is always NONZERO on output. Periodt ✨
    • If UPLO = 'L', (in factorization order, k increases from 1 to N):
      • a) A single positive entry IPIV(k) > 0 means: D(k,k) is a 1-by-1 diagonal block. If IPIV(k) != k, rows and columns k and IPIV(k) were interchanged in the submatrix A(1:N,1:KB). If IPIV(k) = k, no interchange occurred.
      • b) A pair of consecutive negative entries IPIV(k) < 0 and IPIV(k+1) < 0 means: D(k:k+1,k:k+1) is a 2-by-2 diagonal block. (NOTE: negative entries in IPIV appear ONLY in pairs).
        1. If -IPIV(k) != k, rows and columns k and -IPIV(k) were interchanged in the submatrix A(1:N,1:KB). If -IPIV(k) = k, no interchange occurred.
        2. If -IPIV(k+1) != k+1, rows and columns k-1 and -IPIV(k-1) were interchanged in the submatrix A(1:N,1:KB). If -IPIV(k+1) = k+1, no interchange occurred.
      • c) In both cases a) and b) is always ABS( IPIV(k) ) >= k.
      • d) NOTE: Any entry IPIV(k) is always NONZERO on output. Obsessed πŸ¦‹
  • W β€” COMPLEX*16 array, dimension (LDW,NB). That's the workspace bestie πŸ’œ
  • LDW β€” INTEGER. The leading dimension of the array W. LDW >= max(1,N).
  • INFO β€” INTEGER. The vibe check on the result:
    • = 0: successful exit. We love to see it 🌸
    • < 0: If INFO = -k, the k-th argument had an illegal value. Oops 😭
    • > 0: If INFO = k, the matrix A is singular, because:
      • If UPLO = 'U': column k in the upper triangular part of A contains all zeros.
      • If UPLO = 'L': column k in the lower triangular part of A contains all zeros.

Therefore D(k,k) is exactly zero, and superdiagonal elements of column k of U (or subdiagonal elements of column k of L ) are all zeros. 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. Ma'am, danger 🚨

NOTE: INFO only stores the first occurrence of a singularity, any subsequent occurrence of singularity is not stored in INFO even though the factorization always completes. It said what it said πŸ’€

πŸ‘‘ Author

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

🌟 Contributors

  • December 2016, Igor Kozachenko, Computer Science Division, University of California, Berkeley
  • September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas, School of Mathematics, University of Manchester

Definition at line 260 of file zlahef_rk.f.


πŸ¦‹ subroutine zlasyf_rk

   subroutine zlasyf_rk (character uplo, integer n, integer nb, integer kb,
       complex*16, dimension( lda, * ) a, integer lda, complex*16, dimension( *
       ) e, integer, dimension( * ) ipiv, complex*16, dimension( ldw, * ) w,
       integer ldw, integer info)
       ZLASYF_RK computes a partial factorization of a complex symmetric
       indefinite matrix using bounded Bunch-Kaufman (rook) diagonal pivoting
       method.

🎯 Purpose:

ZLASYF_RK computes a partial factorization of a complex symmetric matrix A using the bounded Bunch-Kaufman (rook) diagonal pivoting method. The partial factorization has the form:

A  =  ( I  U12 ) ( A11  0  ) (  I       0    )  if UPLO = 'U', or:
      ( 0  U22 ) (  0   D  ) ( U12**T U22**T )

A  =  ( L11  0 ) (  D   0  ) ( L11**T L21**T )  if UPLO = 'L',
      ( L21  I ) (  0  A22 ) (  0       I    )

where the order of D is at most NB. The actual order is returned in the argument KB, and is either NB or NB-1, or N if N <= NB.

ZLASYF_RK is an auxiliary routine called by ZSYTRF_RK. It uses blocked code (calling Level 3 BLAS) to update the submatrix A11 (if UPLO = 'U') or A22 (if UPLO = 'L'). Blocked code ate, no crumbs πŸ’…

πŸ’… Parameters

  • UPLO β€” CHARACTER*1. Specifies whether the upper or lower triangular part of the symmetric matrix A is stored:
    • = 'U': Upper triangular
    • = 'L': Lower triangular
  • N β€” INTEGER. The order of the matrix A. N >= 0.
  • NB β€” INTEGER. The maximum number of columns of the matrix A that should be factored. NB should be at least 2 to allow for 2-by-2 pivot blocks. Like, at least two, bestie πŸŽ€
  • KB β€” INTEGER. The number of columns of A that were actually factored. KB is either NB-1 or NB, or N if N <= NB.
  • A β€” COMPLEX*16 array, dimension (LDA,N). On entry, the symmetric matrix A.
    • If UPLO = 'U': the leading N-by-N upper triangular part of A contains the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced.
    • If UPLO = 'L': the leading N-by-N lower 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, it contains:

  • a) ONLY diagonal elements of the symmetric 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 array E), and
  • b) If UPLO = 'U': factor U in the superdiagonal part of A. If UPLO = 'L': factor L in the subdiagonal part of A.
  • LDA β€” INTEGER. The leading dimension of the array A. LDA >= max(1,N).
  • E β€”

🌸 E

Okay so E is a COMPLEX*16 array, dimension (N). On exit it’s holding the superdiagonal (or subdiagonal) elements of the symmetric block diagonal matrix D β€” you know, the one with 1-by-1 or 2-by-2 diagonal blocks. And the tea is:

  • If UPLO = 'U': E(i) = D(i-1,i), i=2:N, and E(1) is set to 0;
  • If UPLO = 'L': E(i) = D(i+1,i), i=1:N-1, and E(N) is set to 0.
NOTE: For a 1-by-1 diagonal block D(k), where 1 <= k <= N, the element E(k) is set to 0 in both UPLO = 'U' or UPLO = 'L' cases.

πŸ” IPIV

IPIV is an INTEGER array, dimension (N). It describes the permutation matrix P in the factorization of matrix A like this: the absolute value of IPIV(k) represents the index of the row and column that were interchanged with the k-th row and column. The value of UPLO describes the order in which the interchanges were applied. Also, the sign of IPIV represents the block structure of the symmetric block diagonal matrix D with 1-by-1 or 2-by-2 diagonal blocks which correspond to 1 or 2 interchanges at each factorization step.

If UPLO = 'U' (in factorization order, k decreases from N to 1):

  • a) A single positive entry IPIV(k) > 0 means D(k,k) is a 1-by-1 diagonal block. If IPIV(k) != k, rows and columns k and IPIV(k) were interchanged in the submatrix A(1:N,N-KB+1:N); if IPIV(k) = k, no interchange occurred.
  • b) A pair of consecutive negative entries IPIV(k) < 0 and IPIV(k-1) < 0 means D(k-1:k,k-1:k) is a 2-by-2 diagonal block. (NOTE: negative entries in IPIV appear ONLY in pairs).
    1. If -IPIV(k) != k, rows and columns k and -IPIV(k) were interchanged in the matrix A(1:N,N-KB+1:N). If -IPIV(k) = k, no interchange occurred.
    2. If -IPIV(k-1) != k-1, rows and columns k-1 and -IPIV(k-1) were interchanged in the submatrix A(1:N,N-KB+1:N). If -IPIV(k-1) = k-1, no interchange occurred.
  • c) In both cases a) and b), it’s always ABS( IPIV(k) ) <= k.
  • d) NOTE: Any entry IPIV(k) is always NONZERO on output.

If UPLO = 'L' (in factorization order, k increases from 1 to N):

  • a) A single positive entry IPIV(k) > 0 means D(k,k) is a 1-by-1 diagonal block. If IPIV(k) != k, rows and columns k and IPIV(k) were interchanged in the submatrix A(1:N,1:KB). If IPIV(k) = k, no interchange occurred.
  • b) A pair of consecutive negative entries IPIV(k) < 0 and IPIV(k+1) < 0 means D(k:k+1,k:k+1) is a 2-by-2 diagonal block. (NOTE: negative entries in IPIV appear ONLY in pairs).
    1. If -IPIV(k) != k, rows and columns k and -IPIV(k) were interchanged in the submatrix A(1:N,1:KB). If -IPIV(k) = k, no interchange occurred.
    2. If -IPIV(k+1) != k+1, rows and columns k-1 and -IPIV(k-1) were interchanged in the submatrix A(1:N,1:KB). If -IPIV(k+1) = k+1, no interchange occurred.
  • c) In both cases a) and b), it’s always ABS( IPIV(k) ) >= k.
  • d) NOTE: Any entry IPIV(k) is always NONZERO on output.

🧺 W

W is a COMPLEX*16 array, dimension (LDW,NB). That’s the whole entry, bestie β€” no extra lore.

πŸ“ LDW

LDW is INTEGER. It’s the leading dimension of the array W, and it has to be LDW >= max(1,N). No cap.

🚨 INFO

INFO is INTEGER.

  • = 0: successful exit β€” we love a clean getaway.
  • < 0: If INFO = -k, the k-th argument had an illegal value.
  • > 0: If INFO = k, the matrix A is singular, because:
    • If UPLO = 'U': column k in the upper triangular part of A contains all zeros.
    • If UPLO = 'L': column k in the lower triangular part of A contains all zeros.

Therefore D(k,k) is exactly zero, and superdiagonal elements of column k of U (or subdiagonal elements of column k of L ) are all zeros. 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.

NOTE: INFO only stores the first occurrence of a singularity. Any subsequent occurrence of singularity is not stored in INFO even though the factorization always completes.

πŸŽ“ Author

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

🌟 Contributors

  • December 2016, Igor Kozachenko, Computer Science Division, University of California, Berkeley
  • September 2007, Sven Hammarling, Nicholas J. Higham, Craig Lucas, School of Mathematics, University of Manchester

Definition at line 260 of file zlasyf_rk.f.

πŸ€– Author

Generated automatically by Doxygen for LAPACK from the source code.

πŸ’– That’s the whole entire vibe β€” lahef_rk(3) from LAPACK Version 3.12.0. Stay slay, stay factorized! πŸŽ€βœ¨

πŸ“¦ where this page comes from