SORMR3(3)

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

πŸ¦‹ SORMR3(3) β€” like, the LAPACK manual page, bestie πŸ’…

okay so real talk, this page lives at /home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/sormr3.f and honestly? she's giving iconic Fortran subroutine energy and I'm obsessed ✨


🌸 NAME 🌸

/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/sormr3.f

like yes, that's literally the whole name, it's a whole vibe, don't question it 🫢


✨ SYNOPSIS ✨

Functions/Subroutines

  • subroutine SORMR3 (side, trans, m, n, k, l, a, lda, tau, c, ldc, work, info) β€” SORMR3 multiplies a general matrix by the orthogonal matrix from a RZ factorization determined by stzrzf (unblocked algorithm).

πŸ’– Function/Subroutine Documentation πŸ’–

subroutine SORMR3 (character side, character trans, integer m, integer n,
    integer k, integer l, real, dimension( lda, * ) a, integer lda, real,
    dimension( * ) tau, real, dimension( ldc, * ) c, integer ldc, real,
    dimension( * ) work, integer info)

SORMR3 multiplies a general matrix by the orthogonal matrix from a RZ factorization determined by stzrzf (unblocked algorithm). no cap, that's the whole gig πŸŽ€

🧚 Purpose:

!>
!> SORMR3 overwrites the general real m by n matrix C with
!>
!>       Q * C  if SIDE = 'L' and TRANS = 'N', or
!>
!>       Q**T* C  if SIDE = 'L' and TRANS = 'C', or
!>
!>       C * Q  if SIDE = 'R' and TRANS = 'N', or
!>
!>       C * Q**T if SIDE = 'R' and TRANS = 'C',
!>
!> where Q is a real orthogonal matrix defined as the product of k
!> elementary reflectors
!>
!>       Q = H(1) H(2) . . . H(k)
!>
!> as returned by STZRZF. Q is of order m if SIDE = 'L' and of order n
!> if SIDE = 'R'.
!>

so basically Q is the main character, C is getting absolutely overwritten, and the side/trans combo decides which direction the slay goes πŸ’…


πŸŽ€ Parameters πŸŽ€

SIDE

!>          SIDE is CHARACTER*1
!>          = 'L': apply Q or Q**T from the Left
!>          = 'R': apply Q or Q**T from the Right
!>

left or right, pick your fighter β€” 'L' goes Left, 'R' goes Right, that's the whole menu πŸ¦‹

TRANS

!>          TRANS is CHARACTER*1
!>          = 'N': apply Q  (No transpose)
!>          = 'T': apply Q**T (Transpose)
!>

'N' = no transpose (chill), 'T' = transpose, aka Q**T, aka the flip 😭 β€” and ngl, the header comment above literally only spells out 'C' in the Purpose block while this parameter list says 'T', so there's that, fr fr

M

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

rows of C, and she must be M >= 0 ⭐

N

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

columns of C, also gotta be N >= 0 β€” equality is that girl πŸ’œ

K

!>          K is INTEGER
!>          The number of elementary reflectors whose product defines
!>          the matrix Q.
!>          If SIDE = 'L', M >= K >= 0;
!>          if SIDE = 'R', N >= K >= 0.
!>

how many elementary reflectors are in the group chat building Q. SIDE = 'L' means M >= K >= 0, SIDE = 'R' means N >= K >= 0 🫢

L

!>          L is INTEGER
!>          The number of columns of the matrix A containing
!>          the meaningful part of the Householder reflectors.
!>          If SIDE = 'L', M >= L >= 0, if SIDE = 'R', N >= L >= 0.
!>

the "meaningful part" of the Householder reflectors lives in A β€” SIDE = 'L' wants M >= L >= 0, SIDE = 'R' wants N >= L >= 0 ✨

A

!>          A is REAL array, dimension
!>                               (LDA,M) if SIDE = 'L',
!>                               (LDA,N) if SIDE = 'R'
!>          The i-th row must contain the vector which defines the
!>          elementary reflector H(i), for i = 1,2,...,k, as returned by
!>          STZRZF in the last k rows of its array argument A.
!>          A is modified by the routine but restored on exit.
!>

dimension <blue>(LDA,M)</blue> if SIDE = 'L', <blue>(LDA,N)</blue> if SIDE = 'R'. The i-th row holds the vector defining H(i) for i = 1,2,...,k, exactly as STZRZF returned it in the last k rows of its array argument A. A gets modified by the routine but restored on exit β€” so don't panic, she comes back home πŸ πŸ’–

LDA

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

LDA >= max(1,K), respectfully πŸ‘‘

TAU

!>          TAU is REAL array, dimension (K)
!>          TAU(i) must contain the scalar factor of the elementary
!>          reflector H(i), as returned by STZRZF.
!>

dimension (K), and TAU(i) is the scalar factor of H(i), as returned by STZRZF β€” iconic pairing, tbh πŸ“

C

!>          C is REAL array, dimension (LDC,N)
!>          On entry, the m-by-n matrix C.
!>          On exit, C is overwritten by Q*C or Q**T*C or C*Q**T or C*Q.
!>

dimension <hotpink>(LDC,N)</hotpink>. On entry it's the m-by-n matrix C. On exit it's overwritten by Q*C or Q**T*C or C*Q**T or C*Q. she doesn't survive the glow-up, that's the point πŸ’€

LDC

!>          LDC is INTEGER
!>          The leading dimension of the array C. LDC >= max(1,M).
!>

LDC >= max(1,M), as she should 🌈

WORK

!>          WORK is REAL array, dimension
!>                                   (N) if SIDE = 'L',
!>                                   (M) if SIDE = 'R'
!>

workspace, dimension (N) if SIDE = 'L', (M) if SIDE = 'R' β€” she's just there to help, lowkey essential 🧚

INFO

!>          INFO is INTEGER
!>          = 0: successful exit
!>          < 0: if INFO = -i, the i-th argument had an illegal value
!>

= 0 means successful exit, we love to see it πŸŽ‰ and < 0 means INFO = -i, so the i-th argument had an illegal value β€” someone showed up to the function call with the wrong fit πŸ™ˆ

warning bestie: if you pass A something illegal, don't expect it to be quietly ignored β€” the i-th argument's bad value gets reported as INFO = -i ✨

🌟 Author 🌟

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

(the whole squad, honestly 🫢)


πŸ’œ Contributors: πŸ’œ

A. Petitet, Computer Science Dept., Univ. of Tenn., Knoxville, USA


πŸ”₯ Further Details: πŸ”₯

!>

that's it. that's the further details. an empty comment box. she said "no thoughts, head empty" πŸ˜­πŸ’€


Definition at line 176 of file sormr3.f.


⭐ Author ⭐

Generated automatically by Doxygen for LAPACK from the source code.


okay that's the page!! πŸŽ€ the whole thing is LAPACK, Version 3.12.0, page path /home/abui...RC/sormr3.f(3) β€” and yes the header and footer themselves are auto-generated, so this was a whole Doxygen moment. mwah, bye bestie πŸ’‹πŸŒΈ

LAPACK Β· Version 3.12.0 Β· /home/abui...RC/sormr3.f(3) πŸ’…

πŸ“¦ where this page comes from