/home/abui...lasyf_aa.f(3)
π NAME
Bestie, welcome to /home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/dlasyf_aa.f β yes that's the whole name, she's got a long government name and she's not sorry about it π
. This page lives in the Library Functions Manual section, and it's all about one little Fortran subroutine that does one little thing very well (choosing one panel's worth of factorizing, more on that below, iykyk). This is LAPACK, so grab a snack and get comfy π.
β¨ SYNOPSIS
π Functions/Subroutines
subroutine DLASYF_AA (uplo, j1, m, nb, a, lda, ipiv, h, ldh, work)β the one and onlyDLASYF_AA, no cap, she's the whole show π
π Function/Subroutine Documentation
π¦ The signature, verbatim, because we respect her
subroutine DLASYF_AA (character uplo, integer j1, integer m, integer nb,
double precision, dimension( lda, * ) a, integer lda, integer,
dimension( * ) ipiv, double precision, dimension( ldh, * ) h, integer
ldh, double precision, dimension( * ) work)
DLASYF_AA
Okay so that's a lot of arguments and every single one of them matters. Do not skip any. Periodt. β¨
π«Ά Purpose
!>DLATRF_AAfactorizes a panel of a real symmetric matrixAusing the Aasen's algorithm. The panel consists of a set ofNBrows ofAwhenUPLOisU, or a set ofNBcolumns whenUPLOisL.
So, like, to be clear: this routine is only ever doing one panel at a time. One panel. That's her job. She's not doing the whole matrix, that's main character energy for someone else π
!>In order to factorize the panel, the Aasen's algorithm requires the last row, or column, of the previous panel. The first row, or column, ofAis set to be the first row, or column, of an identity matrix, which is used to factorize the first panel.
The way that she needs leftovers from the last panel is so real β you can't just start from vibes, you need the previous row (or column, depending on UPLO). And for that very first panel? There's no previous panel, so the first row/column of A gets set to the first row/column of an identity matrix and she just sends it. Slay π¦
!> The resulting J-th row of U, or J-th column of L, is stored in the (J-1)-th row, or column, of A (without the unit diagonals), while the diagonal and subdiagonal of A are overwritten by those of T.
Read the indexing twice, bestie β the J-th row of U / J-th column of L lands in the (J-1)-th row/column of A, without the unit diagonals. And the diagonal and subdiagonal of A get absolutely bodied and overwritten by those of T. That's not a bug, that's the design π
πΈ Parameters
π§ UPLO
!>UPLOisCHARACTER*1!>='U': Upper triangle ofAis stored;!>='L': Lower triangle ofAis stored.
Which triangle of A you're living in. Pick a lane π
π J1
!>J1isINTEGER!>The location of the first row, or column, of the panel within the submatrix ofA, passed to this routine, e.g., when called byDSYTRF_AA, for the first panel,J1is 1, while for the remaining panels,J1is 2.
So, like, when DSYTRF_AA calls her: first panel β J1 is 1, all the remaining panels β J1 is 2. Iconic little detail, don't forget it π«Ά
π M
!>MisINTEGER!>The dimension of the submatrix.M >= 0.
The big one. The dimension. And yes, M >= 0 is a real requirement, it's not a suggestion π
β NB
!>NBisINTEGER!>The dimension of the panel to be facotorized.
The size of the panel she's actually working on. (The source says facotorized and we respect the source's spelling choices, ok? π)
πΈ A
!>AisDOUBLE PRECISIONarray, dimension(LDA,M)for the first panel, while dimension(LDA,M+1)for the remaining panels.
Watch the dimensions carefully: (LDA,M) on the first panel, (LDA,M+1) on the rest. Literally not the same size, do not mix them up π
!>On entry,Acontains the last row, or column, of the previous panel, and the trailing submatrix ofAto be factorized, except for the first panel, only the panel is passed.
!> On exit, the leading panel is factorized.
On entry she's holding the previous panel's last row/column plus the trailing submatrix (and for the first panel, only the panel gets passed). On exit β boom β the leading panel is factorized. Character development π₯
π LDA
!>LDAisINTEGER!>The leading dimension of the arrayA.LDA >= max(1,M).
Leading dimension of A. LDA >= max(1,M). No exceptions, no "but bestie I thoughtβ" π
π IPIV
!>IPIVisINTEGERarray, dimension(M)!>Details of the row and column interchanges, the row and columnkwere interchanged with the row and columnIPIV(k).
The receipts of who swapped with whom: row and column k got traded with row and column IPIV(k). Keep the receipts, always π
π H
!>HisDOUBLE PRECISIONworkspace, dimension(LDH,NB).
Just workspace, dimension (LDH,NB). She's here to help.
π¦ LDH
!>LDHisINTEGER!>The leading dimension of the workspaceH.LDH >= max(1,M).
Leading dimension of the workspace H. LDH >= max(1,M). Same energy as LDA, different array π
π WORK
!>WORKisDOUBLE PRECISIONworkspace, dimension(M).
More workspace, dimension (M). That's it, that's the whole description, and honestly? Respect π«Ά
π Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Definition at line 142 of file dlasyf_aa.f.
π€ Author
Generated automatically by Doxygen for LAPACK from the source code. (Not a person, just a very efficient little robot doing its thing βοΈβ¨)
Okay bestie, that's the whole page β every flag, every dimension, every >= intact, nothing dropped, nothing invented. This manual page is LAPACK, Version 3.12.0, and it's the page for /home/abui...lasyf_aa.f in section (3) πΈ Go factorize a panel, you've got this π
β¨
π¦ 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