SRC/dlasyf_rook.f(3)

πŸ’… NAME

SRC/dlasyf_rook.f β€” and yes bestie, this is the Library Functions Manual page for it, so buckle up πŸŽ€


✨ SYNOPSIS

πŸ¦‹ Functions/Subroutines

  • subroutine dlasyf_rook (uplo, n, nb, kb, a, lda, ipiv, w, ldw, info)

DLASYF_ROOK *> DLASYF_ROOK computes a partial factorization of a real symmetric matrix using the bounded Bunch-Kaufman (rook")diagonalpivotingmethod.

(no that's not a typo on my end, that's literally how the synopsis line reads in the source β€” we keep receipts around here πŸ’€)


πŸŽ€ Function/Subroutine Documentation

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 *> DLASYF_ROOK computes a partial factorization of a real symmetric matrix using the bounded Bunch-Kaufman ("rook") diagonal pivoting method.

🌸 Purpose:

!>
!> DLASYF_ROOK computes a partial factorization of a real symmetric
!> matrix A using the bounded Bunch-Kaufman () 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.
!>
!> 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').
!>

Lowkey iconic β€” it's the little helper routine that DSYTRF_ROOK calls when it needs the heavy lifting done with blocked code and Level 3 BLAS πŸ”₯

πŸ’œ 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
!>

Pick your fighter: 'U' for upper triangular, 'L' for lower triangular ✨

🌈 N

!>          N is INTEGER
!>          The order of the matrix A.  N >= 0.
!>

The order of A, and it's gotta be N >= 0 β€” no negativity allowed πŸ’…

🌈 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.
!>

Heads up: NB should be at least 2 or the 2-by-2 pivot blocks simply cannot happen πŸ™ˆ

🌈 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.
!>

Output vibes: KB tells you how many columns actually got factored β€” NB-1, NB, or N when N <= NB πŸ‘‘

🌈 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.
!>

Main character energy fr β€” comes in as your symmetric matrix, leaves stuffed with the details of the partial factorization 🫢

🌈 LDA

!>          LDA is INTEGER
!>          The leading dimension of the array A.  LDA >= max(1,N).
!>

LDA >= max(1,N), no cap 🧒

🌈 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,
!>             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.
!>

This is the lore drop 🧚 β€” the swap receipts and the block structure of D. Note for 'U' only the last KB elements of IPIV get set; for 'L' only the first KB. Positive IPIV(k) means a 1-by-1 diagonal block; two matching negative entries mean a 2-by-2 diagonal block. (inerchaged is the source's own spelling and I refuse to correct it πŸ’€)

🌈 W

!>          W is DOUBLE PRECISION array, dimension (LDW,NB)
!>

Just a workspace array, doing its quiet little job 🌸

🌈 LDW

!>          LDW is INTEGER
!>          The leading dimension of the array W.  LDW >= max(1,N).
!>

LDW >= max(1,N) β€” same rule, different array ✨

🌈 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.
!>
⚠️ bestie read this one carefully: INFO = 0 means we slayed. But INFO = k > 0 means D(k,k) is exactly zero β€” the factorization finished, but the block diagonal matrix D is exactly singular. Not an error in the "you called it wrong" sense, just... the matrix said no 😭

πŸ‘‘ 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
!>
!>

Shoutout to the whole crew, periodt 🫢

⭐ Definition at line 182 of file dlasyf_rook.f.

That's literally where the code lives, iykyk πŸ”₯


πŸŽ€ Author

Generated automatically by Doxygen for LAPACK from the source code.


And that's the whole page bestie β€” no details left behind, every flag accounted for πŸ’– This adorable little artifact comes to you from LAPACK, Version 3.12.0, and it's the SRC/dlasyf_rook.f(3) page β€” go forth and factor those symmetric matrices βœ¨πŸŽ€πŸ¦‹

πŸ“¦ where this page comes from