SRC/zlahef.f(3)

πŸ’… SRC/zlahef.f(3) β€” Library Functions Manual 🌸

okay bestie, buckle up, because this is a Fortran subroutine page and it's honestly kind of iconic ✨


✨ NAME ✨

SRC/zlahef.f β€” the file that brings you zlahef, no cap πŸ’–


πŸ¦‹ SYNOPSIS πŸ¦‹

Functions/Subroutines

  • subroutine zlahef (uplo, n, nb, kb, a, lda, ipiv, w, ldw, info) β€” ZLAHEF computes a partial factorization of a complex Hermitian indefinite matrix using the Bunch-Kaufman diagonal pivoting method (blocked algorithm, calling Level 3 BLAS).

πŸŽ€ Function/Subroutine Documentation πŸŽ€

subroutine zlahef (character uplo, integer n, integer nb, integer kb, complex*16, dimension( lda, * ) a, integer lda, integer, dimension( * ) ipiv, complex*16, dimension( ldw, * ) w, integer ldw, integer info)

ZLAHEF computes a partial factorization of a complex Hermitian indefinite matrix using the Bunch-Kaufman diagonal pivoting method (blocked algorithm, calling Level 3 BLAS). literally the whole vibe of this file πŸ’…

🌟 Purpose 🌟

ok so here's what it actually does, bestie:

!>
!> ZLAHEF computes a partial factorization of a complex Hermitian
!> matrix A using the Bunch-Kaufman diagonal pivoting method. The
!> partial factorization has the form:
!>
!> A  =  ( I  U12 ) ( A11  0  ) (  I      0     )  if UPLO = 'U', or:
!>       ( 0  U22 ) (  0   D  ) ( U12**H U22**H )
!>
!> A  =  ( L11  0 ) (  D   0  ) ( L11**H L21**H )  if UPLO = 'L'
!>       ( L21  I ) (  0  A22 ) (  0      I     )
!>
!> where the order of D is at most NB. The actual order is returned in
!> the argument KB, and is either NB or NB-1, or N if N <= NB.
!> Note that U**H denotes the conjugate transpose of U.
!>
!> ZLAHEF is an auxiliary routine called by ZHETRF. It uses blocked code
!> (calling Level 3 BLAS) to update the submatrix A11 (if UPLO = 'U') or
!> A22 (if UPLO = 'L').
!>

quick translation: the order of D is at most NB, and the actual order gets handed back to you in KB β€” it's either NB or NB-1, or N if N <= NB. also pls note U**H means the conjugate transpose of U 🫢. this routine is an auxiliary one, called by ZHETRF, and it uses blocked code (Level 3 BLAS girlies rise) to update A11 when UPLO = 'U' or A22 when UPLO = 'L'. slay πŸ’œ


🌈 Parameters 🌈

  • UPLO β€” UPLO is CHARACTER*1. it tells you whether the upper or lower triangular part of the Hermitian matrix A is stored:
    • = 'U': Upper triangular
    • = 'L': Lower triangular
  • N β€” N is INTEGER. the order of the matrix A. N >= 0.
  • NB β€” NB is INTEGER. the maximum number of columns of the matrix A that should be factored. NB should be at least 2 to allow for 2-by-2 pivot blocks πŸ‘€ (fr fr, don't skip that one).
  • KB β€” KB is INTEGER. the number of columns of A that were actually factored. KB is either NB-1 or NB, or N if N <= NB.
  • A β€” A is COMPLEX*16 array, dimension (LDA,N).
    • On entry, the Hermitian matrix A. if UPLO = '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. if UPLO = '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, A contains details of the partial factorization.
  • LDA β€” LDA is INTEGER. the leading dimension of the array A. LDA >= max(1,N).
  • IPIV β€” IPIV is INTEGER array, dimension (N). the details of the interchanges and the block structure of D. here's the tea πŸ‘‘:
    • If UPLO = 'U':
      • Only the last KB elements of IPIV are set.
      • 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) = 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.
    • If UPLO = 'L':
      • Only the first KB elements of IPIV are set.
      • 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) = 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.
  • W β€” W is COMPLEX*16 array, dimension (LDW,NB).
  • LDW β€” LDW is INTEGER. the leading dimension of the array W. LDW >= max(1,N).
  • INFO β€” INFO is INTEGER.
    • = 0: successful exit πŸ’–
    • > 0: if INFO = k, D(k,k) is exactly zero. the factorization has been completed, but the block diagonal matrix D is exactly singular. 😭 (that's a real one, bestie β€” the factorization did finish, but D is singular, so be careful.)

🧚 Author 🧚

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

πŸ’« Contributors: πŸ’«

!>
!>  December 2016,  Igor Kozachenko,
!>                  Computer Science Division,
!>                  University of California, Berkeley
!>

⭐ Definition at line 176 of file zlahef.f.


πŸ“ Author (yes, another one) πŸ“

Generated automatically by Doxygen for LAPACK from the source code. not a human, just a little robot doing its thing πŸ€–βœ¨


okay that's the whole page, no skips, no summaries, every single detail is in there 🫢

signing off β€” LAPACK, Version 3.12.0, SRC/zlahef.f(3) πŸ’…πŸŽ€πŸ’–

πŸ“¦ where this page comes from