/home/abui.../ctpmqrt.f(3)

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

🌸 ctpmqrt.f β€” LAPACK Library Functions Manual 🌸

okay bestie, so this page lives at /home/abui.../ctpmqrt.f(3) in the LAPACK Library Functions Manual, and it's literally all about one single icon of a subroutine. she's giving main character energy and she does one thing: she applies a complex orthogonal matrix Q to a general complex matrix C. and C is actually two blocks, A and B. periodt. πŸ’…


✨ NAME ✨

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

like, that's the whole name. it's a whole path. she's not mysterious, she's just filed very specifically. πŸŽ€


πŸ¦‹ SYNOPSIS πŸ¦‹

Functions/Subroutines

subroutine CTPMQRT (side, trans, m, n, k, l, nb, v, ldv, t, ldt, a, lda,
    b, ldb, work, info)

CTPMQRT


πŸ‘‘ Function/Subroutine Documentation πŸ‘‘

subroutine CTPMQRT (character side, character trans, integer m, integer n,
    integer k, integer l, integer nb, complex, dimension( ldv, * ) v,
    integer ldv, complex, dimension( ldt, * ) t, integer ldt, complex,
    dimension( lda, * ) a, integer lda, complex, dimension( ldb, * ) b,
    integer ldb, complex, dimension( * ) work, integer info)

CTPMQRT β€” yes, again. she said her name twice, she's confident, let her have it. ✨

🌈 Purpose 🌈

!> CTPMQRT applies a complex orthogonal matrix Q obtained from a !> complex block reflector H to a general !> complex matrix C, which consists of two blocks A and B. !>

translation: Q came from a complex block reflector H, and now she's getting applied to a general complex matrix C β€” which is lowkey just two blocks, A and B, living their lives stacked or side-by-side depending on the vibe. πŸ”₯


πŸ’– Parameters πŸ’–

  • SIDE β€” SIDE is CHARACTER*1 🫢
    • = 'L': apply Q or Q**H from the Left;
    • = 'R': apply Q or Q**H from the Right.
  • TRANS β€” TRANS is CHARACTER*1 πŸ¦‹
    • = 'N': No transpose, apply Q;
    • = 'C': Conjugate transpose, apply Q**H.
  • M β€” M is INTEGER. the number of rows of the matrix B. M >= 0. not me measuring the height of B 😭
  • N β€” N is INTEGER. the number of columns of the matrix B. N >= 0. and this is her width. both non-negative, we respect that. πŸŽ€
  • K β€” K is INTEGER. the number of elementary reflectors whose product defines the matrix Q. it's giving "built from pieces" and honestly? iconic. πŸ‘‘
  • L β€” L is INTEGER. the order of the trapezoidal part of V. K >= L >= 0. see Further Details, babes, it's down there. πŸ’œ
  • NB β€” NB is INTEGER. the block size used for the storage of T. K >= NB >= 1. 🚨 and listen: this must be the same value of NB used to generate T in CTPQRT. no cap, it has to match, do not freestyle this one.
  • V β€” V is COMPLEX array, dimension (LDV,K). the i-th column must contain the vector which defines the elementary reflector H(i), for i = 1,2,...,k, as returned by CTPQRT in B. see Further Details. 🌸
  • LDV β€” LDV is INTEGER. the leading dimension of the array V.
    • If SIDE = 'L', LDV >= max(1,M);
    • if SIDE = 'R', LDV >= max(1,N).
  • T β€” T is COMPLEX array, dimension (LDT,K). the upper triangular factors of the block reflectors as returned by CTPQRT, stored as a NB-by-K matrix. πŸ’«
  • LDT β€” LDT is INTEGER. the leading dimension of the array T. LDT >= NB.
  • A β€” A is COMPLEX array, dimension
    • (LDA,N) if SIDE = 'L' or
    • (LDA,K) if SIDE = 'R'

On entry: the K-by-N or M-by-K matrix A. On exit: A is overwritten by the corresponding block of Q*C or Q**H*C or C*Q or C*Q**H. See Further Details. πŸͺž (yes she comes back different, that's the whole point)

  • LDA β€” LDA is INTEGER. the leading dimension of the array A. ok so heads up, word for word from the source: If SIDE = 'L', LDC >= max(1,K); If SIDE = 'R', LDC >= max(1,M). 🫢 that's literally what it says, I'm not editing the queen's handwriting.
  • B β€” B is COMPLEX array, dimension (LDB,N). On entry, the M-by-N matrix B. On exit, B is overwritten by the corresponding block of Q*C or Q**H*C or C*Q or C*Q**H. See Further Details. πŸ¦‹
  • LDB β€” LDB is INTEGER. the leading dimension of the array B. LDB >= max(1,M). that's it, that's the rule.
  • WORK β€” WORK is COMPLEX array. the dimension of WORK is N*NB if SIDE = 'L', or M*NB if SIDE = 'R'. ✨ size her correctly pls, she's working.
  • INFO β€” INFO is INTEGER πŸ“£
    • = 0: successful exit (slay)
    • < 0: if INFO = -i, the i-th argument had an illegal value (oop β€” go check argument number i)

🌟 Author 🌟

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

the whole friend group co-signed this one. 🫢


πŸ’… Further Details: πŸ’…

!> The columns of the pentagonal matrix V contain the elementary reflectors !> H(1), H(2), ..., H(K); V is composed of a rectangular block V1 and a !> trapezoidal block V2: > > V = [V1] > [V2]. > > The size of the trapezoidal block V2 is determined by the parameter L, > where 0 <= L <= K; V2 is upper trapezoidal, consisting of the first L > rows of a K-by-K upper triangular matrix. If L=K, V2 is upper triangular; > if L=0, there is no trapezoidal block, hence V = V1 is rectangular. > > If SIDE = 'L': C = [A] where A is K-by-N, B is M-by-N and V is M-by-K. > [B] > > If SIDE = 'R': C = [A B] where A is M-by-K, B is M-by-N and V is N-by-K. > > The complex orthogonal matrix Q is formed from V and T. > > If TRANS='N' and SIDE='L', C is on exit replaced with Q * C. > > If TRANS='C' and SIDE='L', C is on exit replaced with Q**H * C. > > If TRANS='N' and SIDE='R', C is on exit replaced with C * Q. > > If TRANS='C' and SIDE='R', C is on exit replaced with C * Q**H. >

so real quick, the shapes recap because I know you're a visual learner bestie 🧚

  • SIDE = 'L' β†’ C is stacked, A on top of B. A is K-by-N, B is M-by-N, V is M-by-K.
  • SIDE = 'R' β†’ C is side-by-side, [A B]. A is M-by-K, B is M-by-N, V is N-by-K.
  • Q itself is formed from V and T. those two are a package deal, iykyk. πŸ’œ

and the four exit vibes, one more time so it's crystal:

  • TRANS='N' + SIDE='L' β†’ Q * C
  • TRANS='C' + SIDE='L' β†’ Q**H * C
  • TRANS='N' + SIDE='R' β†’ C * Q
  • TRANS='C' + SIDE='R' β†’ C * Q**H

πŸ” Definition πŸ”

Definition at line 214 of file ctpmqrt.f. ⭐

Author (the meta one)

Generated automatically by Doxygen for LAPACK from the source code. πŸ€– she was assembled by the robots, and she ate.


🌈 that's the whole page, no crumbs left. shoutout to LAPACK, Version 3.12.0, and to the footer date stamp on /home/abui.../ctpmqrt.f(3) β€” mwah, go apply some matrices, bestie. πŸ’–βœ¨πŸŽ€

πŸ“¦ where this page comes from