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

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

πŸ’… 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 only DLASYF_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_AA factorizes a panel of a real symmetric matrix A using the Aasen's algorithm. The panel consists of a set of NB rows of A when UPLO is U, or a set of NB columns when UPLO is L.

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, of A is 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

!> UPLO is CHARACTER*1 !> = 'U': Upper triangle of A is stored; !> = 'L': Lower triangle of A is stored.

Which triangle of A you're living in. Pick a lane πŸŽ€

🌟 J1

!> J1 is INTEGER !> The location of the first row, or column, of the panel within the submatrix of A, passed to this routine, e.g., when called by DSYTRF_AA, for the first panel, J1 is 1, while for the remaining panels, J1 is 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

!> M is INTEGER !> 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

!> NB is INTEGER !> 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

!> A is DOUBLE PRECISION array, 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, A contains the last row, or column, of the previous panel, and the trailing submatrix of A to 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

!> LDA is INTEGER !> The leading dimension of the array A. LDA >= max(1,M).

Leading dimension of A. LDA >= max(1,M). No exceptions, no "but bestie I thoughtβ€”" 😭

πŸ‘‘ IPIV

!> IPIV is INTEGER array, dimension (M) !> Details of the row and column interchanges, the row and column k were interchanged with the row and column IPIV(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

!> H is DOUBLE PRECISION workspace, dimension (LDH,NB).

Just workspace, dimension (LDH,NB). She's here to help.

πŸ¦‹ LDH

!> LDH is INTEGER !> The leading dimension of the workspace H. LDH >= max(1,M).

Leading dimension of the workspace H. LDH >= max(1,M). Same energy as LDA, different array 🌈

🌟 WORK

!> WORK is DOUBLE PRECISION workspace, 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