SRC/dorgtsqr.f(3)

πŸ“¦
version 3.12.1 Β· 3 versions
, in arch rolling

πŸ’… 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: 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.

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