hetrf_aa_2stage(3)
π hetrf_aa_2stage β the {he,sy}trf_aa_2stage glow-up: triangular factor π
okay bestie, welcome to the hetrf_aa_2stage(3) page, aka the Library Functions Manual entry for a whole little family of routines that all do the same iconic thing in different flavors. it's giving "one friend group, six personalities" fr fr. β¨
πΈ NAME πΈ
hetrf_aa_2stage β {he,sy}trf_aa_2stage: triangular factor. that's the whole name, no cap. π
π¦ SYNOPSIS π¦
Functions
here's the whole squad, all six of them, listed exactly like this:
subroutine chetrf_aa_2stage (uplo, n, a, lda, tb, ltb, ipiv, ipiv2,
work, lwork, info)
CHETRF_AA_2STAGE
subroutine csytrf_aa_2stage (uplo, n, a, lda, tb, ltb, ipiv, ipiv2,
work, lwork, info)
CSYTRF_AA_2STAGE
subroutine dsytrf_aa_2stage (uplo, n, a, lda, tb, ltb, ipiv, ipiv2,
work, lwork, info)
DSYTRF_AA_2STAGE
subroutine ssytrf_aa_2stage (uplo, n, a, lda, tb, ltb, ipiv, ipiv2,
work, lwork, info)
SSYTRF_AA_2STAGE
subroutine zhetrf_aa_2stage (uplo, n, a, lda, tb, ltb, ipiv, ipiv2,
work, lwork, info)
ZHETRF_AA_2STAGE
subroutine zsytrf_aa_2stage (uplo, n, a, lda, tb, ltb, ipiv, ipiv2,
work, lwork, info)
ZSYTRF_AA_2STAGE
like, they literally all take the same arguments. it's a uniform. a lewk. π
π Detailed Description π
this section is just the heading in the original, bestie β the actual tea gets spilled under Function Documentation right below. π«Ά
π Function Documentation π
π subroutine chetrf_aa_2stage β CHETRF_AA_2STAGE
subroutine chetrf_aa_2stage (character uplo, integer n, complex, dimension(
lda, * ) a, integer lda, complex, dimension( * ) tb, integer ltb,
integer, dimension( * ) ipiv, integer, dimension( * ) ipiv2, complex,
dimension( * ) work, integer lwork, integer info)
β¨ Purpose β¨
okay so the actual purpose, and yes it's literally written with these !> comment markers in the source, so here's the vibe:
!>
!> CHETRF_AA_2STAGE computes the factorization of a real hermitian matrix A
!> using the Aasen's algorithm. The form of the factorization is
!>
!> A = U**T*T*U or A = L*T*L**T
!>
!> where U (or L) is a product of permutation and unit upper (lower)
!> triangular matrices, and T is a hermitian band matrix with the
!> bandwidth of NB (NB is internally selected and stored in TB( 1 ), and T is
!> LU factorized with partial pivoting).
!>
!> This is the blocked version of the algorithm, calling Level 3 BLAS.
!>
so: Aasen's algorithm, factorization in that A = U**T*T*U / A = L*T*L**T shape, U (or L) is a product of permutation and unit upper (lower) triangular matrices, and T is a hermitian band matrix with bandwidth NB β and NB is internally selected and stored in TB( 1 ), with T LU factorized using partial pivoting. this is the blocked version, calling Level 3 BLAS. main character energy. π₯
π Parameters π
UPLOβUPLOisCHARACTER*1.= 'U': the upper triangle ofAis stored;= 'L': the lower triangle ofAis stored. pick a side, bestie. πNβNisINTEGER. the order of the matrixA.N >= 0.AβAisCOMPLEXarray, dimension(LDA,N). on entry, the hermitian matrixA. ifUPLO = 'U', the leadingN-by-Nupper triangular part ofAcontains the upper triangular part of the matrixA, and the strictly lower triangular part ofAis not referenced. ifUPLO = 'L', the leadingN-by-Nlower triangular part ofAcontains the lower triangular part of the matrixA, and the strictly upper triangular part ofAis not referenced.
on exit, L is stored below (or above) the subdiagonal blocks, when UPLO is 'L' (or 'U'). π«
LDAβLDAisINTEGER. the leading dimension of the arrayA.LDA >= max(1,N).TBβTBisCOMPLEXarray, dimension(MAX(1,LTB)). on exit, details of the LU factorization of the band matrix. that's where the receipts live. π§ΎLTBβLTBisINTEGER. the size of the arrayTB.LTB >= MAX(1,4*N), internally used to selectNBsuch thatLTB >= (3*NB+1)*N.
ifLTB = -1, then a workspace query is assumed; the routine only calculates the optimal size ofLTB, returns this value as the first entry ofTB, and no error message related toLTBis issued by XERBLA. so don't @ XERBLA, it's not gonna answer. π
IPIVβIPIVisINTEGERarray, dimension(N). on exit, it contains the details of the interchanges, i.e., the row and columnkofAwere interchanged with the row and columnIPIV(k).IPIV2βIPIV2isINTEGERarray, dimension(N). on exit, it contains the details of the interchanges, i.e., the row and columnkofTwere interchanged with the row and columnIPIV(k). (yes, the original text saysIPIV(k)here too β copying it exactly, don't come for me π)WORKβWORKisCOMPLEXworkspace of size(MAX(1,LWORK)).LWORKβLWORKisINTEGER. the size ofWORK.LWORK >= MAX(1,N), internally used to selectNBsuch thatLWORK >= N*NB.
ifLWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of theWORKarray, returns this value as the first entry of theWORKarray, and no error message related toLWORKis issued by XERBLA. same deal, bestie. π«Ά
INFOβINFOisINTEGER:= 0: successful exit π< 0: ifINFO = -i, thei-th argument had an illegal value.> 0: ifINFO = i, band LU factorization failed oni-th column. π (she tried, okay?)
π Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
β Definition β
Definition at line 158 of file chetrf_aa_2stage.f.
π¦ subroutine csytrf_aa_2stage β CSYTRF_AA_2STAGE
subroutine csytrf_aa_2stage (character uplo, integer n, complex, dimension(
lda, * ) a, integer lda, complex, dimension( * ) tb, integer ltb,
integer, dimension( * ) ipiv, integer, dimension( * ) ipiv2, complex,
dimension( * ) work, integer lwork, integer info)
β¨ Purpose β¨
!>
!> CSYTRF_AA_2STAGE computes the factorization of a complex symmetric matrix A
!> using the Aasen's algorithm. The form of the factorization is
!>
!> A = U**T*T*U or A = L*T*L**T
!>
!> where U (or L) is a product of permutation and unit upper (lower)
!> triangular matrices, and T is a complex symmetric band matrix with the
!> bandwidth of NB (NB is internally selected and stored in TB( 1 ), and T is
!> LU factorized with partial pivoting).
!>
!> This is the blocked version of the algorithm, calling Level 3 BLAS.
!>
same shape as her sister, but this one's a complex symmetric matrix A and T is a complex symmetric band matrix with bandwidth NB (NB internally selected, stored in TB( 1 ), T LU factorized with partial pivoting). still the blocked version, still calling Level 3 BLAS. consistent queen. πΈ
π Parameters π
UPLOβUPLOisCHARACTER*1.= 'U': the upper triangle ofAis stored;= 'L': the lower triangle ofAis stored.NβNisINTEGER. the order of the matrixA.N >= 0.AβAisCOMPLEXarray, dimension(LDA,N). on entry, the hermitian matrixA. ifUPLO = 'U', the leadingN-by-Nupper triangular part ofAcontains the upper triangular part of the matrixA, and the strictly lower triangular part ofAis not referenced. ifUPLO = 'L', the leadingN-by-Nlower triangular part ofAcontains the lower triangular part of the matrixA, and the strictly upper triangular part ofAis not referenced.
on exit, L is stored below (or above) the subdiagonal blocks, when UPLO is 'L' (or 'U').
LDAβLDAisINTEGER. the leading dimension of the arrayA.LDA >= max(1,N).TBβTBisCOMPLEXarray, dimension(LTB). on exit, details of the LU factorization of the band matrix. (note: noMAX(1,...)wrapper on this one, she's built different π )LTBβLTBisINTEGER. the size of the arrayTB.LTB >= 4*N, internally used to selectNBsuch thatLTB >= (3*NB+1)*N.
ifLTB = -1, then a workspace query is assumed; the routine only calculates the optimal size ofLTB, returns this value as the first entry ofTB, and no error message related toLTBis issued by XERBLA.
IPIVβIPIVisINTEGERarray, dimension(N). on exit, it contains the details of the interchanges, i.e., the row and columnkofAwere interchanged with the row and columnIPIV(k).IPIV2βIPIV2isINTEGERarray, dimension(N). on exit, it contains the details of the interchanges, i.e., the row and columnkofTwere interchanged with the row and columnIPIV(k). (again, exact copy of the original wording π«Ά)WORKβWORKisCOMPLEXworkspace of sizeLWORK.LWORKβLWORKisINTEGER. the size ofWORK.LWORK >= N, internally used to selectNBsuch thatLWORK >= N*NB.
ifLWORK = -1, then a workspace query is assumed; the routine only calculates the optimal size of theWORKarray, returns this value as the first entry of theWORKarray, and no error message related toLWORKis issued by XERBLA.
INFOβINFOisINTEGER:= 0: successful exit π< 0: ifINFO = -i, thei-th argument had an illegal value.> 0: ifINFO = i, band LU factorization failed oni-th column.
π Author π
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
β Definition β
Definition at line 158 of file csytrf_aa_2stage.f.
π§ subroutine dsytrf_aa_2stage β DSYTRF_AA_2STAGE
subroutine dsytrf_aa_2stage (character uplo, integer n, double precision,
dimension( lda, * ) a, integer lda, double precision, dimension( * ) tb,
integer ltb, integer, dimension( * ) ipiv, integer, dimension( * )
ipiv2, double precision, dimension( * ) work, integer lwork, integer
info)
β¨ Purpose β¨
!>
!> DSYTRF_AA_2STAGE computes the factorization of a real symmetric matrix A
!> using the Aasen's algorithm. The form of the factorization is
!>
!> A = U**T*T*U or A = L*T*L**T
!>
!> where U (or L) is a product of permutation and unit upper (lower)
!> triangular matrices, and T is a symmetric band matrix with the
!> bandwidth of NB (NB is internally selected and stored in TB( 1 ), and T is
!> LU factorized with partial pivoting).
!>
!> This is the blocked version of the algorithm, calling Level 3 BLAS.
!>
real symmetric this time, same A = U**T*T*U / A = L*T*L**T situation, U (or L) is a product of permutation and unit upper (lower) triangular matrices, T is a symmetric band matrix with bandwidth NB β NB internally selected and stored in TB( 1 ), T LU factorized with partial pivoting. blocked version, Level 3 BLAS. the whole family shares one brain cell and honestly? it works. π§ β¨
π Parameters π
UPLOβUPLOisCHARACTER*1.= 'U': the upper triangle ofAis stored;= 'L': the lower triangle ofAis stored.NβNisINTEGER. the order of the matrixA.N >= 0.Aβ andAis where we're picking back up, bestie β hold that thought π
A
Ok so this is where you put your matrix, bestie π. A is a DOUBLE PRECISION array, dimension (LDA,N).
On entry? The symmetric matrix A lives here. 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, L is stored below (or above) the subdiagonal blocks, when UPLO is 'L' (or 'U'). So she moves out and L moves in β¨
LDA
LDA is INTEGER β the leading dimension of the array A. Rule of the day: LDA >= max(1,N). No exceptions, she's strict π
TB
TB is DOUBLE PRECISION array, dimension (MAX(1,LTB)).
On exit, details of the LU factorization of the band matrix. That's it, that's the vibe π¦
LTB
LTB is INTEGER β the size of the array TB. LTB >= MAX(1,4*N), and it's internally used to select NB such that LTB >= (3*NB+1)*N.
Now the fun bit π: if LTB = -1, then a workspace query is assumed. The routine only calculates the optimal size of LTB, returns this value as the first entry of TB, and β key detail, bestie β no error message related to LTB is issued by XERBLA. So no need to clutch your pearls, she's not mad at you π
IPIV
IPIV is INTEGER array, dimension (N).
On exit, it contains the details of the interchanges, i.e., the row and column k of A were interchanged with the row and column IPIV(k). Receipts for every swap π₯
IPIV2
IPIV2 is INTEGER array, dimension (N).
On exit, it contains the details of the interchanges, i.e., the row and column k of T were interchanged with the row and column IPIV2(k). Same energy, but for the band matrix T this time πΈ
WORK
WORK is DOUBLE PRECISION workspace of size (MAX(1,LWORK)). She's just here to hold your stuff π
LWORK
LWORK is INTEGER β the size of WORK. LWORK >= MAX(1,N), internally used to select NB such that LWORK >= N*NB.
And 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. Query mode on, drama off π
INFO
INFO is INTEGER, and it's literally the vibe check at the end:
= 0:successful exit π< 0:ifINFO = -i, the i-th argument had an illegal value. Somebody typed something sus π> 0:ifINFO = i, band LU factorization failed on i-th column. Not the slay we wanted π
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Definition at line 158 of file dsytrf_aa_2stage.f.
π« ssytrf_aa_2stage
subroutine ssytrf_aa_2stage (character uplo, integer n, real, dimension(
lda, * ) a, integer lda, real, dimension( * ) tb, integer ltb, integer,
dimension( * ) ipiv, integer, dimension( * ) ipiv2, real, dimension( * )
work, integer lwork, integer info)
SSYTRF_AA_2STAGE β same iconic routine, single precision edition π«Ά
Purpose
SSYTRF_AA_2STAGE computes the factorization of a real symmetric matrix A using the Aasen's algorithm. The form of the factorization is:
A = U**T*T*U or A = L*T*L**T
where U (or L) is a product of permutation and unit upper (lower) triangular matrices, and T is a symmetric band matrix with the bandwidth of NB (NB is internally selected and stored in TB( 1 ), and T is LU factorized with partial pivoting).
This is the blocked version of the algorithm, calling Level 3 BLAS. She's built different fr fr β‘
Parameters
UPLO
UPLO is CHARACTER*1:
= 'U':Upper triangle ofAis stored;= 'L':Lower triangle ofAis stored.
Pick your fighter π
N
N is INTEGER β the order of the matrix A. N >= 0.
A
A is REAL array, dimension (LDA,N).
On entry, the symmetric 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, L is stored below (or above) the subdiagonal blocks, when UPLO is 'L' (or 'U') π
LDA
LDA is INTEGER β the leading dimension of the array A. LDA >= max(1,N).
TB
TB is REAL array, dimension (LTB).
On exit, details of the LU factorization of the band matrix. Obsessed with the specificity π
LTB
LTB is INTEGER β the size of the array TB. LTB >= MAX(1,4*N), internally used to select NB such that LTB >= (3*NB+1)*N.
If LTB = -1, then a workspace query is assumed; the routine only calculates the optimal size of LTB, returns this value as the first entry of TB, and no error message related to LTB is issued by XERBLA π
IPIV
IPIV is INTEGER array, dimension (N).
On exit, it contains the details of the interchanges, i.e., the row and column k of A were interchanged with the row and column IPIV(k).
IPIV2
IPIV2 is INTEGER array, dimension (N).
On exit, it contains the details of the interchanges, i.e., the row and column k of T were interchanged with the row and column IPIV(k).
WORK
WORK is REAL workspace of size (MAX(1,LWORK)).
LWORK
LWORK is INTEGER β the size of WORK. LWORK >= MAX(1,N), internally used to select NB such that LWORK >= N*NB.
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 β¨
INFO
INFO is INTEGER:
= 0:successful exit π₯³< 0:ifINFO = -i, the i-th argument had an illegal value.> 0:ifINFO = i, band LU factorization failed on i-th column. Crying in the club rn π
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Definition at line 158 of file ssytrf_aa_2stage.f.
π zhetrf_aa_2stage
subroutine zhetrf_aa_2stage (character uplo, integer n, complex*16,
dimension( lda, * ) a, integer lda, complex*16, dimension( * ) tb,
integer ltb, integer, dimension( * ) ipiv, integer, dimension( * )
ipiv2, complex*16, dimension( * ) work, integer lwork, integer info)
ZHETRF_AA_2STAGE β now we're in complex double territory, and she is main character energy π
Purpose
ZHETRF_AA_2STAGE computes the factorization of a double hermitian matrix A using the Aasen's algorithm. The form of the factorization is:
A = U**H*T*U or A = L*T*L**H
where U (or L) is a product of permutation and unit upper (lower) triangular matrices, and T is a hermitian band matrix with the bandwidth of NB (NB is internally selected and stored in TB( 1 ), and T is LU factorized with partial pivoting).
This is the blocked version of the algorithm, calling Level 3 BLAS. Same blocked energy, now with conjugates π¦
Parameters
UPLO
UPLO is CHARACTER*1:
= 'U':Upper triangle ofAis stored;= 'L':Lower triangle ofAis stored.
N
N is INTEGER β the order of the matrix A. N >= 0.
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, L is stored below (or above) the subdiagonal blocks, when UPLO is 'L' (or 'U') π
LDA
LDA is INTEGER β the leading dimension of the array A. LDA >= max(1,N).
TB
TB is COMPLEX*16 array, dimension (MAX(1,LTB)).
On exit, details of the LU factorization of the band matrix. Notes taken, receipts kept π
LTB
LTB is INTEGER β the size of the array TB. LTB >= MAX(1,4*N), internally used to select NB such that LTB >= (3*NB+1)*N.
If LTB = -1, then a workspace query is assumed; the routine only calculates the optimal size of LTB, returns this value as the first entry of TB, and no error message related to LTB is issued by XERBLA π
IPIV
IPIV is INTEGER array, dimension (N).
On exit, it contains the details of the interchanges, i.e., the row and column k of A were interchanged with the row and column IPIV(k).
IPIV2
IPIV2 is INTEGER array, dimension (N).
On exit, it contains the details of the interchanges, i.e., the row and column k of T were interchanged with the row and column IPIV(k).
WORK
WORK is COMPLEX*16 workspace of size (MAX(1,LWORK)).
LWORK
LWORK is INTEGER β the size of WORK. LWORK >= MAX(1,N), internally used to select NB such that LWORK >= N*NB.
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 β¨
LWORKβ bestie, this is anINTEGER, and it's literally the size ofWORK. It needsLWORK >= MAX(1,N), and it's internally used to selectNBsuch thatLWORK >= N*NBβ¨
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 π
INFOβ anINTEGER, the vibe-check report at the end π= 0: successful exit π< 0: ifINFO = -i, the i-th argument had an illegal value π> 0: ifINFO = i, band LU factorization failed on i-th column π
π Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Definition at line 158 of file zhetrf_aa_2stage.f.
π¦ subroutine zsytrf_aa_2stage (ZSYTRF_AA_2STAGE)
subroutine zsytrf_aa_2stage (character uplo, integer n, complex*16,
dimension( lda, * ) a, integer lda, complex*16, dimension( * ) tb,
integer ltb, integer, dimension( * ) ipiv, integer, dimension( * )
ipiv2, complex*16, dimension( * ) work, integer lwork, integer info)
β¨ Purpose
Okay so ZSYTRF_AA_2STAGE computes the factorization of a complex symmetric matrix A using the Aasen's algorithm π₯ The form of the factorization is literally this:
A = U**T*T*U or A = L*T*L**T
where U (or L) is a product of permutation and unit upper (lower) triangular matrices, and T is a complex symmetric band matrix with the bandwidth of NB (NB is internally selected and stored in TB( 1 ), and T is LU factorized with partial pivoting) π«Ά
This is the blocked version of the algorithm, calling Level 3 BLAS. Iconic behavior, no cap π
π Parameters
UPLOβ isCHARACTER*1πΈ= 'U': Upper triangle ofAis stored π¦= 'L': Lower triangle ofAis stored π¦
Nβ isINTEGER, the order of the matrixA.N >= 0βAβ isCOMPLEX*16array, dimension(LDA,N)π On entry, the hermitian matrixA. IfUPLO = 'U', the leading N-by-N upper triangular part ofAcontains the upper triangular part of the matrixA, and the strictly lower triangular part ofAis not referenced. IfUPLO = 'L', the leading N-by-N lower triangular part ofAcontains the lower triangular part of the matrixA, and the strictly upper triangular part ofAis not referenced.
On exit, L is stored below (or above) the subdiagonal blocks, when UPLO is 'L' (or 'U') π
LDAβ isINTEGER, the leading dimension of the arrayA.LDA >= max(1,N)β¨TBβ isCOMPLEX*16array, dimension(LTB)π On exit, details of the LU factorization of the band matrix.LTBβ isINTEGER, the size of the arrayTB.LTB >= 4*N, internally used to selectNBsuch thatLTB >= (3*NB+1)*Nπ₯
If LTB = -1, then a workspace query is assumed; the routine only calculates the optimal size of LTB, returns this value as the first entry of TB, and no error message related to LTB is issued by XERBLA π
IPIVβ isINTEGERarray, dimension(N)π On exit, it contains the details of the interchanges, i.e., the row and columnkofAwere interchanged with the row and columnIPIV(k).IPIV2β isINTEGERarray, dimension(N)π On exit, it contains the details of the interchanges, i.e., the row and columnkofTwere interchanged with the row and columnIPIV(k).WORKβ isCOMPLEX*16workspace of sizeLWORKπ«ΆLWORKβ isINTEGER, the size ofWORK.LWORK >= N, internally used to selectNBsuch thatLWORK >= N*NBπ
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 π
INFOβ isINTEGER, the final receipts π§Ύ= 0: successful exit π₯³< 0: ifINFO = -i, the i-th argument had an illegal value π> 0: ifINFO = i, band LU factorization failed on i-th column π
π§ Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Definition at line 158 of file zsytrf_aa_2stage.f.
And that's a wrap, bestie π
β¨ This whole thing was generated automatically by Doxygen for LAPACK from the source code β LAPACK Version 3.12.0, hetrf_aa_2stage(3), periodt ππ«Ά
π¦ 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