SRC/zsytrf_aa.f(3)
π SRC/zsytrf_aa.f(3) β Library Functions Manual π
okay bestie, so this is a page from the LAPACK manual (yes, that LAPACK), and it's all about one little subroutine that's lowkey a baddie. it lives at SRC/zsytrf_aa.f. let's get into it π«Ά
β¨ SYNOPSIS β¨
Functions/Subroutines
the whole cast, in one line:
subroutine zsytrf_aa (uplo, n, a, lda, ipiv, work, lwork, info)
ZSYTRF_AA β that's her name, that's her whole brand π
π Function/Subroutine Documentation π
the full signature, no cap
subroutine zsytrf_aa (character uplo, integer n, complex*16, dimension( lda, * ) a, integer lda, integer, dimension( * ) ipiv, complex*16, dimension( * ) work, integer lwork, integer info)
ZSYTRF_AA β¨ (again, iconic)
πΈ Purpose πΈ
so, like, what does she do?
!>
!> ZSYTRF_AA computes the factorization of a complex 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 complex symmetric tridiagonal matrix.
!>
!> This is the blocked version of the algorithm, calling Level 3 BLAS.
!>
literal translation: she factors a complex symmetric matrix A using Aasen's algorithm, and the vibe 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 complex symmetric tridiagonal matrix. and bestie β this is the blocked version of the algorithm, so she's out here calling Level 3 BLAS. main character energy fr fr π₯
π Parameters π
UPLO
!> UPLO is CHARACTER*1
!> = 'U': Upper triangle of A is stored;
!> = 'L': Lower triangle of A is stored.
!>
UPLO is a CHARACTER*1, and it's basically the "which half of the matrix are we looking at" switch:
'U'β the upper triangle ofAis stored'L'β the lower triangle ofAis stored
pick one, bestie, no third option π
N
!> N is INTEGER
!> The order of the matrix A. N >= 0.
!>
N is an INTEGER β the order of the matrix A. and N >= 0, so no negative nonsense please π
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, 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 COMPLEX*16 array of dimension (LDA,N). she's the star of the show:
on entry β she's the symmetric matrix A:
- if
UPLO = 'U', the leadingN-by-Nupper triangular part ofAholds the upper triangular part of the matrixA, and the strictly lower triangular part ofAis not referenced (she's literally not invited π«) - if
UPLO = 'L', the leadingN-by-Nlower triangular part ofAholds the lower triangular part of the matrixA, and the strictly upper triangular part ofAis not referenced
on exit β glow-up time β¨ 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'). the way she just reorganizes herself π
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 it's gotta satisfy LDA >= max(1,N). rules are rules π
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 of dimension (N). on exit she's holding all the receipts π§Ύ β the details of the interchanges, i.e. the row and column k of A were interchanged with the row and column IPIV(k).
WORK
!> WORK is COMPLEX*16 array, dimension (MAX(1,LWORK))
!> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
!>
WORK is a COMPLEX*16 array of dimension (MAX(1,LWORK)). and here's the cute part: on exit, if INFO = 0, then WORK(1) returns the optimal LWORK. she's out here doing her own little self-report π
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. minimum requirement: LWORK >=MAX(1,2*N). but for optimum performance, LWORK >= N*(1+NB), where NB is the optimal blocksize. like, do the minimum if you want, but why would you π
and the special case bestie: if LWORK = -1, then a workspace query is assumed. she only calculates the optimal size of the WORK array, returns this value as the first entry of the WORK array, and β listen β no error message related to LWORK is issued by XERBLA. so -1 is the "just tell me how much room I need" mode. iykyk π
INFO
!> INFO is INTEGER
!> = 0: successful exit
!> < 0: if INFO = -i, the i-th argument had an illegal value.
!>
INFO is an INTEGER, the vibe report:
= 0β successful exit, we ate π< 0β ifINFO = -i, thei-th argument had an illegal value. not me pointing fingers π
π¦ Author π¦
the legends behind it:
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Definition at line 131 of file zsytrf_aa.f. go look, she's literally right there π
β Author β
this whole page was generated automatically by Doxygen for LAPACK from the source code. no human hand-wrote this bad boy, it just materialized β¨
π ok that's the whole page, bestie!zsytrf_aaβ Aasen's algorithm, blocked, Level 3 BLAS, complex symmetric, tridiagonalT, and she's got receipts inIPIV. slay. periodt. π
this lil love letter comes to you from LAPACK, Version 3.12.0, dated SRC/zsytrf_aa.f(3) β stay gorgeous, go factor something symmetric ππ
π¦ where this page comes from
- arch rolling: lapack-doc 3.12.1-2 Β· custom
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms