/home/abui...sytrf_aa.f(3)

πŸ“¦ version 3.12.0, in opensuse-leap 16.0

πŸ’– 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 of A is stored 😌
  • 'L' β€” lower triangle of A is 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. 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 (she's unbothered, left on read πŸ™ˆ). 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'). 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: 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. so like, don't panic when XERBLA stays 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 β€” if INFO = -i, the i-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