DORGTSQR(3)

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

πŸŽ€ NAME πŸŽ€

/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/dorgtsqr.f β€” bestie, that's the whole file path, it's giving full government name energy 😭 but lowkey that is how this page introduces itself. It's a DORGTSQR situation and we're gonna get into it.


✨ SYNOPSIS ✨

Functions/Subroutines

subroutine DORGTSQR (m, n, mb, nb, a, lda, t, ldt, work, lwork, info)

DORGTSQR β€” that's the whole vibe check right there πŸ’…


🌸 Function/Subroutine Documentation 🌸

subroutine DORGTSQR (integer m, integer n, integer mb, integer nb, double
    precision, dimension( lda, * ) a, integer lda, double precision,
    dimension( ldt, * ) t, integer ldt, double precision, dimension( * )
    work, integer lwork, integer info)

DORGTSQR πŸ’– (yes, the signature gets repeated, that's just how this page rolls, no cap)

πŸ¦‹ Purpose πŸ¦‹

Okay so here's the tea: DORGTSQR generates an M-by-N real matrix Q_out with orthonormal columns. Those columns are the first N columns of a product of real orthogonal matrices of order M that DLATSQR returns. Not me being dramatic, that's literally the spec:

Q_out = first_N_columns_of( Q(1)_in * Q(2)_in * ... * Q(k)_in ).

Go check the documentation for DLATSQR for the full backstory, iykyk πŸ‘‘

🧚 Parameters 🧚

M

M is INTEGER. The number of rows of the matrix A. M >= 0. Main character dimension fr fr.

N

N is INTEGER. The number of columns of the matrix A. M >= N >= 0. Slay, note the nesting: M is the ceiling and N is chillin' under it.

MB

MB is INTEGER. The row block size used by DLATSQR to return arrays A and T. MB > N. (Heads up: if MB > M, then M is used instead of MB as the row block size β€” the routine just quietly caps it, iconic πŸ™ˆ)

NB

NB is INTEGER. The column block size used by DLATSQR to return arrays A and T. NB >= 1. (Also heads up: if NB > N, then N is used instead of NB as the column block size β€” same energy, different axis πŸ’«)

A

A is DOUBLE PRECISION array, dimension (LDA,N).

On entry:

  • The elements on and above the diagonal are not accessed. We literally do not look at them, they're not invited to the party πŸ’€
  • The elements below the diagonal represent the unit lower-trapezoidal blocked matrix V computed by DLATSQR that defines the input matrices Q_in(k) (ones on the diagonal are not stored) β€” same format as the output A below the diagonal in DLATSQR πŸ‘‘

On exit:

  • The array A contains an M-by-N orthonormal matrix Q_out, i.e. the columns of A are orthogonal unit vectors. Gorgeous. Perfect. No notes ✨

LDA

LDA is INTEGER. The leading dimension of the array A. LDA >= max(1,M). Respect the minimum or catch these hands 🫢

T

T is DOUBLE PRECISION array, dimension (LDT, N * NIRB) where

NIRB = Number_of_input_row_blocks
     = MAX( 1, CEIL((M-N)/(MB-N)) )

and let NICB = Number_of_input_col_blocks = CEIL(N/NB). Cute little acronyms, we love a named quantity πŸ’œ

The upper-triangular block reflectors used to define the input matrices Q_in(k), k=(1:NIRB*NICB). The block reflectors are stored in compact form in NIRB block reflector sequences. Each of the NIRB block reflector sequences is stored in a larger NB-by-N column block of T and consists of NICB smaller NB-by-NB upper-triangular column blocks. Same format as the output T in DLATSQR. It's giving nested storage, it's giving matryoshka doll, and honestly? Ate. πŸ”₯

LDT

LDT is INTEGER. The leading dimension of the array T. LDT >= max(1,min(NB1,N)). (Yes, NB1 β€” that's exactly what the source says, we do not correct the source, we respect the source πŸ™)

WORK

(workspace) DOUBLE PRECISION array, dimension (MAX(2,LWORK)). On exit, if INFO = 0, WORK(1) returns the optimal LWORK. Bestie's got the receipts for your next allocation ✨

LWORK

LWORK is INTEGER. The dimension of the array WORK. LWORK >= (M+NB)*N. 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 β€” so don't expect to be scolded, it's just doing recon πŸ”

INFO

INFO is INTEGER.

  • = 0: successful exit πŸŽ‰ slay
  • < 0: if INFO = -i, the i-th argument had an illegal value πŸ’€ somebody passed something cursed

πŸ‘‘ Author πŸ‘‘

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

The whole squad showed up πŸ’œ

🌈 Contributors: 🌈

  • November 2019, Igor Kozachenko, Computer Science Division, University of California, Berkeley

Shoutout Igor, dropping contributions in November 2019 and we're still thanking them 🫢

Definition at line 174 of file dorgtsqr.f. That's the exact coordinate, go look if you don't believe me πŸŽ€


πŸ’… Author πŸ’…

Generated automatically by Doxygen for LAPACK from the source code. Not a human, just a robot doing its little robot thing πŸ€–βœ¨ (we still appreciate you, Doxygen)


LAPACK Β· Version 3.12.0 Β· /home/abui.../dorgtsqr.f(3) β€” okay that's the whole page bestie, mwah, go write some orthonormal columns πŸ˜˜πŸ’–πŸ¦‹

πŸ“¦ where this page comes from