TESTING/LIN/zlavhe.f(3)
π 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 columnskandIPIV(k)were interchanged andD(k,k)is a 1-by-1 diagonal block. (ifIPIV( k ) = k, no interchange was done β she stayed put, respect.) - if
IPIV(k) = IPIV(k-1) < 0, then rows and columnsk-1and-IPIV(k)were interchanged, andD(k-1:k,k-1:k)is a 2-by-2 diagonal block. two-by-two, we love a duo. π«Ά
- if
- if
UPLO = 'L':- if
IPIV(k) > 0, then rows and columnskandIPIV(k)were interchanged andD(k,k)is a 1-by-1 diagonal block. (ifIPIV( k ) = k, no interchange was done.) - if
IPIV(k) = IPIV(k+1) < 0, then rows and columnsk+1and-IPIV(k)were interchanged, andD(k:k+1,k:k+1)is a 2-by-2 diagonal block.
- if
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
- arch rolling: lapack-doc 3.12.1-2 Β· custom
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms