/home/abui...sytrf_aa.f(3)
π SSYTRF_AA β like, the Aasen's algorithm glow-up π
okay bestie, so this little icon is a page from the Library Functions Manual, and it's all about /home/abui...ssytrf_aa.f(3). she's giving "buried treasure in the LAPACK source tree" and honestly? we're obsessed. let's get into it π«Ά
β¨ NAME β¨
/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/ssytrf_aa.f
like yes, that's her whole government name π full path and everything, no nicknames, periodt.
πΈ SYNOPSIS πΈ
Functions/Subroutines
subroutine SSYTRF_AA (uplo, n, a, lda, ipiv, work, lwork, info)
SSYTRF_AA β that's it, that's the vibe check result: it's a subroutine called SSYTRF_AA π
π¦ Function/Subroutine Documentation π¦
subroutine SSYTRF_AA (character uplo, integer n, real, dimension( lda, * )
a, integer lda, integer, dimension( * ) ipiv, real, dimension( * ) work,
integer lwork, integer info)
SSYTRF_AA β¨ (yes she's back, we love a signature reveal)
π Purpose π
!>!> SSYTRF_AA computes the factorization of a real symmetric matrix A!> using the Aasen's algorithm. The form of the factorization is!>!> A = U**T*T*U or A = L*T*L**T!>!> where U (or L) is a product of permutation and unit upper (lower)!> triangular matrices, and T is a symmetric tridiagonal matrix.!>!> This is the blocked version of the algorithm, calling Level 3 BLAS.!>
so basically: she computes the factorization of a real symmetric matrix A using Aasen's algorithm β main character energy π₯ and the factorization comes out as A = U**T*T*U or A = L*T*L**T, where U (or L) is a product of permutation and unit upper (lower) triangular matrices, and T is a symmetric tridiagonal matrix. also she's the blocked version of the algorithm, meaning she calls Level 3 BLAS β highkey efficient, no cap πββοΈπ¨
π Parameters π
okay this is the part where we meet the whole squad. every single one of them. let's go π
UPLO
!> UPLO is CHARACTER*1!> = 'U': Upper triangle of A is stored;!> = 'L': Lower triangle of A is stored.!>
UPLO is a CHARACTER*1 β she's the one who decides which triangle we're vibing with bestie:
'U'β upper triangle ofAis stored π'L'β lower triangle ofAis stored π
N
!> N is INTEGER!> The order of the matrix A. N >= 0.!>
N is an INTEGER β the order of the matrix A, and it's gotta be N >= 0. no negative orders allowed, we don't do that here π
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, the tridiagonal matrix is stored in the diagonals!> and the subdiagonals of A just below (or above) the diagonals,!> and L is stored below (or above) the subdiagonals, when UPLO!> is 'L' (or 'U').!>
A is a REAL array, dimension (LDA,N) β she's the moment, the actual star of the show π
- On entry she's the symmetric matrix
A. 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 (she's unbothered, left on read π). 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. - On exit, the tridiagonal matrix is stored in the diagonals and the subdiagonals of
Ajust below (or above) the diagonals, andLis stored below (or above) the subdiagonals β whenUPLOis'L'(or'U'). she literally transforms in front of you, iconic behavior π
LDA
!> LDA is INTEGER!> The leading dimension of the array A. LDA >= max(1,N).!>
LDA is an INTEGER β the leading dimension of the array A, and LDA >= max(1,N). respect the constraint or else π€
IPIV
!> IPIV is INTEGER array, dimension (N)!> On exit, it contains the details of the interchanges, i.e.,!> the row and column k of A were interchanged with the!> row and column IPIV(k).!>
IPIV is an INTEGER array, dimension (N) β on exit she's holding all the receipts π§Ύ on the interchanges, i.e. the row and column k of A were interchanged with the row and column IPIV(k). she remembers everything, fr fr.
WORK
!> WORK is REAL array, dimension (MAX(1,LWORK))!> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.!>
WORK is a REAL array, dimension (MAX(1,LWORK)) β the workspace bestie, doing the behind-the-scenes labor π«Ά on exit, if INFO = 0, WORK(1) returns the optimal LWORK. she's helpful like that.
LWORK
!> LWORK is INTEGER!> The length of WORK. LWORK >= MAX(1,2*N). For optimum performance!> LWORK >= N*(1+NB), where NB is the optimal blocksize.!>!> If LWORK = -1, then a workspace query is assumed; the routine!> only calculates the optimal size of the WORK array, returns!> this value as the first entry of the WORK array, and no error!> message related to LWORK is issued by XERBLA.!>
LWORK is an INTEGER β the length of WORK, and LWORK >= MAX(1,2*N).
for optimum performance, LWORK >= N*(1+NB), where NB is the optimal blocksize. she's telling you the ideal scenario, listen to her π
β οΈ special case alert: 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 like, don't panic whenXERBLAstays quiet, it's on purpose πβ¨
INFO
!> INFO is INTEGER!> = 0: successful exit!> < 0: if INFO = -i, the i-th argument had an illegal value.!>
INFO is an INTEGER β the final report card π
= 0β successful exit, we ate and left no crumbs π½οΈ< 0β ifINFO = -i, thei-th argument had an illegal value. someone broke the rules, and she WILL tell you which one π
π Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
the whole collective, the founding mothers and fathers of this code, we stan π
β Definition at line 131 of file ssytrf_aa.f. β
like, if you ever need to find her in the source: line 131, file ssytrf_aa.f. bookmark it bestie π
π« Author (the meta one) π«
Generated automatically by Doxygen for LAPACK from the source code. so she was born from a robot who reads Fortran for a living, and honestly? slay π€π
β¨ cute sign-off β¨
that's the whole page bestie π this one's from LAPACK, Version 3.12.0, and she's dated /home/abui...ssytrf_aa.f(3) β go forth, factor your symmetric matrices, and remember: N >= 0, LDA >= max(1,N), and always check your INFO. mwah ππ¦πΈ
π¦ 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