TESTING/LIN/zlavhe.f(3)

πŸ“¦
version 3.12.1 Β· 2 versions
, in arch rolling

πŸ’… TESTING/LIN/zlavhe.f(3)

okay so bestie, this is a page from the Library Functions Manual (yes, the whole TESTING/LIN/zlavhe.f situation) and honestly it's kind of iconic in a "nobody talks about her but she's doing the most" way. she's a LAPACK girlie, she multiplies vectors by factors from a Hermitian indefinite factorization, and she does it flawlessly. no cap. πŸŽ€


✨ NAME ✨

TESTING/LIN/zlavhe.f β€” like, that's her. that's the whole name. she's a Fortran file and she knows it. πŸ¦‹


🌸 SYNOPSIS 🌸

Functions/Subroutines

subroutine zlavhe (uplo, trans, diag, n, nrhs, a, lda, ipiv, b, ldb,
    info)

ZLAVHE


πŸ‘‘ Function/Subroutine Documentation πŸ‘‘

subroutine zlavhe (character uplo, character trans, character diag, integer
    n, integer nrhs, complex*16, dimension( lda, * ) a, integer lda,
    integer, dimension( * ) ipiv, complex*16, dimension( ldb, * ) b, integer
    ldb, integer info)

ZLAVHE

πŸ’– Purpose: πŸ’–

!>
!> ZLAVHE performs one of the matrix-vector operations
!>    x := A*x  or  x := A^H*x,
!> where x is an N element vector and  A is one of the factors
!> from the block U*D*U' or L*D*L' factorization computed by ZHETRF.
!>
!> If TRANS = 'N', multiplies by U  or U * D  (or L  or L * D)
!> If TRANS = 'C', multiplies by U' or D * U' (or L' or D * L')
!>

so basically she's out here doing matrix-vector operations and she's booked and busy. 🫢


🧚 Parameters 🧚

  • UPLO
!>          UPLO is CHARACTER*1
!>          Specifies whether the factor stored in A is upper or lower
!>          triangular.
!>          = 'U':  Upper triangular
!>          = 'L':  Lower triangular
!>

which triangle of the factor in A are we working with, bestie? pick a lane (a triangle, technically).

  • TRANS
!>          TRANS is CHARACTER*1
!>          Specifies the operation to be performed:
!>          = 'N':  x := A*x
!>          = 'C':  x := A'*x
!>

the whole vibe check of the operation. 'N' = no transpose, 'C' = conjugate transpose. periodt.

  • DIAG
!>          DIAG is CHARACTER*1
!>          Specifies whether or not the diagonal blocks are unit
!>          matrices.  If the diagonal blocks are assumed to be unit,
!>          then A = U or A = L, otherwise A = U*D or A = L*D.
!>          = 'U':  Diagonal blocks are assumed to be unit matrices.
!>          = 'N':  Diagonal blocks are assumed to be non-unit matrices.
!>

are the diagonal blocks unit matrices or not? 'U' says yes slay, 'N' says nope, they got real values. πŸ’…

  • N
!>          N is INTEGER
!>          The number of rows and columns of the matrix A.  N >= 0.
!>

N is INTEGER, number of rows and columns of A. and like, N >= 0, obviously, we don't do negative dimensions in this house.

  • NRHS
!>          NRHS is INTEGER
!>          The number of right hand sides, i.e., the number of vectors
!>          x to be multiplied by A.  NRHS >= 0.
!>

how many right hand sides (i.e. how many vectors x get multiplied by A). NRHS >= 0. lowercase queen energy.

  • A
!>          A is COMPLEX*16 array, dimension (LDA,N)
!>          The block diagonal matrix D and the multipliers used to
!>          obtain the factor U or L as computed by ZHETRF.
!>          Stored as a 2-D triangular matrix.
!>

COMPLEX*16 array, dimension (LDA,N). she holds the block diagonal matrix D plus the multipliers that got you the factor U or L, exactly as computed by ZHETRF. stored as a 2-D triangular matrix. main character matrix tbh. ✨

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

leading dimension of A. LDA >= max(1,N). say it with me: max(1,N). πŸ”₯

  • IPIV
!>          IPIV is INTEGER array, dimension (N)
!>          Details of the interchanges and the block structure of D,
!>          as determined by ZHETRF.
!>
!>          If UPLO = 'U':
!>               If IPIV(k) > 0, then rows and columns k and IPIV(k)
!>               were interchanged and D(k,k) is a 1-by-1 diagonal block.
!>               (If IPIV( k ) = k, no interchange was done).
!>
!>               If IPIV(k) = IPIV(k-1) < 0, then rows and
!>               columns k-1 and -IPIV(k) were interchanged,
!>               D(k-1:k,k-1:k) is a 2-by-2 diagonal block.
!>
!>          If UPLO = 'L':
!>               If IPIV(k) > 0, then rows and columns k and IPIV(k)
!>               were interchanged and D(k,k) is a 1-by-1 diagonal block.
!>               (If IPIV( k ) = k, no interchange was done).
!>
!>               If IPIV(k) = IPIV(k+1) < 0, then rows and
!>               columns k+1 and -IPIV(k) were interchanged,
!>               D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
!>

INTEGER array, dimension (N). this is the receipts: the interchanges and the block structure of D, as determined by ZHETRF. ok so depending on UPLO:

  • if UPLO = 'U':
    • if IPIV(k) > 0, then rows and columns k and IPIV(k) were interchanged and D(k,k) is a 1-by-1 diagonal block. (if IPIV( k ) = k, no interchange was done β€” she stayed put, respect.)
    • if IPIV(k) = IPIV(k-1) < 0, then rows and columns k-1 and -IPIV(k) were interchanged, and D(k-1:k,k-1:k) is a 2-by-2 diagonal block. two-by-two, we love a duo. 🫢
  • if UPLO = 'L':
    • if IPIV(k) > 0, then rows and columns k and IPIV(k) were interchanged and D(k,k) is a 1-by-1 diagonal block. (if IPIV( k ) = k, no interchange was done.)
    • if IPIV(k) = IPIV(k+1) < 0, then rows and columns k+1 and -IPIV(k) were interchanged, and D(k:k+1,k:k+1) is a 2-by-2 diagonal block.

see how the index flips from k-1 to k+1? that's not a typo bestie, that's literally the whole point. πŸ™ˆ

  • B
!>          B is COMPLEX*16 array, dimension (LDB,NRHS)
!>          On entry, B contains NRHS vectors of length N.
!>          On exit, B is overwritten with the product A * B.
!>

COMPLEX*16 array, dimension (LDB,NRHS). on entry she's holding NRHS vectors of length N; on exit she's been overwritten with the product A * B. not me gaslighting the input array 😭 it's fine, it's fine, that's just how she works.

  • LDB
!>          LDB is INTEGER
!>          The leading dimension of the array B.  LDB >= max(1,N).
!>

leading dimension of B. LDB >= max(1,N). same rule, different letter. ⭐

  • INFO
!>          INFO is INTEGER
!>          = 0: successful exit
!>          < 0: if INFO = -k, the k-th argument had an illegal value
!>

INTEGER. = 0 means successful exit, we love a clean run ✨. < 0 means if INFO = -k, the k-th argument had an illegal value β€” so if you see a negative number, go count your arguments, bestie. πŸ’€


🌈 Author 🌈

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

Definition at line 151 of file zlavhe.f.


πŸ“ Author πŸ“

Generated automatically by Doxygen for LAPACK from the source code.


πŸ’œ and that's the whole page! no notes, she ate, she left no crumbs.

okay so to wrap it up: this was LAPACK, Version 3.12.0, from TESTING/LIN/zlavhe.f(3), and the Doxygen-generated author situation is exactly what it is. bye bestie, go multiply something πŸ’–πŸ¦‹πŸŽ€

πŸ“¦ where this page comes from