SRC/dorgtsqr.f(3)
π SRC/dorgtsqr.f β DORGTSQR, bestie edition π
okay so this is a page from the Library Functions Manual for SRC/dorgtsqr.f, and honestly? she's iconic. let's get into it β¨
β¨ NAME β¨
SRC/dorgtsqr.f β the file, the myth, the legend π¦
πΈ SYNOPSIS πΈ
Functions/Subroutines
subroutine dorgtsqr (m, n, mb, nb, a, lda, t, ldt, work, lwork, info)
DORGTSQR β yes that's her name, no notes π
π 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 β main character energy fr fr π«Ά
π Purpose π
!>!> DORGTSQR generates an M-by-N real matrix Q_out with orthonormal columns,!> which are the first N columns of a product of real orthogonal!> matrices of order M which are returned by DLATSQR!>!> Q_out = first_N_columns_of( Q(1)_in * Q(2)_in * ... * Q(k)_in ).!>!> See the documentation for DLATSQR.!>
like, she literally builds you an orthonormal Q_out out of the first N columns of a whole product of real orthogonal matrices of order M courtesy of DLATSQR. it's giving β¨assemblyβ¨. and yes, go read the DLATSQR docs too, iykyk π
π Parameters π
π M
!> M is INTEGER!> The number of rows of the matrix A. M >= 0.!>
the number of rows of A. gotta be M >= 0, no cap.
πΈ N
!> N is INTEGER!> The number of columns of the matrix A. M >= N >= 0.!>
the number of columns of A. and it's M >= N >= 0 β she's constrained and she knows it π
π¦ MB
!> MB is INTEGER!> The row block size used by DLATSQR to return!> arrays A and T. MB > N.!> (Note that if MB > M, then M is used instead of MB!> as the row block size).!>
the row block size that DLATSQR uses to hand back the arrays A and T. important: MB > N. and lowkey a plot twist β if MB > M, then M gets used instead of MB as the row block size π (like, she adapts. love that for her.)
π§ NB
!> NB is INTEGER!> The column block size used by DLATSQR to return!> arrays A and T. NB >= 1.!> (Note that if NB > N, then N is used instead of NB!> as the column block size).!>
the column block size DLATSQR uses to return A and T. NB >= 1. and same energy as above: if NB > N, then N is used instead of NB as the column block size, periodt π
β A
!> A is DOUBLE PRECISION array, dimension (LDA,N)!>!> On entry:!>!> The elements on and above the diagonal are not accessed.!> 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.!>
she's a DOUBLE PRECISION array of dimension (LDA,N) and she has two whole eras:
on entry π β the stuff on and above the diagonal? not accessed, don't worry about her. the elements below the diagonal are the unit lower-trapezoidal blocked matrix V computed by DLATSQR, which defines the input matrices Q_in(k) (the ones on the diagonal are not stored, fyi). it's the same format as the output A below the diagonal in DLATSQR π
on exit β¨ β A now contains an M-by-N orthonormal matrix Q_out, i.e. the columns of A are orthogonal unit vectors. glow-up complete, she ate π₯
π LDA
!> LDA is INTEGER!> The leading dimension of the array A. LDA >= max(1,M).!>
the leading dimension of A. rule is LDA >= max(1,M). respect the boundary π«Ά
π T
!> T is DOUBLE PRECISION array,!> dimension (LDT, N * NIRB)!> where NIRB = Number_of_input_row_blocks!> = MAX( 1, CEIL((M-N)/(MB-N)) )!> Let NICB = Number_of_input_col_blocks!> = CEIL(N/NB)!>!> 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 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).!>
a 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)
these are the upper-triangular block reflectors that 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 those NIRB block reflector sequences lives 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, iykyk π¦
πΊ LDT
!> LDT is INTEGER!> The leading dimension of the array T.!> LDT >= max(1,min(NB1,N)).!>
the leading dimension of T, and the rule is LDT >= max(1,min(NB1,N)). yes that says NB1, she said what she said π
π₯ WORK
!> (workspace) DOUBLE PRECISION array, dimension (MAX(2,LWORK))!> On exit, if INFO = 0, WORK(1) returns the optimal LWORK.!>
the workspace π οΈ β a DOUBLE PRECISION array of dimension (MAX(2,LWORK)). on exit, if INFO = 0, then WORK(1) returns the optimal LWORK. she's helpful like that.
π 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.!>
the dimension of WORK. rule: LWORK >= (M+NB)*N. and plot twist π β if LWORK = -1, then a workspace query is assumed. the routine only calculates the optimal size of the WORK array, returns that value as the first entry of WORK, and no error message related to LWORK gets issued by XERBLA. she's just asking questions, not starting drama π
π§ INFO
!> INFO is INTEGER!> = 0: successful exit!> < 0: if INFO = -i, the i-th argument had an illegal value!>
the vibes report:
= 0: successful exit, we slayed β< 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.
the whole squad, honestly π
π Contributors: π
!>!> November 2019, Igor Kozachenko,!> Computer Science Division,!> University of California, Berkeley!>!>
shoutout Igor, November 2019, Computer Science Division, University of California, Berkeley β king behavior π
Definition at line 174 of file dorgtsqr.f. go look, it's literally right there πΈ
β Author β
Generated automatically by Doxygen for LAPACK from the source code. (yes, the robot wrote this, and she ate π€π )
and that's the whole page, bestie π¦π ok bye β this masterpiece came to you from LAPACK, Version 3.12.0, dated SRC/dorgtsqr.f(3), with love from the auto-generated Doxygen files πβ¨
π¦ 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