/home/abui...RC/chesv.f(3)

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

πŸ’… NAME πŸ’…

okay so bestie, this is /home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/chesv.f β€” yes that whole entire path is the name, she's got a long government name and we respect it πŸ‘‘ (it's chesv.f, from the LAPACK library, manual section 3).


✨ SYNOPSIS ✨

πŸŽ€ Functions/Subroutines

subroutine CHESV (uplo, n, nrhs, a, lda, ipiv, b, ldb, work, lwork,
    info)

so CHESV computes the solution to system of linear equations A * X = B for HE matrices. that's the whole vibe. πŸ¦‹


🧚 Function/Subroutine Documentation 🧚

⭐ subroutine CHESV

here's her full signature, literally character for character:

subroutine CHESV (character uplo, integer n, integer nrhs, complex,
    dimension( lda, * ) a, integer lda, integer, dimension( * ) ipiv,
    complex, dimension( ldb, * ) b, integer ldb, complex, dimension( * )
    work, integer lwork, integer info)

CHESV computes the solution to system of linear equations A * X = B for HE matrices. iconic behaviour, no notes. πŸ’–


🌸 Purpose: 🌸

!>
!> CHESV computes the solution to a complex system of linear equations
!>    A * X = B,
!> where A is an N-by-N Hermitian matrix and X and B are N-by-NRHS
!> matrices.
!>
!> The diagonal pivoting method is used to factor A as
!>    A = U * D * U**H,  if UPLO = 'U', or
!>    A = L * D * L**H,  if UPLO = 'L',
!> 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.  The factored form of A is then
!> used to solve the system of equations A * X = B.
!>

so basically: she takes your Hermitian matrix A, does the diagonal pivoting factorization thing (A = U * D * U**H or A = L * D * L**H depending on UPLO), and then uses that factored form to solve A * X = B. the way that she factors and solves in one go… she ate. πŸ”₯


πŸ’œ Parameters πŸ’œ

🫢 UPLO

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

character, length 1. 'U' means the upper triangle of A is stored, 'L' means the lower triangle is stored. pick your fighter. πŸ’…

🫢 N

!>          N is INTEGER
!>          The number of linear equations, i.e., the order of the
!>          matrix A.  N >= 0.
!>

integer, how many linear equations you got β€” aka the order of matrix A. must be N >= 0, no negativity allowed bestie. ✨

🫢 NRHS

!>          NRHS is INTEGER
!>          The number of right hand sides, i.e., the number of columns
!>          of the matrix B.  NRHS >= 0.
!>

integer, the number of right hand sides β€” literally just the number of columns of matrix B. NRHS >= 0. slay. πŸ’–

🫢 A

!>          A is COMPLEX 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, if INFO = 0, the block diagonal matrix D and the
!>          multipliers used to obtain the factor U or L from the
!>          factorization A = U*D*U**H or A = L*D*L**H as computed by
!>          CHETRF.
!>

COMPLEX array, dimension (LDA,N). on entry it's your Hermitian matrix A:

  • if UPLO = 'U', the leading N-by-N upper triangular part holds the upper triangular part of A, and the strictly lower triangular part is not referenced (she's not looking at it, don't worry about it πŸ™ˆ).
  • if UPLO = 'L', the leading N-by-N lower triangular part holds the lower triangular part of A, and the strictly upper triangular part is not referenced.

on exit, if INFO = 0, you get the block diagonal matrix D plus the multipliers used to get the factor U or L from the factorization A = U*D*U**H or A = L*D*L**H, as computed by CHETRF. teamwork makes the dream work. 🧚

🫢 LDA

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

integer, the leading dimension of array A. rule: LDA >= max(1,N). periodt. πŸŽ€

🫢 IPIV

!>          IPIV is INTEGER array, dimension (N)
!>          Details of the interchanges and the block structure of D, as
!>          determined by CHETRF.  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 UPLO = 'U' and 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' and
!>          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.
!>

INTEGER array, dimension (N). this one's the receipts of all the interchanges and the block structure of D, as determined by CHETRF. the lore:

  • 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 UPLO = 'U' and 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' and 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.

ikyk. πŸ”

🫢 B

!>          B is COMPLEX array, dimension (LDB,NRHS)
!>          On entry, the N-by-NRHS right hand side matrix B.
!>          On exit, if INFO = 0, the N-by-NRHS solution matrix X.
!>

COMPLEX array, dimension (LDB,NRHS). on entry she's the N-by-NRHS right hand side matrix B; on exit, if INFO = 0, she's the N-by-NRHS solution matrix X. glow-up of the century honestly. πŸ¦‹

🫢 LDB

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

integer, the leading dimension of array B. rule: LDB >= max(1,N). same energy as LDA, matching besties. 🫢

🫢 WORK

!>          WORK is COMPLEX array, dimension (MAX(1,LWORK))
!>          On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
!>

COMPLEX array, dimension (MAX(1,LWORK)). on exit, if INFO = 0, WORK(1) returns the optimal LWORK. she's the workspace, she's the main character. 🌟

🫢 LWORK

!>          LWORK is INTEGER
!>          The length of WORK.  LWORK >= 1, and for best performance
!>          LWORK >= max(1,N*NB), where NB is the optimal blocksize for
!>          CHETRF.
!>          for LWORK < N, TRS will be done with Level BLAS 2
!>          for LWORK >= N, TRS will be done with Level BLAS 3
!>
!>          If LWORK = -1, then a workspace query is assumed; the routine
!>          only calculates the optimal size of the WORK array, returns
!>          this value as the first entry of the WORK array, and no error
!>          message related to LWORK is issued by XERBLA.
!>

integer, the length of WORK. LWORK >= 1, and for best performance you want LWORK >= max(1,N*NB) where NB is the optimal blocksize for CHETRF. the details:

  • for LWORK < N, TRS will be done with Level BLAS 2
  • for LWORK >= N, TRS will be done with Level BLAS 3

and if LWORK = -1, a workspace query is assumed β€” she only calculates the optimal size of the WORK array, returns that value as the first entry of the WORK array, and XERBLA issues no error message related to LWORK. she's just checking sizes, don't panic. πŸ’€

🫢 INFO

!>          INFO is INTEGER
!>          = 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, so the solution could not be computed.
!>

integer, the vibe report:

  • = 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, so the solution could not be computed. πŸ’€ (this is the bad ending, bestie β€” she factored but couldn't solve.)

πŸ‘‘ Author πŸ‘‘

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

Definition at line 169 of file chesv.f. πŸ“


🌈 Author 🌈

Generated automatically by Doxygen for LAPACK from the source code. (yes she was born from a doc generator, and she's still iconic ✨)


LAPACK β€” Version 3.12.0 β€” /home/abui...RC/chesv.f(3)

and that's the whole page bestie, mwah πŸ’‹ go solve some complex Hermitian systems, you've got this πŸ«ΆπŸŽ€

πŸ“¦ where this page comes from