ZHETRF(3)
π ZHETRF(3) β the LAPACK glow-up your Hermitian matrix deserves
okay so first things first, bestie: this page is zhetrf.f(3) from the Library Functions Manual, and the source file it's describing lives at
/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/zhetrf.f
and the page itself is at /home/abui...RC/zhetrf.f(3). iconic path, lowkey unhinged, but we move. β¨
πΈ NAME
ZHETRF β it factors a complex Hermitian matrix. that's the whole vibe. no cap, that's it.
π SYNOPSIS
Functions/Subroutines
subroutine ZHETRF (uplo, n, a, lda, ipiv, work, lwork, info)
ZHETRF (yes that's the whole subtitle, she's lowkey mysterious like that π
)
π¦ Function/Subroutine Documentation
subroutine ZHETRF
subroutine ZHETRF (character uplo, integer n, complex*16, dimension( lda, * ) a, integer lda, integer, dimension( * ) ipiv, complex*16, dimension( * ) work, integer lwork, integer info)
ZHETRF
β¨ Purpose
fr fr, here's what she does:
ZHETRF computes the factorization of a complex Hermitian matrix A using the Bunch-Kaufman diagonal pivoting method. The form of the factorization is A = U*D*U**H or A = L*D*L**H where U (or L) is a product of permutation and unit upper (lower) triangular matrices, and D is Hermitian and block diagonal with 1-by-1 and 2-by-2 diagonal blocks. This is the blocked version of the algorithm, calling Level 3 BLAS.
so like, she does the thing, but the blocked way, and she's calling Level 3 BLAS while she does it. main character energy honestly. π
π«Ά Parameters
UPLOβUPLOisCHARACTER*1, and it's literally just "which triangle are we working with":
= 'U': Upper triangle of A is stored;
= 'L': Lower triangle of A is stored.
NβNisINTEGER. the order of the matrix A. and the rule isN >= 0. (zero is allowed, don't be weird about it.)AβAisCOMPLEX*16 array, dimension (LDA,N). on entry, she's the Hermitian matrix A. ifUPLO = '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 (so like, don't worry about what's down there, she's not looking π). ifUPLO = '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 block diagonal matrix D and the multipliers used to obtain the factor U or L are hanging out in there (peep the Further Details below for the full tea).
LDAβLDAisINTEGER. it's the leading dimension of the array A, and she needsLDA >= max(1,N). non-negotiable bestie.IPIVβIPIVisINTEGER array, dimension (N). this is where the drama lives: details of the interchanges and the block structure of D.- if
IPIV(k) > 0, then rows and columnskandIPIV(k)were interchanged andD(k,k)is a 1-by-1 diagonal block. - if
UPLO = 'U'andIPIV(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. - if
UPLO = 'L'andIPIV(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 what I mean? she's got lore. π
WORKβWORKisCOMPLEX*16 array, dimension (MAX(1,LWORK)). on exit, ifINFO = 0,WORK(1)returns the optimalLWORK. she tells you what she wishes she had. queen behavior. πLWORKβLWORKisINTEGER. the length ofWORK. she needsLWORK >= 1. for best performance though?LWORK >= N*NB, whereNBis the block size returned byILAENV. give her room to breathe and she'll serve. πINFOβINFOisINTEGER, and it's the vibe check at the end:
= 0: successful exit
< 0: if INFO = -i, the i-th argument had an illegal value
> 0: if INFO = i, D(i,i) is exactly zero. The factorization
has been completed, but the block diagonal matrix D is
exactly singular, and division by zero will occur if it
is used to solve a system of equations.
okay real talk on that last one: INFO > 0 means D is exactly singular. the factorization finished, but if you go solve a system with it, you're dividing by zero. that's not a vibe, that's a crash. be warned bestie. π
π Author
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
(four whole institutions, she's got a whole squad behind her, we love a collaborative queen π)
π Further Details
okay here's the deep lore section, buckle up:
IfUPLO = 'U', thenA = U*D*U**H, whereU = P(n)*U(n)* ... *P(k)U(k)* ..., i.e., U is a product of termsP(k)*U(k), where k decreases from n to 1 in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 and 2-by-2 diagonal blocksD(k).P(k)is a permutation matrix as defined byIPIV(k), andU(k)is a unit upper triangular matrix, such that if the diagonal blockD(k)is of order s (s = 1 or 2), then( I v 0 ) k-s U(k) = ( 0 I 0 ) s ( 0 0 I ) n-k k-s s n-kIf s = 1,D(k)overwritesA(k,k), and v overwritesA(1:k-1,k). If s = 2, the upper triangle ofD(k)overwritesA(k-1,k-1),A(k-1,k), andA(k,k), and v overwritesA(1:k-2,k-1:k). IfUPLO = 'L', thenA = L*D*L**H, whereL = P(1)*L(1)* ... *P(k)*L(k)* ..., i.e., L is a product of termsP(k)*L(k), where k increases from 1 to n in steps of 1 or 2, and D is a block diagonal matrix with 1-by-1 and 2-by-2 diagonal blocksD(k).P(k)is a permutation matrix as defined byIPIV(k), andL(k)is a unit lower triangular matrix, such that if the diagonal blockD(k)is of order s (s = 1 or 2), then( I 0 0 ) k-1 L(k) = ( 0 I 0 ) s ( 0 v I ) n-k-s+1 k-1 s n-k-s+1If s = 1,D(k)overwritesA(k,k), and v overwritesA(k+1:n,k). If s = 2, the lower triangle ofD(k)overwritesA(k,k),A(k+1,k), andA(k+1,k+1), and v overwritesA(k+2:n,k:k+1).
likeβ¦ she really said "here's the whole blueprint, no gatekeeping." obsessed. π
π Where she lives
Definition at line 176 of file zhetrf.f.
πΈ Author (the meta one)
Generated automatically by Doxygen for LAPACK from the source code. (so like, a robot wrote the page, but the math is very much human. credit where it's due π«Ά)
and that's the whole page bestie!! β¨π
LAPACK β Version 3.12.0 β and the file is /home/abui...RC/zhetrf.f(3). go forth and factor your Hermitian matrices, slay, periodt. π¦ππ
π¦ 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