/home/abui...trf_rook.f(3)
π NAME π
okay so bestie, this page is all about /home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/ssytrf_rook.f β yes that's the whole entire path, she's got a long name and she's serving it, we love a full-address moment β¨ (the manpage itself lives at /home/abui...trf_rook.f(3) under Library Functions Manual, iykyk).
π¦ SYNOPSIS π¦
Functions/Subroutines
subroutine SSYTRF_ROOK (uplo, n, a, lda, ipiv, work, lwork, info)β that's her, that's the girl,SSYTRF_ROOKπ
πΈ Function/Subroutine Documentation πΈ
subroutine SSYTRF_ROOK (character uplo, integer n, real, dimension( lda, * )
a, integer lda, integer, dimension( * ) ipiv, real, dimension( * ) work,
integer lwork, integer info)
SSYTRF_ROOK π
β¨ Purpose β¨
okay so, SSYTRF_ROOK computes the factorization of a real symmetric matrix A using the bounded Bunch-Kaufman () diagonal pivoting method. The form of the factorization is
A = U*D*U**T or A = L*D*L**T
where U (or L) is a product of permutation and unit upper (lower) triangular matrices, and D is symmetric and block diagonal with 1-by-1 and 2-by-2 diagonal blocks. no cap, that's the whole vibe π«
This is the blocked version of the algorithm, calling Level 3 BLAS. she's the leveled-up version, main character energy fr fr π₯
π Parameters π
UPLOβUPLOisCHARACTER*1:= 'U': Upper triangle ofAis stored;= 'L': Lower triangle ofAis stored.
NβNisINTEGER. The order of the matrixA.N >= 0. zero is allowed bestie, she can be empty, it's fine πAβAisREALarray, dimension(LDA,N). On entry, the symmetric matrixA. IfUPLO = 'U', the leadingN-by-Nupper triangular part ofAcontains the upper triangular part of the matrixA, and the strictly lower triangular part ofAis not referenced. IfUPLO = 'L', the leadingN-by-Nlower triangular part ofAcontains the lower triangular part of the matrixA, and the strictly upper triangular part ofAis not referenced. (so like, only one half of her gets read, the other half is literally just vibing and being ignored π) On exit, the block diagonal matrixDand the multipliers used to obtain the factorUorL(see below for further details). πLDAβLDAisINTEGER. The leading dimension of the arrayA.LDA >= max(1,N). don't skimp onLDAor it's gonna be a whole thing πIPIVβIPIVisINTEGERarray, dimension(N). Details of the interchanges and the block structure ofD. this is the lore, pay attention π- If
UPLO = 'U':- If
IPIV(k) > 0, then rows and columnskandIPIV(k)were interchanged andD(k,k)is a 1-by-1 diagonal block. - If
IPIV(k) < 0andIPIV(k-1) < 0, then rows and columnskand-IPIV(k)were interchanged and rows and columnsk-1and-IPIV(k-1)were interchanged,D(k-1:k,k-1:k)is a 2-by-2 diagonal block.
- If
- If
UPLO = 'L':- If
IPIV(k) > 0, then rows and columnskandIPIV(k)were interchanged andD(k,k)is a 1-by-1 diagonal block. - If
IPIV(k) < 0andIPIV(k+1) < 0, then rows and columnskand-IPIV(k)were interchanged and rows and columnsk+1and-IPIV(k+1)were interchanged,D(k:k+1,k:k+1)is a 2-by-2 diagonal block.
- If
- If
WORKβWORKisREALarray, dimension(MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the optimalLWORK. she tells you what she actually needed, iconic π«ΆLWORKβLWORKisINTEGER. The length ofWORK.LWORK >= 1. For best performanceLWORK >= N*NB, whereNBis the block size returned byILAENV. 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 byXERBLA. so-1is the "just tell me how much room you need, no drama" option π«INFOβINFOisINTEGER:= 0: successful exit π< 0: ifINFO = -i, thei-th argument had an illegal value π> 0: ifINFO = i,D(i,i)is exactly zero. The factorization has been completed, but the block diagonal matrixDis exactly singular, and division by zero will occur if it is used to solve a system of equations. β οΈ like, the factorization finished, but she's singular and dividing by her is gonna explode
real talk: thatINFO > 0case is not a cute warning.Dis exactly singular and using her to solve a system means division by zero. don't do it bestie π
π Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
π₯ Further Details π₯
the whole structural breakdown, here we go, this is the part where she gets specific π
If UPLO = 'U', then A = U*D*U**T, where
U = P(n)*U(n)* ... *P(k)U(k)* ...,
i.e., U is a product of terms P(k)*U(k), where k decreases from n to 1 in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as defined by IPIV(k), and U(k) is a unit upper triangular matrix, such that if the diagonal block D(k) is of order s (s = 1 or 2), then
( I v 0 ) k-s
U(k) = ( 0 I 0 ) s
( 0 0 I ) n-k
k-s s n-k
If s = 1, D(k) overwrites A(k,k), and v overwrites A(1:k-1,k). If s = 2, the upper triangle of D(k) overwrites A(k-1,k-1), A(k-1,k), and A(k,k), and v overwrites A(1:k-2,k-1:k).
If UPLO = 'L', then A = L*D*L**T, where
L = P(1)*L(1)* ... *P(k)*L(k)* ...,
i.e., L is a product of terms P(k)*L(k), where k increases from 1 to n in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 and 2-by-2 diagonal blocks D(k). P(k) is a permutation matrix as defined by IPIV(k), and L(k) is a unit lower triangular matrix, such that if the diagonal block D(k) is of order s (s = 1 or 2), then
( I 0 0 ) k-1
L(k) = ( 0 I 0 ) s
( 0 v I ) n-k-s+1
k-1 s n-k-s+1
If s = 1, D(k) overwrites A(k,k), and v overwrites A(k+1:n,k). If s = 2, the lower triangle of D(k) overwrites A(k,k), A(k+1,k), and A(k+1,k+1), and v overwrites A(k+2:n,k:k+1).
π§ Contributors π§
- June 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 207 of file ssytrf_rook.f. π
π Author π
Generated automatically by Doxygen for LAPACK from the source code. (she's auto-generated, she didn't write herself, but she ate anyway π )
cute little sign-off bestie: this iconic specimen is from LAPACK, Version 3.12.0, and the page footer also shouts out /home/abui...trf_rook.f(3). go forth and factorize responsibly ππ¦π
π¦ where this page comes from
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms