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 of A is stored
  • 'L' β€” the lower triangle of A is 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 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 (she's literally not invited 🚫)
  • if UPLO = 'L', 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 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 β€” if INFO = -i, the i-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, tridiagonal T, and she's got receipts in IPIV. 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