CLAUNHR_COL_GETRFNP2(3)
π CLAUNHR_COL_GETRFNP2(3) β like, the whole entire manual page, bestie
okay so this is a Library Functions Manual page, and the file it lives in is literally:
/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/claunhr_col_getrfnp2.f
yes that's a real path, no I'm not shortening it, it's iconic in its own chaotic way π«Ά
β¨ SYNOPSIS β¨
π Functions/Subroutines
recursive subroutine CLAUNHR_COL_GETRFNP2 (m, n, a, lda, d, info)
CLAUNHR_COL_GETRFNP2
πΈ Function/Subroutine Documentation πΈ
recursive subroutine CLAUNHR_COL_GETRFNP2 (integer m, integer n, complex,
dimension( lda, * ) a, integer lda, complex, dimension( * ) d, integer
info)
CLAUNHR_COL_GETRFNP2 β that's her name, that's her whole thing, she's recursive and she's not sorry about it π
π Purpose:
!>
!> CLAUNHR_COL_GETRFNP2 computes the modified LU factorization without
!> pivoting of a complex general M-by-N matrix A. The factorization has
!> the form:
!>
!> A - S = L * U,
!>
!> where:
!> S is a m-by-n diagonal sign matrix with the diagonal D, so that
!> D(i) = S(i,i), 1 <= i <= min(M,N). The diagonal D is constructed
!> as D(i)=-SIGN(A(i,i)), where A(i,i) is the value after performing
!> i-1 steps of Gaussian elimination. This means that the diagonal
!> element at each step of Gaussian elimination is at
!> least one in absolute value (so that division-by-zero not
!> possible during the division by the diagonal element);
!>
!> L is a M-by-N lower triangular matrix with unit diagonal elements
!> (lower trapezoidal if M > N);
!>
!> and U is a M-by-N upper triangular matrix
!> (upper trapezoidal if M < N).
!>
!> This routine is an auxiliary routine used in the Householder
!> reconstruction routine CUNHR_COL. In CUNHR_COL, this routine is
!> applied to an M-by-N matrix A with orthonormal columns, where each
!> element is bounded by one in absolute value. With the choice of
!> the matrix S above, one can show that the diagonal element at each
!> step of Gaussian elimination is the largest (in absolute value) in
!> the column on or below the diagonal, so that no pivoting is required
!> for numerical stability [1].
!>
!> For more details on the Householder reconstruction algorithm,
!> including the modified LU factorization, see [1].
!>
!> This is the recursive version of the LU factorization algorithm.
!> Denote A - S by B. The algorithm divides the matrix B into four
!> submatrices:
!>
!> [ B11 | B12 ] where B11 is n1 by n1,
!> B = [ -----|----- ] B21 is (m-n1) by n1,
!> [ B21 | B22 ] B12 is n1 by n2,
!> B22 is (m-n1) by n2,
!> with n1 = min(m,n)/2, n2 = n-n1.
!>
!>
!> The subroutine calls itself to factor B11, solves for B21,
!> solves for B12, updates B22, then calls itself to factor B22.
!>
!> For more details on the recursive LU algorithm, see [2].
!>
!> CLAUNHR_COL_GETRFNP2 is called to factorize a block by the blocked
!> routine CLAUNHR_COL_GETRFNP, which uses blocked code calling
!> Level 3 BLAS to update the submatrix. However, CLAUNHR_COL_GETRFNP2
!> is self-sufficient and can be used without CLAUNHR_COL_GETRFNP.
!>
!> [1] ,
!> G. Ballard, J. Demmel, L. Grigori, M. Jacquelin, H.D. Nguyen,
!> E. Solomonik, J. Parallel Distrib. Comput.,
!> vol. 85, pp. 3-31, 2015.
!>
!> [2] , F. Gustavson, IBM J. of Res. and Dev.,
!> vol. 41, no. 6, pp. 737-755, 1997.
!>
so like, in girl terms: she does a modified LU factorization of a complex general M-by-N matrix A without pivoting, and the whole A - S = L * U thing is the setup π And honestly the way she picks that diagonal D(i) = -SIGN(A(i,i)) so the diagonal element is always at least one in absolute value?? so division-by-zero literally can't happen?? that's the self-care we deserve β¨
Also she's an auxiliary routine for CUNHR_COL (the Householder reconstruction routine), where A has orthonormal columns, each element bounded by one in abs value β and with that S choice, the diagonal element at each Gaussian elimination step is the largest in abs value in the column on or below the diagonal, so no pivoting is required for numerical stability [1] π
And she's recursive β she splits B = A - S into four submatrices (B11 n1Γn1, B21 (m-n1)Γn1, B12 n1Γn2, B22 (m-n1)Γn2, with n1 = min(m,n)/2, n2 = n-n1), calls herself to factor B11, solves for B21, solves for B12, updates B22, then calls herself again to factor B22. literal main character energy π₯
And yes bestie, CLAUNHR_COL_GETRFNP (the blocked one) calls her to factorize a block, but she's self-sufficient and can be used all on her own without it π
The refs she cites (iykyk):
- [1] G. Ballard, J. Demmel, L. Grigori, M. Jacquelin, H.D. Nguyen, E. Solomonik, J. Parallel Distrib. Comput., vol. 85, pp. 3-31, 2015.
- [2] F. Gustavson, IBM J. of Res. and Dev., vol. 41, no. 6, pp. 737-755, 1997.
π¦ Parameters
M
!> M is INTEGER
!> The number of rows of the matrix A. M >= 0.
!>
the row count, she's INTEGER, and M >= 0 fr fr.
N
!> N is INTEGER
!> The number of columns of the matrix A. N >= 0.
!>
the column count, also INTEGER, also N >= 0.
A
!> A is COMPLEX array, dimension (LDA,N)
!> On entry, the M-by-N matrix to be factored.
!> On exit, the factors L and U from the factorization
!> A-S=L*U; the unit diagonal elements of L are not stored.
!>
COMPLEX array, dimension (LDA,N). On entry: the M-by-N matrix to be factored. On exit: the factors L and U from A-S=L*U β and heads up, the unit diagonal elements of L are not stored π
LDA
!> LDA is INTEGER
!> The leading dimension of the array A. LDA >= max(1,M).
!>
leading dimension of A, INTEGER, and LDA >= max(1,M) β no cap.
D
!> D is COMPLEX array, dimension min(M,N)
!> The diagonal elements of the diagonal M-by-N sign matrix S,
!> D(i) = S(i,i), where 1 <= i <= min(M,N). The elements can be
!> only ( +1.0, 0.0 ) or (-1.0, 0.0 ).
!>
COMPLEX array, dimension min(M,N) β the diagonal elements of the diagonal M-by-N sign matrix S, with D(i) = S(i,i) for 1 <= i <= min(M,N). And the elements can be only ( +1.0, 0.0 ) or (-1.0, 0.0 ) β like, pick a lane, and it's one of those two.
INFO
!> INFO is INTEGER
!> = 0: successful exit
!> < 0: if INFO = -i, the i-th argument had an illegal value
!>
INTEGER, and it's giving:
= 0: successful exit π< 0: ifINFO = -i, the i-th argument had an illegal value π
π Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
π§ Contributors:
!>
!> November 2019, Igor Kozachenko,
!> Computer Science Division,
!> University of California, Berkeley
!>
!>
shoutout Igor, November 2019, Computer Science Division, University of California, Berkeley π«Ά
Definition at line 166 of file claunhr_col_getrfnp2.f β that's where she lives, in case you need to find her.
π Author (the meta one)
Generated automatically by Doxygen for LAPACK from the source code. (yes, a robot wrote this bit, not me, don't @ me π€)
and that's the whole page bestie!! LAPACK, Version 3.12.0, dated /home/abui..._getrfnp2.f(3) β mwah, slay, go factor something πβ¨π
π¦ 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