lahef_rook(3)

๐Ÿ’– NAME ๐Ÿ’–

okay bestie, welcome to the lahef_rook(3) page in the Library Functions Manual ๐Ÿซถ. This is all about lahef_rook โ€” which is short for la{he,sy}f_rook โ€” and it's literally the triangular factor step โœจ.


๐ŸŒธ SYNOPSIS ๐ŸŒธ

Here's the whole cast, no cap:

  • subroutine clahef_rook (uplo, n, nb, kb, a, lda, ipiv, w, ldw, info) โ€” the complex Hermitian one ๐Ÿ’…
  • subroutine clasyf_rook (uplo, n, nb, kb, a, lda, ipiv, w, ldw, info) โ€” CLASYF_ROOK computes a partial factorization of a complex symmetric matrix using the bounded Bunch-Kaufman ("rook") diagonal pivoting method.
  • subroutine dlasyf_rook (uplo, n, nb, kb, a, lda, ipiv, w, ldw, info) โ€” DLASYF_ROOK computes a partial factorization of a real symmetric matrix using the bounded Bunch-Kaufman ("rook") diagonal pivoting method.
  • subroutine slasyf_rook (uplo, n, nb, kb, a, lda, ipiv, w, ldw, info) โ€” SLASYF_ROOK computes a partial factorization of a real symmetric matrix using the bounded Bunch-Kaufman ("rook") diagonal pivoting method.
  • subroutine zlahef_rook (uplo, n, nb, kb, a, lda, ipiv, w, ldw, info) โ€” the other complex Hermitian signature, sitting pretty โœจ
  • subroutine zlasyf_rook (uplo, n, nb, kb, a, lda, ipiv, w, ldw, info) โ€” ZLASYF_ROOK computes a partial factorization of a complex symmetric matrix using the bounded Bunch-Kaufman ("rook") diagonal pivoting method.

๐Ÿฆ‹ Detailed Description ๐Ÿฆ‹

bestie, this section is literally just a handoff โ€” the real tea is in the function docs right below ๐Ÿซถ.

๐ŸŽ€ Function Documentation ๐ŸŽ€

๐Ÿ’… subroutine clahef_rook

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

๐ŸŒŸ Purpose ๐ŸŒŸ

okay so CLAHEF_ROOK computes a partial factorization of a complex Hermitian matrix A using the bounded Bunch-Kaufman ("rook") diagonal pivoting method. The partial factorization has this whole shape:

!> 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. Note that U**H denotes the conjugate transpose of U.

CLAHEF_ROOK is an auxiliary routine called by CHETRF_ROOK. It uses blocked code (calling Level 3 BLAS) to update the submatrix A11 (if UPLO = 'U') or A22 (if UPLO = 'L'). iconic behavior, honestly ๐Ÿ’….

๐Ÿ“ Parameters ๐Ÿ“

  • UPLO โ€” UPLO is CHARACTER*1. It says whether the upper or lower triangular part of the Hermitian 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 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, A contains details of the partial factorization.
  • LDA โ€” LDA is INTEGER. The leading dimension of the array A. LDA >= max(1,N).
  • IPIV โ€” IPIV is INTEGER array, dimension (N). Details of the interchanges and the block structure of D.
    • If UPLO = 'U':
      • Only the last KB elements of IPIV are set.
      • 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 IPIV(k) < 0 and IPIV(k-1) < 0, then rows and columns k and -IPIV(k) were interchanged and rows and columns k-1 and -IPIV(k-1) were inerchaged (yes bestie, that's the source spelling ๐Ÿ’€), and D(k-1:k,k-1:k) is a 2-by-2 diagonal block.
    • If UPLO = 'L':
      • Only the first KB elements of IPIV are set.
      • 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 IPIV(k) < 0 and IPIV(k+1) < 0, then rows and columns k and -IPIV(k) were interchanged and rows and columns k+1 and -IPIV(k+1) were inerchaged, and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
  • 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, D(k,k) is exactly zero. The factorization has been completed, but the block diagonal matrix D is exactly singular.

๐Ÿ‘‘ Author ๐Ÿ‘‘

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

๐ŸŒˆ Contributors ๐ŸŒˆ

  • November 2013, 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 182 of file clahef_rook.f.


๐Ÿ’… subroutine clasyf_rook

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

๐ŸŒŸ Purpose ๐ŸŒŸ

okay so CLASYF_ROOK computes a partial factorization of a complex symmetric matrix A using the bounded Bunch-Kaufman ("rook") diagonal pivoting method. The partial factorization has this whole 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    )

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_ROOK is an auxiliary routine called by CSYTRF_ROOK. It uses blocked code (calling Level 3 BLAS) to update the submatrix A11 (if UPLO = 'U') or A22 (if UPLO = 'L'). periodt ๐Ÿ’–.

๐Ÿ“ Parameters ๐Ÿ“

  • UPLO โ€” UPLO is CHARACTER*1. It says 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, A contains details of the partial factorization.
  • LDA โ€” LDA is INTEGER. The leading dimension of the array A. LDA >= max(1,N).
  • IPIV โ€” IPIV is INTEGER array, dimension (N). Details of the interchanges and the block structure of D.
    • If UPLO = 'U':
      • Only the last KB elements of IPIV are set.
      • 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 IPIV(k) < 0 and IPIV(k-1) < 0, then rows and columns k and -IPIV(k) were interchanged and rows and columns k-1 and -IPIV(k-1) were inerchaged, and D(k-1:k,k-1:k) is a 2-by-2 diagonal block.
    • If UPLO = 'L':
      • Only the first KB elements of IPIV are set.
      • 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 IPIV(k) < 0 and IPIV(k+1) < 0, then rows and columns k and -IPIV(k) were interchanged and rows and columns k+1 and -IPIV(k+1) were inerchaged, and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
  • 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 โ€” bestie, it's an INTEGER, and it's the vibe check at the end ๐Ÿ’…
    • = 0: slay, successful exit โœจ
    • > 0: if INFO = k, then D(k,k) is exactly zero. Like, the factorization finished its whole thing, but the block diagonal matrix D is exactly singular. Not a full-on error, but she's giving "I did the work and the answer is degenerate" ๐Ÿ˜ญ

๐Ÿ‘‘ Author

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

๐Ÿซถ Contributors:

  • November 2013, 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 182 of file clasyf_rook.f.


๐ŸŒธ dlasyf_rook โ€” the double precision edition, she's back and she's real

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

DLASYF_ROOK computes a partial factorization of a real symmetric matrix using the bounded Bunch-Kaufman ("rook") diagonal pivoting method. Iconic behaviour, no notes ๐Ÿ’–

โœจ Purpose:

DLASYF_ROOK computes a partial factorization of a real symmetric matrix A using the bounded Bunch-Kaufman () diagonal pivoting method โ€” yes, the parentheses are literally empty in the source, she ate and left no crumbs ๐Ÿ’€. 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. So KB is basically D's main character energy, lowkey ๐ŸŒˆ

DLASYF_ROOK is an auxiliary routine called by DSYTRF_ROOK. It uses blocked code (calling Level 3 BLAS) to update the submatrix A11 (if UPLO = 'U') or A22 (if UPLO = 'L'). Fr fr, it's the backstage crew making the whole show work ๐ŸŽ€

๐ŸŒŸ Parameters

  • UPLO โ€” UPLO is CHARACTER*1. She 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 โ€” like, give her at least two, she needs room ๐Ÿฆ‹
  • 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. She's an output girlie, don't expect her to have opinions on entry ๐Ÿ’œ
  • A โ€” A is 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, A contains details of the partial factorization. So she comes in as a matrix and leaves as โœจloreโœจ
  • LDA โ€” LDA is INTEGER. The leading dimension of the array A. LDA >= max(1,N).
  • IPIV โ€” IPIV is INTEGER array, dimension (N). Details of the interchanges and the block structure of D. Listen closely, this one's a whole saga ๐Ÿ“–
    • If UPLO = 'U':
      • Only the last KB elements of IPIV are set.
      • 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 IPIV(k) < 0 and IPIV(k-1) < 0, then rows and columns k and -IPIV(k) were interchanged and rows and columns k-1 and -IPIV(k-1) were interchanged, D(k-1:k,k-1:k) is a 2-by-2 diagonal block.
    • If UPLO = 'L':
      • Only the first KB elements of IPIV are set.
      • 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 IPIV(k) < 0 and IPIV(k+1) < 0, then rows and columns k and -IPIV(k) were interchanged and rows and columns k+1 and -IPIV(k+1) were interchanged, D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
  • W โ€” W is DOUBLE PRECISION array, dimension (LDW,NB). That's it, that's her whole description. She's mysterious like that ๐Ÿ™ˆ
  • 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, D(k,k) is exactly zero. The factorization has been completed, but the block diagonal matrix D is exactly singular. Completed but singular is such a mood ngl ๐Ÿ’€

๐Ÿ‘‘ Author

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

๐Ÿซถ Contributors:

  • November 2013, 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 182 of file dlasyf_rook.f.


๐Ÿฆ‹ slasyf_rook โ€” same energy, single precision, still iconic

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

SLASYF_ROOK computes a partial factorization of a real symmetric matrix using the bounded Bunch-Kaufman ("rook") diagonal pivoting method. Same routine, different precision, still serving ๐Ÿ”ฅ

โœจ Purpose:

SLASYF_ROOK computes a partial factorization of a real symmetric matrix A using the bounded Bunch-Kaufman () diagonal pivoting method (empty parens again โ€” we respect the source's choices ๐Ÿ’…). 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. She's literally the same girl as DLASYF_ROOK, just living in REAL land ๐ŸŒธ

SLASYF_ROOK is an auxiliary routine called by SSYTRF_ROOK. It uses blocked code (calling Level 3 BLAS) to update the submatrix A11 (if UPLO = 'U') or A22 (if UPLO = 'L'). Bestie, she's the support act that makes the headliner possible ๐Ÿ‘‘

๐ŸŒŸ 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 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, A contains details of the partial factorization.
  • LDA โ€” LDA is INTEGER. The leading dimension of the array A. LDA >= max(1,N).
  • IPIV โ€” IPIV is INTEGER array, dimension (N). Details of the interchanges and the block structure of D.
    • If UPLO = 'U':
      • Only the last KB elements of IPIV are set.
      • 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 IPIV(k) < 0 and IPIV(k-1) < 0, then rows and columns k and -IPIV(k) were interchanged and rows and columns k-1 and -IPIV(k-1) were interchanged, D(k-1:k,k-1:k) is a 2-by-2 diagonal block.
    • If UPLO = 'L':
      • Only the first KB elements of IPIV are set.
      • 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 IPIV(k) < 0 and IPIV(k+1) < 0, then rows and columns k and -IPIV(k) were interchanged and rows and columns k+1 and -IPIV(k+1) were interchanged, D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
  • W โ€” W is REAL array, dimension (LDW,NB). Still mysterious, still not elaborating ๐ŸŽ€
  • 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, D(k,k) is exactly zero. The factorization has been completed, but the block diagonal matrix D is exactly singular.

๐Ÿ‘‘ Author

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

๐Ÿซถ Contributors:

๐ŸŽ€ Contributors ๐ŸŽ€

  • November 2013, 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 182 of file slasyf_rook.f.


๐Ÿ’œ zlahef_rook ๐Ÿ’œ

okay bestie, this is where the complex Hermitian edition shows up and it is lowkey the same blueprint, just wearing a conjugate-transpose fit ๐Ÿฆ‹

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

โœจ Purpose โœจ

ZLAHEF_ROOK computes a partial factorization of a complex Hermitian matrix A using the bounded Bunch-Kaufman () diagonal pivoting method. ๐Ÿซถ The partial factorization has this shape:

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 comes back to you in the argument KB, and it's either NB or NB-1, or N if N <= NB. ๐Ÿ“ And remember, U**H means the conjugate transpose of U โ€” that little H is doing so much work, periodt.

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

๐ŸŒธ Parameters ๐ŸŒธ

  • UPLO โ€” UPLO is CHARACTER*1. Tells us whether the upper or lower triangular part of the Hermitian 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. (like, don't starve it, it needs room for pairs ๐Ÿ“)
  • 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*16 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, A contains details of the partial factorization. ๐Ÿ‘‘
  • LDA โ€” LDA is INTEGER. The leading dimension of the array A. LDA >= max(1,N). ๐Ÿ“
  • IPIV โ€” IPIV is INTEGER array, dimension (N). All the tea on the interchanges and the block structure of D:
    • If UPLO = 'U':
      • Only the last KB elements of IPIV are set. ๐ŸŽฏ
      • 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 IPIV(k) < 0 and IPIV(k-1) < 0, then rows and columns k and -IPIV(k) were interchanged and rows and columns k-1 and -IPIV(k-1) were inerchaged, D(k-1:k,k-1:k) is a 2-by-2 diagonal block. ๐Ÿ˜ญ (yes, two at once, main character energy)
    • If UPLO = 'L':
      • Only the first KB elements of IPIV are set. ๐ŸŽฏ
      • 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 IPIV(k) < 0 and IPIV(k+1) < 0, then rows and columns k and -IPIV(k) were interchanged and rows and columns k+1 and -IPIV(k+1) were inerchaged, D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
  • W โ€” W is COMPLEX*16 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, D(k,k) is exactly zero. The factorization has been completed, but the block diagonal matrix D is exactly singular. โš ๏ธ (translation: it finished, but D is genuinely singular, so don't act surprised)

๐Ÿ‘‘ Author ๐Ÿ‘‘

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

๐ŸŽ€ Contributors ๐ŸŽ€

  • November 2013, 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 182 of file zlahef_rook.f.


๐ŸŒˆ zlasyf_rook ๐ŸŒˆ

okay so ZLASYF_ROOK computes a partial factorization of a complex symmetric matrix using the bounded Bunch-Kaufman ("rook") diagonal pivoting method โ€” note the quotes around "rook" this time, we're being fancy ๐Ÿ’…

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

โœจ Purpose โœจ

ZLASYF_ROOK computes a partial factorization of a complex symmetric matrix A using the bounded Bunch-Kaufman () diagonal pivoting method. ๐Ÿฆ‹ Here's the form, and yes it's the transpose version, not the H version โ€” keep up bestie:

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 handed back in the argument KB, and it's either NB or NB-1, or N if N <= NB. ๐Ÿ“

ZLASYF_ROOK is an auxiliary routine called by ZSYTRF_ROOK. It uses blocked code (calling Level 3 BLAS) to update the submatrix A11 (if UPLO = 'U') or A22 (if UPLO = 'L'). ๐Ÿ”ฅ

๐ŸŒธ 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*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, A contains details of the partial factorization. ๐Ÿš
  • LDA โ€” LDA is INTEGER. The leading dimension of the array A. LDA >= max(1,N). ๐Ÿ“
  • IPIV โ€” IPIV is INTEGER array, dimension (N). The interchanges and the block structure of D, spelled out:
    • If UPLO = 'U':
      • Only the last KB elements of IPIV are set. ๐ŸŽฏ
      • 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 IPIV(k) < 0 and IPIV(k-1) < 0, then rows and columns k and -IPIV(k) were interchanged and rows and columns k-1 and -IPIV(k-1) were inerchaged, D(k-1:k,k-1:k) is a 2-by-2 diagonal block. ๐Ÿ’€
    • If UPLO = 'L':
      • Only the first KB elements of IPIV are set. ๐ŸŽฏ
      • 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 IPIV(k) < 0 and IPIV(k+1) < 0, then rows and columns k and -IPIV(k) were interchanged and rows and columns k+1 and -IPIV(k+1) were inerchaged, D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
  • W โ€” W is COMPLEX*16 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, D(k,k) is exactly zero. The factorization has been completed, but the block diagonal matrix D is exactly singular. โš ๏ธ (fr fr, it's singular โ€” no cap, no rescuing it)

๐Ÿ‘‘ Author ๐Ÿ‘‘

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

๐ŸŽ€ Contributors ๐ŸŽ€

  • November 2013, 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 182 of file zlasyf_rook.f.

โœจ AUTHOR โœจ

ok so nobody actually wrote this page by hand, bestie โ€” it's generated automatically by Doxygen for LAPACK from the source code. so the "author" is basically a robot that read the source and typed all this up ๐Ÿ’… ngl that's kind of iconic of it.

so yeah, if you spot a typo in here, don't come for a human, because there isn't one to come for ๐Ÿซถ the source code is the main character, Doxygen is just the hype account, and LAPACK is the whole entire franchise ๐Ÿ‘‘


and that's the whole page, fr fr โ€” you made it to the end ๐ŸŽ€ this was lahef_rook(3) from LAPACK, Version 3.12.0, and the footer is just that version stamp plus the page name (no date on this one, it's giving minimal ๐Ÿ˜Œ). now go forth and factor things, bestie ๐Ÿ’–โœจ

๐Ÿ“ฆ where this page comes from