variantsGEcomputational(3)

๐Ÿ“ฆ
version 3.11.0 ยท 2 versions
, in debian bookworm

๐Ÿ’– variantsGEcomputational(3) ๐Ÿ’–

okay bestie, this is variantsGEcomputational(3) from LAPACK โ€” the page all about the Variants Computational routines. it's a long one so we're doing this in parts, stay with me ๐Ÿซถ


๐ŸŒธ NAME ๐ŸŒธ

variantsGEcomputational โ€” Variants Computational routines โœจ


โœจ SYNOPSIS โœจ

๐Ÿงš Functions ๐Ÿงš

  • subroutine cgetrf (M, N, A, LDA, IPIV, INFO) โ€” CGETRF VARIANT: Crout Level 3 BLAS version of the algorithm. ๐Ÿ’…
  • subroutine dgetrf (M, N, A, LDA, IPIV, INFO) โ€” DGETRF VARIANT: Crout Level 3 BLAS version of the algorithm. ๐Ÿ’…
  • subroutine sgetrf (M, N, A, LDA, IPIV, INFO) โ€” SGETRF VARIANT: Crout Level 3 BLAS version of the algorithm. ๐Ÿ’…
  • subroutine zgetrf (M, N, A, LDA, IPIV, INFO) โ€” ZGETRF VARIANT: Crout Level 3 BLAS version of the algorithm. ๐Ÿ’…
  • subroutine cgeqrf (M, N, A, LDA, TAU, WORK, LWORK, INFO) โ€” CGEQRF VARIANT: left-looking Level 3 BLAS version of the algorithm. ๐ŸŒˆ
  • subroutine dgeqrf (M, N, A, LDA, TAU, WORK, LWORK, INFO) โ€” DGEQRF VARIANT: left-looking Level 3 BLAS version of the algorithm. ๐ŸŒˆ
  • subroutine sgeqrf (M, N, A, LDA, TAU, WORK, LWORK, INFO) โ€” SGEQRF VARIANT: left-looking Level 3 BLAS version of the algorithm. ๐ŸŒˆ
  • subroutine zgeqrf (M, N, A, LDA, TAU, WORK, LWORK, INFO) โ€” ZGEQRF VARIANT: left-looking Level 3 BLAS of the algorithm. ๐ŸŒˆ

๐Ÿฆ‹ Detailed Description ๐Ÿฆ‹

This is the group of Variants Computational routines. periodt. ๐Ÿ’–


๐Ÿ‘‘ Function Documentation ๐Ÿ‘‘

๐Ÿ“ subroutine cgeqrf (integer M, integer N, complex, dimension( lda, * ) A, integer LDA, complex, dimension( * ) TAU, complex, dimension( * ) WORK, integer LWORK, integer INFO) ๐Ÿ“

CGEQRF VARIANT: left-looking Level 3 BLAS version of the algorithm. no cap, this is the one that goes left-looking. โœจ

๐Ÿ’œ Purpose:

CGEQRF computes a QR factorization of a real M-by-N matrix A:

A = Q * R.

This is the left-looking Level 3 BLAS version of the algorithm. ๐ŸŽ€

๐Ÿ’œ Parameters

  • M

M is INTEGER The number of rows of the matrix A. M >= 0.

  • N

N is INTEGER The number of columns of the matrix A. N >= 0.

  • A

A is COMPLEX array, dimension (LDA,N) On entry, the M-by-N matrix A. On exit, the elements on and above the diagonal of the array contain the min(M,N)-by-N upper trapezoidal matrix R (R is upper triangular if m >= n); the elements below the diagonal, with the array TAU, represent the orthogonal matrix Q as a product of min(m,n) elementary reflectors (see Further Details).

  • LDA

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

  • TAU

TAU is COMPLEX array, dimension (min(M,N)) The scalar factors of the elementary reflectors (see Further Details).

  • WORK

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

  • LWORK

LWORK is INTEGER

The dimension of the array WORK. LWORK >= 1 if MIN(M,N) = 0, otherwise the dimension can be divided into three parts.

  1. The part for the triangular factor T. If the very last T is not bigger than any of the rest, then this part is NB x ceiling(K/NB), otherwise, NB x (K-NT), where K = min(M,N) and NT is the dimension of the very last T.
  2. The part for the very last T when T is bigger than any of the rest T. The size of this part is NT x NT, where NT = K - ceiling ((K-NX)/NB) x NB, where K = min(M,N), NX is calculated by
NX = MAX( 0, ILAENV( 3, 'CGEQRF', ' ', M, N, -1, -1 ) )
  1. The part for dlarfb is of size max((N-M)*K, (N-M)*NB, K*NB, NB*NB)

So LWORK = part1 + part2 + part3 ๐Ÿ’…

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: if INFO = -i, the i-th argument had an illegal value

๐Ÿ’œ Author

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

๐Ÿ’œ Date

December 2016

๐Ÿ’œ Further Details

The matrix Q is represented as a product of elementary reflectors

   Q = H(1) H(2) . . . H(k), where k = min(m,n).

Each H(i) has the form

   H(i) = I - tau * v * v'

where tau is a real scalar, and v is a real vector with v(1:i-1) = 0 and v(i) = 1; v(i+1:m) is stored on exit in A(i+1:m,i), and tau in TAU(i).


๐Ÿ“ subroutine cgetrf (integer M, integer N, complex, dimension( lda, * ) A, integer LDA, integer, dimension( * ) IPIV, integer INFO) ๐Ÿ“

CGETRF VARIANT: Crout Level 3 BLAS version of the algorithm. CGETRF VARIANT: iterative version of Sivan Toledo's recursive LU algorithm

CGETRF VARIANT: left-looking Level 3 BLAS version of the algorithm.

yeah bestie, this one's got THREE whole variants living in it. iconic. ๐Ÿ‘‘

๐Ÿ’œ Purpose: (the Crout Level 3 BLAS one)

CGETRF computes an LU factorization of a general M-by-N matrix A using partial pivoting with row interchanges.

The factorization has the form

   A = P * L * U

where P is a permutation matrix, L is lower triangular with unit diagonal elements (lower trapezoidal if m > n), and U is upper triangular (upper trapezoidal if m < n).

This is the Crout Level 3 BLAS version of the algorithm. ๐ŸŽ€

๐Ÿ’œ Parameters

  • M

M is INTEGER The number of rows of the matrix A. M >= 0.

  • N

N is INTEGER The number of columns of the matrix A. 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 = P*L*U; the unit diagonal elements of L are not stored.

  • LDA

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

  • IPIV

IPIV is INTEGER array, dimension (min(M,N)) The pivot indices; for 1 <= i <= min(M,N), row i of the matrix was interchanged with row IPIV(i).

  • INFO

INFO is INTEGER = 0: successful exit < 0: if INFO = -i, the i-th argument had an illegal value > 0: if INFO = i, U(i,i) is exactly zero. The factorization has been completed, but the factor U is exactly singular, and division by zero will occur if it is used to solve a system of equations. ๐Ÿšจ

๐Ÿ’œ Author

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

๐Ÿ’œ Date

December 2016

๐Ÿ’œ Purpose: (the left-looking Level 3 BLAS one)

CGETRF computes an LU factorization of a general M-by-N matrix A using partial pivoting with row interchanges.

The factorization has the form

   A = P * L * U

where P is a permutation matrix, L is lower triangular with unit diagonal elements (lower trapezoidal if m > n), and U is upper triangular (upper trapezoidal if m < n).

This is the left-looking Level 3 BLAS version of the algorithm. ๐ŸŽ€

๐Ÿ’œ Parameters

  • M

M is INTEGER The number of rows of the matrix A. M >= 0.

  • N

N is INTEGER The number of columns of the matrix A. 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 = P*L*U; the unit diagonal elements of L are not stored.

  • LDA

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

  • IPIV

IPIV is INTEGER array, dimension (min(M,N)) The pivot indices; for 1 <= i <= min(M,N), row i of the matrix was interchanged with row IPIV(i).

  • INFO

INFO is INTEGER = 0: successful exit < 0: if INFO = -i, the i-th argument had an illegal value > 0: if INFO = i, U(i,i) is exactly zero. The factorization has been completed, but the factor U is exactly singular, and division by zero will occur if it is used to solve a system of equations. ๐Ÿšจ

๐Ÿ’œ Author

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

๐Ÿ’œ Date

December 2016

๐Ÿ’œ Purpose: (the iterative Sivan Toledo one, and yes she's a whole vibe)

CGETRF computes an LU factorization of a general M-by-N matrix A using partial pivoting with row interchanges.

The factorization has the form

   A = P * L * U

where P is a permutation matrix, L is lower triangular with unit diagonal elements (lower trapezoidal if m > n), and U is upper triangular (upper trapezoidal if m < n).

This code implements an iterative version of Sivan Toledo's recursive LU algorithm[1]. For square matrices, this iterative versions should be within a factor of two of the optimum number of memory transfers. ๐Ÿ”ฅ

The pattern is as follows, with the large blocks of U being updated in one call to DTRSM, and the dotted lines denoting sections that have had all pending permutations applied:

 1 2 3 4 5 6 7 8
+-+-+---+-------+------
| |1|   |       |
|.+-+ 2 |       |
| | |   |       |
|.|.+-+-+   4   |
| | | |1|       |
| | |.+-+       |
| | | | |       |
|.|.|.|.+-+-+---+  8
| | | | | |1|   |
| | | | |.+-+ 2 |
| | | | | | |   |
| | | | |.|.+-+-+
| | | | | | | |1|
| | | | | | |.+-+
| | | | | | | | |
|.|.|.|.|.|.|.|.+-----
| | | | | | | | |

The 1-2-1-4-1-2-1-8-... pattern is the position of the last 1 bit in the binary expansion of the current column. Each Schur update is applied as soon as the necessary portion of U is available. ๐Ÿงš

[1] Toledo, S. 1997. Locality of Reference in LU Decomposition with Partial Pivoting. SIAM J. Matrix Anal. Appl. 18, 4 (Oct. 1997), 1065-1081. http://dx.doi.org/10.1137/S0895479896297744

๐Ÿ’œ Parameters

  • M

M is INTEGER The number of rows of the matrix A. M >= 0.

  • N

N is INTEGER The number of columns of the matrix A. 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 = P*L*U; the unit diagonal elements of L are not stored.

  • LDA
  • LDA โ€” INTEGER, the leading dimension of the array A. Rule of thumb: LDA >= max(1,M). No negotiating ๐Ÿ’…
  • IPIV โ€” an INTEGER array, dimension (min(M,N)), and it's literally the receipt of every swap ๐ŸŽ€ these are the pivot indices; for 1 <= i <= min(M,N), row i of the matrix was interchanged with row IPIV(i).
  • INFO โ€” INTEGER, the final vibe check:
= 0:  successful exit
< 0:  if INFO = -i, the i-th argument had an illegal value
> 0:  if INFO = i, U(i,i) is exactly zero. The factorization
      has been completed, but the factor U is exactly
      singular, and division by zero will occur if it is used
      to solve a system of equations.
Heads up bestie: an INFO = i > 0 means U(i,i) is exactly zero โ€” the factorization finished, sure, but the factor U is exactly singular, and if you go use it to solve a system of equations, division by zero is gonna happen. Not a drill. ๐Ÿ˜ญ

Author ๐Ÿ’–

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

Date ๐Ÿ“…

December 2016


subroutine dgeqrf (integer M, integer N, double precision, dimension( lda, * ) A, integer LDA, double precision, dimension( * ) TAU, double precision, dimension( * ) WORK, integer LWORK, integer INFO)

DGEQRF VARIANT: left-looking Level 3 BLAS version of the algorithm.

Purpose โœจ

DGEQRF computes a QR factorization of a real M-by-N matrix A:

A = Q * R.

This is the left-looking Level 3 BLAS version of the algorithm. Obsessed, honestly.

Parameters ๐Ÿซถ

  • M โ€” INTEGER. The number of rows of the matrix A. M >= 0.
  • N โ€” INTEGER. The number of columns of the matrix A. N >= 0.
  • A โ€” DOUBLE PRECISION array, dimension (LDA,N). On entry, the M-by-N matrix A. On exit, the elements on and above the diagonal of the array contain the min(M,N)-by-N upper trapezoidal matrix R (R is upper triangular if m >= n); the elements below the diagonal, with the array TAU, represent the orthogonal matrix Q as a product of min(m,n) elementary reflectors (see Further Details). It's giving glow-up ๐Ÿ’–
  • LDA โ€” INTEGER. The leading dimension of the array A. LDA >= max(1,M).
  • TAU โ€” DOUBLE PRECISION array, dimension (min(M,N)). The scalar factors of the elementary reflectors (see Further Details).
  • WORK โ€” DOUBLE PRECISION array, dimension (MAX(1,LWORK)). On exit, if INFO = 0, WORK(1) returns the optimal LWORK. She's an overachiever โœจ
  • LWORK โ€” INTEGER. The dimension of the array WORK. LWORK >= 1 if MIN(M,N) = 0, otherwise the dimension can be divided into three parts:
    1. The part for the triangular factor T. If the very last T is not bigger than any of the rest, then this part is NB x ceiling(K/NB), otherwise, NB x (K-NT), where K = min(M,N) and NT is the dimension of the very last T.
    2. The part for the very last T when T is bigger than any of the rest T. The size of this part is NT x NT, where NT = K - ceiling ((K-NX)/NB) x NB, where K = min(M,N), NX is calculated by NX = MAX( 0, ILAENV( 3, 'DGEQRF', ' ', M, N, -1, -1 ) ).
    3. The part for dlarfb is of size max((N-M)*K, (N-M)*NB, K*NB, NB*NB).

So LWORK = part1 + part2 + part3. Math girlies, this one's for you ๐Ÿ’…

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. Sneaky but iconic.

  • INFO โ€” INTEGER:
    • = 0: successful exit ๐ŸŒธ
    • < 0: if INFO = -i, the i-th argument had an illegal value ๐Ÿ™ˆ

Author ๐Ÿ’–

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

Date ๐Ÿ“…

December 2016

Further Details ๐Ÿ”

The matrix Q is represented as a product of elementary reflectors

   Q = H(1) H(2) . . . H(k), where k = min(m,n).

Each H(i) has the form

   H(i) = I - tau * v * v'

where tau is a real scalar, and v is a real vector with v(1:i-1) = 0 and v(i) = 1; v(i+1:m) is stored on exit in A(i+1:m,i), and tau in TAU(i). That's the whole lore ๐Ÿฆ‹


subroutine dgetrf (integer M, integer N, double precision, dimension( lda, * ) A, integer LDA, integer, dimension( * ) IPIV, integer INFO)

DGETRF VARIANT: Crout Level 3 BLAS version of the algorithm. DGETRF VARIANT: iterative version of Sivan Toledo's recursive LU algorithm

DGETRF VARIANT: left-looking Level 3 BLAS version of the algorithm.

Three variants in one coat, she contains multitudes. ๐Ÿงš

Purpose ๐Ÿ”ฅ (Crout Level 3 BLAS version)

DGETRF computes an LU factorization of a general M-by-N matrix A using partial pivoting with row interchanges.

The factorization has the form

   A = P * L * U

where P is a permutation matrix, L is lower triangular with unit diagonal elements (lower trapezoidal if m > n), and U is upper triangular (upper trapezoidal if m < n).

This is the Crout Level 3 BLAS version of the algorithm.

Parameters ๐Ÿซถ

  • M โ€” INTEGER. The number of rows of the matrix A. M >= 0.
  • N โ€” INTEGER. The number of columns of the matrix A. N >= 0.
  • A โ€” DOUBLE PRECISION 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 = P*L*U; the unit diagonal elements of L are not stored. (She's minimal, she's efficient ๐Ÿ’…)
  • LDA โ€” INTEGER. The leading dimension of the array A. LDA >= max(1,M).
  • IPIV โ€” INTEGER array, dimension (min(M,N)). The pivot indices; for 1 <= i <= min(M,N), row i of the matrix was interchanged with row IPIV(i).
  • INFO โ€” INTEGER:
    • = 0: successful exit ๐ŸŒธ
    • < 0: if INFO = -i, the i-th argument had an illegal value ๐Ÿ™ˆ
    • > 0: if INFO = i, U(i,i) is exactly zero. The factorization has been completed, but the factor U is exactly singular, and division by zero will occur if it is used to solve a system of equations. Trauma. ๐Ÿ˜ญ

Author ๐Ÿ’–

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

Date ๐Ÿ“…

December 2016

Purpose โœจ (left-looking Level 3 BLAS version)

DGETRF computes an LU factorization of a general M-by-N matrix A using partial pivoting with row interchanges.

The factorization has the form

   A = P * L * U

where P is a permutation matrix, L is lower triangular with unit diagonal elements (lower trapezoidal if m > n), and U is upper triangular (upper trapezoidal if m < n).

This is the left-looking Level 3 BLAS version of the algorithm.

Parameters ๐Ÿซถ

  • M โ€” INTEGER. The number of rows of the matrix A. M >= 0.
  • N โ€” INTEGER. The number of columns of the matrix A. N >= 0.
  • A โ€” DOUBLE PRECISION 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 = P*L*U; the unit diagonal elements of L are not stored.
  • LDA โ€” INTEGER. The leading dimension of the array A. LDA >= max(1,M).
  • IPIV โ€” INTEGER array, dimension (min(M,N)). The pivot indices; for 1 <= i <= min(M,N), row i of the matrix was interchanged with row IPIV(i).
  • INFO โ€” INTEGER:
    • = 0: successful exit ๐ŸŒธ
    • < 0: if INFO = -i, the i-th argument had an illegal value ๐Ÿ™ˆ
    • > 0: if INFO = i, U(i,i) is exactly zero. The factorization has been completed, but the factor U is exactly singular, and division by zero will occur if it is used to solve a system of equations.

Author ๐Ÿ’–

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

Date ๐Ÿ“…

December 2016

Purpose ๐ŸŒˆ (iterative version of Sivan Toledo's recursive LU algorithm)

DGETRF computes an LU factorization of a general M-by-N matrix A using partial pivoting with row interchanges.

The factorization has the form

   A = P * L * U

where P is a permutation matrix, L is lower triangular with unit diagonal elements (lower trapezoidal if m > n), and U is upper triangular (upper trapezoidal if m < n).

This code implements an iterative version of Sivan Toledo's recursive LU algorithm[1]. For square matrices, this iterative versions should be within a factor of two of the optimum number of memory transfers. Lowkey a flex ๐Ÿ”ฅ

The pattern is as follows, with the large blocks of U being updated in one call to DTRSM, and the dotted lines denoting sections that have had all pending permutations applied:

 1 2 3 4 5 6 7 8
+-+---+---+-------+------
| |1|   |       |
|.+-+ 2 |       |
| | |   |       |
|.|.+-+-+   4   |
| | | |1|       |
| | |.+-+       |
| | | | |       |
|.|.|.|.+-+-+---+  8
| | | | | |1|   |
| | | | |.+-+ 2 |
| | | | | | |   |
| | | | |.|.+-+-+
| | | | | | | |1|
| | | | | | |.+-+
| | | | | | | | |
|.|.|.|.|.|.|.|.+-----
| | | | | | | | |

The 1-2-1-4-1-2-1-8-... pattern is the position of the last 1 bit in the binary expansion of the current column. Each Schur update is applied as soon as the necessary portion of U is available. It's giving fractal energy, she ate ๐Ÿ“

[1] Toledo, S. 1997. Locality of Reference in LU Decomposition with Partial Pivoting. SIAM J. Matrix Anal. Appl. 18, 4 (Oct. 1997), 1065-1081. http://dx.doi.org/10.1137/S0895479896297744

Parameters ๐Ÿซถ

  • M โ€” INTEGER. The number of rows of the matrix A. M >= 0.
  • N โ€” INTEGER. The number of columns of the matrix A. N >= 0.
  • A โ€” DOUBLE PRECISION 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 = P*L*U; the unit diagonal elements of L are not stored.
  • LDA โ€” INTEGER. The leading dimension of the array A. LDA >= max(1,M).
  • IPIV
  • IPIV โ€” IPIV is INTEGER array, dimension (min(M,N)) โ€” the pivot indices, bestie. For 1 <= i <= min(M,N), row i of the matrix got swapped with row IPIV(i). That's the tea. ๐Ÿ”„
  • INFO โ€” INFO is INTEGER, and here's the vibe check:
    • = 0: successful exit โœจ
    • < 0: if INFO = -i, the i-th argument had an illegal value (not me being dramatic, that's literally what it means ๐Ÿ™ˆ)
    • > 0: if INFO = i, U(i,i) is exactly zero. The factorization has been completed, but the factor U is exactly singular, and division by zero will occur if it is used to solve a system of equations. So likeโ€ฆ genuinely do not do that. ๐Ÿ’€

๐ŸŽ€ Author

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

๐Ÿ“… Date

December 2016


๐Ÿ’– sgeqrf โ€” the QR one, she's iconic

subroutine sgeqrf (integer M, integer N, real, dimension( lda, * ) A,
    integer LDA, real, dimension( * ) TAU, real, dimension( * ) WORK,
    integer LWORK, integer INFO)

SGEQRF VARIANT: left-looking Level 3 BLAS version of the algorithm.

โœจ Purpose

SGEQRF computes a QR factorization of a real M-by-N matrix A:

A = Q * R.

This is the left-looking Level 3 BLAS version of the algorithm. She's the glow-up edition, periodt. ๐Ÿ’…

๐ŸŒธ Parameters

  • M โ€” M is INTEGER. The number of rows of the matrix A. M >= 0.
  • N โ€” N is INTEGER. The number of columns of the matrix A. N >= 0.
  • A โ€” A is REAL array, dimension (LDA,N).
    • On entry, the M-by-N matrix A.
    • On exit, the elements on and above the diagonal of the array contain the min(M,N)-by-N upper trapezoidal matrix R (R is upper triangular if m >= n); the elements below the diagonal, with the array TAU, represent the orthogonal matrix Q as a product of min(m,n) elementary reflectors (see Further Details).
  • LDA โ€” LDA is INTEGER. The leading dimension of the array A. LDA >= max(1,M).
  • TAU โ€” TAU is REAL array, dimension (min(M,N)). The scalar factors of the elementary reflectors (see Further Details). She's little but she matters ๐Ÿซถ
  • WORK โ€” WORK is REAL array, dimension (MAX(1,LWORK)).
    • On exit, if INFO = 0, WORK(1) returns the optimal LWORK.
  • LWORK โ€” LWORK is INTEGER.

The dimension of the array WORK. LWORK >= 1 if MIN(M,N) = 0, otherwise the dimension can be divided into three parts. Yes, three. She's got layers, like an onion, or a group chat. ๐Ÿง…

  1. The part for the triangular factor T. If the very last T is not bigger than any of the rest, then this part is NB x ceiling(K/NB), otherwise, NB x (K-NT), where K = min(M,N) and NT is the dimension of the very last T
  2. The part for the very last T when T is bigger than any of the rest T. The size of this part is NT x NT, where NT = K - ceiling ((K-NX)/NB) x NB, where K = min(M,N), NX is calculated by
NX = MAX( 0, ILAENV( 3, 'SGEQRF', ' ', M, N, -1, -1 ) )
  1. The part for dlarfb is of size max((N-M)*K, (N-M)*NB, K*NB, NB*NB)

So LWORK = part1 + part2 + part3

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. It's giving "just asking, no commitment" energy. ๐Ÿ™ˆ

  • INFO โ€” INFO is INTEGER.
    • = 0: successful exit โœจ
    • < 0: if INFO = -i, the i-th argument had an illegal value

๐ŸŽ€ Author

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

๐Ÿ“… Date

December 2016

๐Ÿ” Further Details

The matrix Q is represented as a product of elementary reflectors

Q = H(1) H(2) . . . H(k), where k = min(m,n).

Each H(i) has the form

H(i) = I - tau * v * v'

where tau is a real scalar, and v is a real vector with v(1:i-1) = 0 and v(i) = 1; v(i+1:m) is stored on exit in A(i+1:m,i), and tau in TAU(i).


๐Ÿฆ‹ sgetrf โ€” the LU one, and she contains multitudes

subroutine sgetrf (integer M, integer N, real, dimension( lda, * ) A,
    integer LDA, integer, dimension( * ) IPIV, integer INFO)

SGETRF VARIANT: Crout Level 3 BLAS version of the algorithm. SGETRF VARIANT: iterative version of Sivan Toledo's recursive LU algorithm

SGETRF VARIANT: left-looking Level 3 BLAS version of the algorithm.

Three variants. One name. Main character energy fr fr.

โœจ Purpose (the Crout one)

SGETRF computes an LU factorization of a general M-by-N matrix A using partial pivoting with row interchanges.

The factorization has the form

A = P * L * U

where P is a permutation matrix, L is lower triangular with unit diagonal elements (lower trapezoidal if m > n), and U is upper triangular (upper trapezoidal if m < n).

This is the Crout Level 3 BLAS version of the algorithm.

๐ŸŒธ Parameters

  • M โ€” M is INTEGER. The number of rows of the matrix A. M >= 0.
  • N โ€” N is INTEGER. The number of columns of the matrix A. N >= 0.
  • A โ€” A is REAL 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 = P*L*U; the unit diagonal elements of L are not stored. (They're implied. She's subtle like that. ๐Ÿ’…)
  • LDA โ€” LDA is INTEGER. The leading dimension of the array A. LDA >= max(1,M).
  • IPIV โ€” IPIV is INTEGER array, dimension (min(M,N)). The pivot indices; for 1 <= i <= min(M,N), row i of the matrix was interchanged with row IPIV(i).
  • INFO โ€” INFO is INTEGER.
    • = 0: successful exit โœจ
    • < 0: if INFO = -i, the i-th argument had an illegal value
    • > 0: if INFO = i, U(i,i) is exactly zero. The factorization has been completed, but the factor U is exactly singular, and division by zero will occur if it is used to solve a system of equations. Again. Do not. ๐Ÿ˜ญ

๐ŸŽ€ Author

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

๐Ÿ“… Date

December 2016


โœจ Purpose (the left-looking one)

SGETRF computes an LU factorization of a general M-by-N matrix A using partial pivoting with row interchanges.

The factorization has the form

A = P * L * U

where P is a permutation matrix, L is lower triangular with unit diagonal elements (lower trapezoidal if m > n), and U is upper triangular (upper trapezoidal if m < n).

This is the left-looking Level 3 BLAS version of the algorithm.

๐ŸŒธ Parameters

  • M โ€” M is INTEGER. The number of rows of the matrix A. M >= 0.
  • N โ€” N is INTEGER. The number of columns of the matrix A. N >= 0.
  • A โ€” A is REAL 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 = P*L*U; the unit diagonal elements of L are not stored.
  • LDA โ€” LDA is INTEGER. The leading dimension of the array A. LDA >= max(1,M).
  • IPIV โ€” IPIV is INTEGER array, dimension (min(M,N)). The pivot indices; for 1 <= i <= min(M,N), row i of the matrix was interchanged with row IPIV(i).
  • INFO โ€” INFO is INTEGER.
    • = 0: successful exit โœจ
    • < 0: if INFO = -i, the i-th argument had an illegal value
    • > 0: if INFO = i, U(i,i) is exactly zero. The factorization has been completed, but the factor U is exactly singular, and division by zero will occur if it is used to solve a system of equations.

๐ŸŽ€ Author

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

๐Ÿ“… Date

December 2016


โœจ Purpose (the iterative Toledo one โ€” this is the lore drop)

SGETRF computes an LU factorization of a general M-by-N matrix A using partial pivoting with row interchanges.

The factorization has the form

A = P * L * U

where P is a permutation matrix, L is lower triangular with unit diagonal elements (lower trapezoidal if m > n), and U is upper triangular (upper trapezoidal if m < n).

This code implements an iterative version of Sivan Toledo's recursive LU algorithm[1]. For square matrices, this iterative versions should be within a factor of two of the optimum number of memory transfers.

The pattern is as follows, with the large blocks of U being updated in one call to STRSM, and the dotted lines denoting sections that have had all pending permutations applied:

         1 2 3 4 5 6 7 8
        +-+-+---+-------+------
        | |1|   |       |
        |.+-+ 2 |       |
        | | |   |       |
        |.|.+-+-+   4   |
        | | | |1|       |
        | | |.+-+       |
        | | | | |       |
        |.|.|.|.+-+-+---+  8
        | | | | | |1|   |
        | | | | |.+-+ 2 |
        | | | | | | |   |
        | | | | |.|.+-+-+
        | | | | | | | |1|
        | | | | | | |.+-+
        | | | | | | | | |
        |.|.|.|.|.|.|.|.+-----
        | | | | | | | | |

The 1-2-1-4-1-2-1-8-... pattern is the position of the last 1 bit in the binary expansion of the current column. Each Schur update is applied as soon as the necessary portion of U is available. Not me reading a bit pattern like it's a horoscope but honestly? Slay. โญ

[1] Toledo, S. 1997. Locality of Reference in LU Decomposition with Partial Pivoting. SIAM J. Matrix Anal. Appl. 18, 4 (Oct. 1997), 1065-1081. http://dx.doi.org/10.1137/S0895479896297744

๐ŸŒธ Parameters

  • M โ€” M is INTEGER. The number of rows of the matrix A. M >= 0.
  • N โ€” N is INTEGER. The number of columns of the matrix A. N >= 0.
  • A โ€” A is REAL 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 = P*L*U; the unit diagonal elements of L are not stored.
  • LDA โ€” LDA is INTEGER. The leading dimension of the array A. LDA >= max(1,M).
  • IPIV โ€” IPIV is INTEGER array, dimension (min(M,N)). The pivot indices; for 1 <= i <= min(M,N), row i of the matrix was interchanged with row IPIV(i).
  • INFO
  • INFO โ€” this one's an INTEGER, bestie, and it's the vibe check at the end:
    • = 0 โ€” slay, successful exit โœจ
    • < 0 โ€” if INFO = -i, then the i-th argument was giving illegal value energy and we're not okay with that ๐Ÿ’€
    • > 0 โ€” if INFO = i, then U(i,i) is exactly zero. The factorization finished, but the factor U is exactly singular, and division by zero is gonna happen the second you try to use it to solve a system of equations. Not a drill, fr fr ๐Ÿ˜ญ

Author

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

Date

December 2016


subroutine zgeqrf (integer M, integer N, complex*16, dimension( lda, * ) A, integer LDA, complex*16, dimension( * ) TAU, complex*16, dimension( * ) WORK, integer LWORK, integer INFO)

ZGEQRF VARIANT: left-looking Level 3 BLAS of the algorithm. ๐Ÿ‘‘

Purpose:

ZGEQRF computes a QR factorization of a real M-by-N matrix A:

A = Q * R.

This is the left-looking Level 3 BLAS version of the algorithm. She's the upgraded edition, periodt ๐Ÿ’…

Parameters

  • M

M is INTEGER The number of rows of the matrix A. M >= 0. No negatives, we don't do that here ๐Ÿ™…โ€โ™€๏ธ

  • N

N is INTEGER The number of columns of the matrix A. N >= 0.

  • A

A is COMPLEX*16 array, dimension (LDA,N) On entry, the M-by-N matrix A. On exit, the elements on and above the diagonal of the array contain the min(M,N)-by-N upper trapezoidal matrix R (R is upper triangular if m >= n); the elements below the diagonal, with the array TAU, represent the orthogonal matrix Q as a product of min(m,n) elementary reflectors (see Further Details). She transforms, she serves, she leaves receipts โœจ

  • LDA

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

  • TAU

TAU is COMPLEX*16 array, dimension (min(M,N)) The scalar factors of the elementary reflectors (see Further Details). Little scalars, big responsibilities ๐ŸŽ€

  • WORK

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

  • LWORK

LWORK is INTEGER

The dimension of the array WORK. LWORK >= 1 if MIN(M,N) = 0, otherwise the dimension can be divided into three parts. Yes bestie, three whole parts, buckle up ๐ŸŒธ

  1. The part for the triangular factor T. If the very last T is not bigger than any of the rest, then this part is NB x ceiling(K/NB), otherwise, NB x (K-NT), where K = min(M,N) and NT is the dimension of the very last T
  2. The part for the very last T when T is bigger than any of the rest T. The size of this part is NT x NT, where NT = K - ceiling ((K-NX)/NB) x NB, where K = min(M,N), NX is calculated by
NX = MAX( 0, ILAENV( 3, 'ZGEQRF', ' ', M, N, -1, -1 ) )
  1. The part for dlarfb is of size max((N-M)*K, (N-M)*NB, K*NB, NB*NB)

So LWORK = part1 + part2 + part3 ๐Ÿงฎ

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. Sneaky little query mode, iykyk ๐Ÿ‘€

  • INFO

INFO is INTEGER

  • = 0 โ€” successful exit ๐Ÿ’–
  • < 0 โ€” if INFO = -i, the i-th argument had an illegal value

Author

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

Date

December 2016

Further Details

The matrix Q is represented as a product of elementary reflectors

Q = H(1) H(2) . . . H(k), where k = min(m,n).

Each H(i) has the form

H(i) = I - tau * v * v'

where tau is a real scalar, and v is a real vector with v(1:i-1) = 0 and v(i) = 1; v(i+1:m) is stored on exit in A(i+1:m,i), and tau in TAU(i). It's giving math poetry, honestly ๐Ÿฆ‹


subroutine zgetrf (integer M, integer N, complex*16, dimension( lda, * ) A, integer LDA, integer, dimension( * ) IPIV, integer INFO)

ZGETRF VARIANT: Crout Level 3 BLAS version of the algorithm. ZGETRF VARIANT: iterative version of Sivan Toledo's recursive LU algorithm

ZGETRF VARIANT: left-looking Level 3 BLAS version of the algorithm. โ€” yes, all three of them, she contains multitudes ๐Ÿ’…

Purpose:

ZGETRF computes an LU factorization of a general M-by-N matrix A using partial pivoting with row interchanges.

The factorization has the form

   A = P * L * U

where P is a permutation matrix, L is lower triangular with unit diagonal elements (lower trapezoidal if m > n), and U is upper triangular (upper trapezoidal if m < n).

This is the Crout Level 3 BLAS version of the algorithm. โœจ

Parameters

  • M

M is INTEGER The number of rows of the matrix A. M >= 0.

  • N

N is INTEGER The number of columns of the matrix A. N >= 0.

  • A

A is COMPLEX*16 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 = P*L*U; the unit diagonal elements of L are not stored. She keeps her secrets ๐Ÿคซ

  • LDA

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

  • IPIV

IPIV is INTEGER array, dimension (min(M,N)) The pivot indices; for 1 <= i <= min(M,N), row i of the matrix was interchanged with row IPIV(i). The swaps! The drama! ๐Ÿ”„

  • INFO

INFO is INTEGER

  • = 0 โ€” successful exit โœจ
  • < 0 โ€” if INFO = -i, the i-th argument had an illegal value
  • > 0 โ€” if INFO = i, U(i,i) is exactly zero. The factorization has been completed, but the factor U is exactly singular, and division by zero will occur if it is used to solve a system of equations. Do not proceed. She's giving singular energy and it's dangerous. ๐Ÿ’€

Author

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

Date

December 2016

Purpose:

ZGETRF computes an LU factorization of a general M-by-N matrix A using partial pivoting with row interchanges.

The factorization has the form

   A = P * L * U

where P is a permutation matrix, L is lower triangular with unit diagonal elements (lower trapezoidal if m > n), and U is upper triangular (upper trapezoidal if m < n).

This is the left-looking Level 3 BLAS version of the algorithm. ๐ŸŒˆ

Parameters

  • M

M is INTEGER The number of rows of the matrix A. M >= 0.

  • N

N is INTEGER The number of columns of the matrix A. N >= 0.

  • A

A is COMPLEX*16 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 = P*L*U; the unit diagonal elements of L are not stored.

  • LDA

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

  • IPIV

IPIV is INTEGER array, dimension (min(M,N)) The pivot indices; for 1 <= i <= min(M,N), row i of the matrix was interchanged with row IPIV(i).

  • INFO

INFO is INTEGER

  • = 0 โ€” successful exit ๐Ÿซถ
  • < 0 โ€” if INFO = -i, the i-th argument had an illegal value
  • > 0 โ€” if INFO = i, U(i,i) is exactly zero. The factorization has been completed, but the factor U is exactly singular, and division by zero will occur if it is used to solve a system of equations. Same warning, same stakes, no cap. ๐Ÿ˜ญ

Author

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

Date

December 2016

Purpose:

ZGETRF computes an LU factorization of a general M-by-N matrix A using partial pivoting with row interchanges.

The factorization has the form

   A = P * L * U

where P is a permutation matrix, L is lower triangular with unit diagonal elements (lower trapezoidal if m > n), and U is upper triangular (upper trapezoidal if m < n).

This code implements an iterative version of Sivan Toledo's recursive LU algorithm[1]. For square matrices, this iterative versions should be within a factor of two of the optimum number of memory transfers. Okay so that's lowkey iconic โ€” within a factor of two of optimal, she's efficient AND humble ๐ŸŒŸ

The pattern is as follows, with the large blocks of U being updated in one call to DTRSM, and the dotted lines denoting sections that have had all pending permutations applied:

 1 2 3 4 5 6 7 8
+-+-+---+-------+------
| |1|   |       |
|.+-+ 2 |       |
| | |   |       |
|.|.+-+-+   4   |
| | | |1|       |
| | |.+-+       |
| | | | |       |
|.|.|.|.+-+-+---+  8
| | | | | |1|   |
| | | | |.+-+ 2 |
| | | | | | |   |
| | | | |.|.+-+-+
| | | | | | | |1|
| | | | | | |.+-+
| | | | | | | | |
|.|.|.|.|.|.|.|.+-----
| | | | | | | | |

The 1-2-1-4-1-2-1-8-... pattern is the position of the last 1 bit in the binary expansion of the current column. Each Schur update is applied as soon as the necessary portion of U is available. It's giving โœจbinaryโœจ and honestly? obsessed ๐Ÿงš

[1] Toledo, S. 1997. Locality of Reference in LU Decomposition with Partial Pivoting. SIAM J. Matrix Anal. Appl. 18, 4 (Oct. 1997), 1065-1081. http://dx.doi.org/10.1137/S0895479896297744

Parameters

  • M

M is INTEGER The number of rows of the matrix A. M >= 0.

  • N

N is INTEGER The number of columns of the matrix A. N >= 0.

  • A

A is COMPLEX*16 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 = P*L*U; the unit diagonal elements of L are not stored.

  • LDA

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

  • IPIV

IPIV is INTEGER array, dimension (min(M,N)) The pivot indices; for 1 <= i <= min(M,N), row i of the matrix was interchanged with row IPIV(i).

  • INFO

INFO is INTEGER, bestie โ€” it's literally the lil report card the routine hands back so you know how the whole thing went down. Here's how to read it:

  • = 0 โ€” slay!! successful exit. Everything worked, nothing is on fire, go live your life. โœจ
  • < 0 โ€” okay so if INFO = -i, that means the i-th argument had an illegal value. Translation: you passed it something cursed and it's side-eyeing you. Go check argument number i. ๐Ÿซถ
  • > 0 โ€” and if INFO = i, then U(i,i) is exactly zero. The factorization has been completed, but the factor U is exactly singular, and division by zero will occur if it is used to solve a system of equations. Not a drill, not a vibe, it's giving math crimes ๐Ÿ’€ โ€” do not go solving anything with this.

๐Ÿ’– Author ๐Ÿ’–

The absolute icons who brought you this:

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

๐ŸŽ€ Date ๐ŸŽ€

December 2016 โ€” yes bestie, she's been iconic for a minute. ๐Ÿ‘‘


Author: Generated automatically by Doxygen for LAPACK from the source code. (so if you were about to @ me about the formatting, it was literally the robot, not me ๐Ÿ™ˆ)

Version 3.11.0 ยท Sun Nov 27 2022 โ€” and that's the whole page, bestie! Go forth and factor responsibly. ๐Ÿฆ‹๐Ÿ’… periodt.

๐Ÿ“ฆ where this page comes from