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

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

πŸ¦‹ NAME πŸ¦‹

so this page is literally all about /home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/csytrf_aa.f β€” bestie, that's the Fortran source file for CSYTRF_AA, and it's out here shipping a whole library function manual page (the manual name is Library Functions Manual, iykyk) πŸ’…


✨ SYNOPSIS ✨

Functions/Subroutines

okay so here's the lineup, one (1) whole function:

subroutine CSYTRF_AA (uplo, n, a, lda, ipiv, work, lwork, info)

that's it, that's the icon: CSYTRF_AA πŸ‘‘


πŸ’– Function/Subroutine Documentation πŸ’–

subroutine CSYTRF_AA (character uplo, integer n, complex, dimension( lda, * ) a, integer lda, integer, dimension( * ) ipiv, complex, dimension( * ) work, integer lwork, integer info)

CSYTRF_AA β€” say it with your chest 🫢

🌸 Purpose 🌸

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

so basically: it factors a complex symmetric matrix A with Aasen's algorithm, and the vibe is A = U**T*T*U or A = L*T*L**T. 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 bestie, it calls Level 3 BLAS β€” main character energy fr fr πŸ”₯

πŸŽ€ Parameters πŸŽ€

  • UPLO β€” this one's a CHARACTER*1, and it picks which triangle of A we're living in:
!> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored. !>

so 'U' means upper triangle of A is stored, 'L' means lower triangle of A is stored. pick your fighter πŸ’…

  • N β€” an INTEGER, the order of the matrix A. and the rule is N >= 0 (zero is valid bestie, don't come for it).
!> N is INTEGER !> The order of the matrix A. N >= 0. !>
  • A β€” a COMPLEX array, dimension (LDA,N). this is the whole moment:
!> A is COMPLEX 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'). !>

so on the way in: it's the symmetric matrix A. if UPLO = 'U' then the leading N-by-N upper triangular part of A holds the upper triangular part of the matrix A, and the strictly lower triangular part of A is not referenced (don't even look at it). if UPLO = 'L', then the leading N-by-N lower triangular part of A holds the lower triangular part of the matrix A, and the strictly upper triangular part of A is not referenced.

on the way out: the tridiagonal matrix lives 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'). it's giving glow-up ✨

  • LDA β€” an INTEGER, the leading dimension of the array A. requirement: LDA >= max(1,N). no notes. 🎯
!> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,N). !>
  • IPIV β€” an INTEGER array, dimension (N). on exit it's the receipts for the interchanges:
!> 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). !>

so it tells you: row and column k of A were interchanged with row and column IPIV(k). mystery solved πŸ”

  • WORK β€” a COMPLEX array, dimension (MAX(1,LWORK)). and listen: on exit, if INFO = 0, then WORK(1) returns the optimal LWORK. she's self-aware πŸ’β€β™€οΈ
!> WORK is COMPLEX array, dimension (MAX(1,LWORK)) !> On exit, if INFO = 0, WORK(1) returns the optimal LWORK. !>
  • LWORK β€” an INTEGER, the length of WORK. the minimum is LWORK >= MAX(1,2*N). for optimum performance you want LWORK >= N*(1+NB), where NB is the optimal blocksize. go big or go home 😀
!> 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. !>

and the special case bestie: 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 -1 is a question, not a mistake 🧚

  • INFO β€” an INTEGER, the little status reporter:
!> INFO is INTEGER !> = 0: successful exit !> < 0: if INFO = -i, the i-th argument had an illegal value. !>

so = 0 means successful exit (slay πŸ’…) and < 0 means if INFO = -i, the i-th argument had an illegal value (uh oh πŸ™ˆ).

πŸ‘‘ Author πŸ‘‘

the legends behind it:

  • Univ. of Tennessee
  • Univ. of California Berkeley
  • Univ. of Colorado Denver
  • NAG Ltd.

Definition at line 131 of file csytrf_aa.f. πŸ“


🌈 Author 🌈

okay and the meta layer: this page was generated automatically by Doxygen for LAPACK from the source code. iconic behaviour honestly πŸ€–βœ¨


sign-off bestie πŸ“ β€” this was LAPACK, Version 3.12.0, dated /home/abui...sytrf_aa.f(3). go factor something symmetric. periodt πŸ’œ
πŸ“¦ where this page comes from