gemlq(3)

🌸 gemlq(3) β€” Library Functions Manual 🌸

okay bestie so this one is gemlq, straight out of section 3 (Library Functions Manual), and it's one of those LAPACK pages where you get the whole family in one go. Sit down, hydrate, we're doing this πŸ’…


✨ NAME ✨

gemlq β€” gemlq: multiply by Q from gelq πŸŒ€

✨ SYNOPSIS ✨

Functions

Four subroutines, one for each flavour. Not me getting four whole routines 😭 every precision got its own:

  • subroutine cgemlq (side, trans, m, n, k, a, lda, t, tsize, c, ldc, work, lwork, info) β€” CGEMLQ
  • subroutine dgemlq (side, trans, m, n, k, a, lda, t, tsize, c, ldc, work, lwork, info) β€” DGEMLQ
  • subroutine sgemlq (side, trans, m, n, k, a, lda, t, tsize, c, ldc, work, lwork, info) β€” SGEMLQ
  • subroutine zgemlq (side, trans, m, n, k, a, lda, t, tsize, c, ldc, work, lwork, info) β€” ZGEMLQ

✨ Detailed Description ✨

so this heading exists in the original and under it there is… nothing. zero. a whole void. it's giving empty group chat at 3am πŸ’€ not a single crumb of content here, so we move straight to the good part.


πŸ’– Function Documentation πŸ’–

subroutine cgemlq

subroutine cgemlq (character side, character trans, integer m, integer n,
    integer k, complex, dimension( lda, * ) a, integer lda, complex,
    dimension( * ) t, integer tsize, complex, dimension( ldc, * ) c, integer
    ldc, complex, dimension( * ) work, integer lwork, integer info)

CGEMLQ πŸ‘‘

Purpose

okay so here's the whole vibe: CGEMLQ overwrites the general real M-by-N matrix C with πŸ‘‡

                     SIDE = 'L'     SIDE = 'R'
     TRANS = 'N':      Q * C          C * Q
     TRANS = 'C':      Q**H * C       C * Q**H

where Q is a complex unitary matrix defined as the product of blocked elementary reflectors computed by short wide LQ factorization (CGELQ) ✨

(yes the original says "general real M-by-N matrix C" on a complex routine. we are simply not going to unpack that, bestie. moving on 🫢)

Parameters

  • SIDE β€” SIDE is CHARACTER*1. = 'L': apply Q or Q**H from the Left; = 'R': apply Q or Q**H from the Right. pick a side, any side πŸ’…
  • TRANS β€” TRANS is CHARACTER*1. = 'N': no transpose, apply Q; = 'C': conjugate transpose, apply Q**H. that's the whole thing, no 'T' option here okurrr
  • M β€” M is INTEGER. The number of rows of the matrix A. M >=0. πŸ“
  • N β€” N is INTEGER. The number of columns of the matrix C. N >= 0. the way M is about A and N is about C… that's just how it is, bestie, don't @ me
  • 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. so K is squeezed between zero and whichever dimension is relevant πŸŽ€
  • A β€” A is COMPLEX array, dimension (LDA,M) if SIDE = 'L', (LDA,N) if SIDE = 'R'. Part of the data structure to represent Q as returned by CGELQ. it's not the whole Q, it's a part of it, respect the lore πŸ“¦
  • LDA β€” LDA is INTEGER. The leading dimension of the array A. LDA >= max(1,K). ⭐
  • T β€” T is COMPLEX array, dimension (MAX(5,TSIZE)). Part of the data structure to represent Q as returned by CGELQ. again, just a piece of the puzzle 🧩
  • TSIZE β€” TSIZE is INTEGER. The dimension of the array T. TSIZE >= 5. no vowel, no mercy πŸ¦‹
  • C β€” C is COMPLEX array, dimension (LDC,N). On entry, the M-by-N matrix C. On exit, C is overwritten by Q*C or Q**H*C or C*Q**H or C*Q. overwritten, so if you needed the old C… she's gone, bestie 😭
  • LDC β€” LDC is INTEGER. The leading dimension of the array C. LDC >= max(1,M). πŸ’«
  • WORK β€” (workspace) COMPLEX array, dimension (MAX(1,LWORK)). On exit, if INFO = 0, WORK(1) returns the minimal LWORK. ✨
  • LWORK β€” LWORK is INTEGER. The dimension of the array WORK. LWORK >= 1. If LWORK = -1, then a workspace query is assumed: the routine only calculates the size of the WORK array, returns this value as WORK(1), and no error message related to WORK is issued by XERBLA. (that's the classic "lemme just ask how much room I need" move 🫢)
  • INFO β€” INFO is INTEGER. = 0: successful exit πŸŽ‰; < 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.

Further Details

⚠️ read this part, it's the fine print. These details are particular for this LAPACK implementation. Users should not take them for granted. These details may change in the future, and are not likely true for another LAPACK implementation. These details are relevant if one wants to try to understand the code. They are not part of the interface. 🫧

In this version πŸ‘‡

T(2): row block size (MB)
T(3): column block size (NB)
T(6:TSIZE): data structure needed for Q, computed by
                 CLASWQR or CGELQT

Depending on the matrix dimensions M and N, and row and column block sizes MB and NB returned by ILAENV, CGELQ will use either CLASWLQ (if the matrix is wide-and-short) or CGELQT to compute the LQ factorization. This version of CGEMLQ will use either CLAMSWLQ or CGEMLQT to multiply matrix Q by another matrix. Further Details in CLAMSWLQ or CGEMLQT. πŸ”

Definition at line 171 of file cgemlq.f.


subroutine dgemlq

subroutine dgemlq (character side, character trans, integer m, integer n,
    integer k, double precision, dimension( lda, * ) a, integer lda, double
    precision, dimension( * ) t, integer tsize, double precision, dimension(
    ldc, * ) c, integer ldc, double precision, dimension( * ) work, integer
    lwork, integer info)

DGEMLQ ✨

Purpose

DGEMLQ overwrites the general real M-by-N matrix C with πŸ‘‡

                   SIDE = 'L'     SIDE = 'R'
   TRANS = 'N':      Q * C          C * Q
   TRANS = 'T':      Q**T * C       C * Q**T

where Q is a real orthogonal matrix defined as the product of blocked elementary reflectors computed by short wide LQ factorization (DGELQ) 🌈

Parameters

  • SIDE β€” SIDE is CHARACTER*1. = 'L': apply Q or Q**T from the Left; = 'R': apply Q or Q**T from the Right. πŸ’…
  • TRANS β€” TRANS is CHARACTER*1. = 'N': no transpose, apply Q; = 'T': transpose, apply Q**T. (real precision, so no conjugation business β€” it's 'T' here, not 'C', and that's the whole difference bestie πŸ”₯)
  • M β€” M is INTEGER. The number of rows of the matrix A. M >=0. πŸ“
  • N β€” N is INTEGER. The number of columns of the matrix C. N >= 0. πŸ“
  • 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. πŸŽ€
  • A β€” A is DOUBLE PRECISION array, dimension (LDA,M) if SIDE = 'L', (LDA,N) if SIDE = 'R'. Part of the data structure to represent Q as returned by DGELQ. 🧊
  • LDA β€” LDA is INTEGER. The leading dimension of the array A. LDA >= max(1,K). ⭐
  • T β€” T is DOUBLE PRECISION array, dimension (MAX(5,TSIZE)). Part of the data structure to represent Q as returned by DGELQ. 🧩
  • TSIZE β€” TSIZE is INTEGER. The dimension of the array T. TSIZE >= 5. πŸ¦‹
  • C β€” C is DOUBLE PRECISION 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. overwritten, babes, gone forever 😭
  • LDC β€” LDC is INTEGER. The leading dimension of the array C. LDC >= max(1,M). πŸ’«
  • WORK β€” (workspace) DOUBLE PRECISION array, dimension (MAX(1,LWORK)). On exit, if INFO = 0, WORK(1) returns the minimal LWORK. ✨
  • LWORK β€” LWORK is INTEGER. The dimension of the array WORK. LWORK >= 1. If LWORK = -1, then a workspace query is assumed: the routine only calculates the size of the WORK array, returns this value as WORK(1), and no error message related to WORK is issued by XERBLA. 🫢
  • INFO β€” INFO is INTEGER. = 0: successful exit πŸŽ‰; < 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.

Further Details

⚠️ same warning as above, and it matters: These details are particular for this LAPACK implementation. Users should not take them for granted. These details may change in the future, and are not likely true for another LAPACK implementation. These details are relevant if one wants to try to understand the code. They are not part of the interface. 🫧

In this version πŸ‘‡

T(2): row block size (MB)
T(3): column block size (NB)
T(6:TSIZE): data structure needed for Q, computed by
                 DLASWLQ or DGELQT

Depending on the matrix dimensions M and N, and row and column block sizes MB and NB returned by ILAENV, DGELQ will use either DLASWLQ (if the matrix is wide-and-short) or DGELQT to compute the LQ factorization. This version of DGEMLQ will use either DLAMSWLQ or DGEMLQT to multiply matrix Q by another matrix. Further Details in DLAMSWLQ or DGEMLQT. πŸ”

Definition at line 172 of file dgemlq.f.


subroutine sgemlq

subroutine sgemlq (character side, character trans, integer m, integer n,
    integer k, real, dimension( lda, * ) a, integer lda, real, dimension( *
    ) t, integer tsize, real, dimension( ldc, * ) c, integer ldc, real,
    dimension( * ) work, integer lwork, integer info)

SGEMLQ 🌸

Purpose

SGEMLQ overwrites the general real M-by-N matrix C with πŸ‘‡

                   SIDE = 'L'     SIDE = 'R'
   TRANS = 'N':      Q * C          C * Q
   TRANS = 'T':      Q**T * C       C * Q**T

where Q is a real orthogonal matrix defined as the product of blocked elementary reflectors computed by short wide LQ factorization (SGELQ) 🌷

Parameters

  • SIDE β€” bestie the page literally cuts off right here mid-parameter, so SIDE is where we're picking back up…
  • SIDE β€” a CHARACTER*1 bestie, okay? Which side are we multiplying from?
    • = 'L' β†’ apply Q or Q**T from the Left 🫢
    • = 'R' β†’ apply Q or Q**T from the Right
  • TRANS β€” also CHARACTER*1, the vibe check on transposition πŸ’…
    • = 'N' β†’ No transpose, just apply Q
    • = 'T' β†’ Transpose, apply Q**T
  • M β€” INTEGER, the number of rows of the matrix A. Constraint era: M >= 0 ⭐
  • N β€” INTEGER, the number of columns of the matrix C. Also N >= 0, no cap 🧚
  • K β€” INTEGER, the number of elementary reflectors whose product defines the matrix Q. And the bounds are:
    • If SIDE = 'L', then M >= K >= 0
    • if SIDE = 'R', then N >= K >= 0
  • A β€” REAL array, dimension
                              (LDA,M) if SIDE = 'L',
                              (LDA,N) if SIDE = 'R'

Part of the data structure to represent Q as returned by SGELQ. It's literally part of Q's whole personality πŸ”₯

  • LDA β€” INTEGER, the leading dimension of the array A. LDA >= max(1,K), respectfully πŸ™
  • T β€” REAL array, dimension (MAX(5,TSIZE)). Part of the data structure to represent Q as returned by SGELQ. Same squad, different array πŸ’œ
  • TSIZE β€” INTEGER, the dimension of the array T. TSIZE >= 5, minimum requirement, we don't make the rules πŸŽ€
  • C β€” 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. She gets a whole glow-up on the way out ✨
  • LDC β€” INTEGER, the leading dimension of the array C. LDC >= max(1,M) πŸ‘‘
  • WORK β€” (workspace) DOUBLE PRECISION array, dimension (MAX(1,LWORK)). Yes bestie, DOUBLE PRECISION β€” that's not a typo, that's literally what it says. On exit, if INFO = 0, WORK(1) returns the minimal LWORK.
  • LWORK β€” INTEGER, the dimension of the array WORK. LWORK >= 1. And the fun part: if LWORK = -1, then a workspace query is assumed. The routine only calculates the size of the WORK array, returns this value as WORK(1), and no error message related to WORK is issued by XERBLA 😌
  • INFO β€” INTEGER, the receipts πŸ“‹
    • = 0: successful exit πŸŽ‰
    • < 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.

Further Details

These details are particular for this LAPACK implementation. Users should not take them for granted. These details may change in the future, and are not likely true for another LAPACK implementation. These details are relevant if one wants to try to understand the code. They are not part of the interface. 🚨

In this version,

       T(2): row block size (MB)
       T(3): column block size (NB)
       T(6:TSIZE): data structure needed for Q, computed by
                        SLASWLQ or SGELQT

Depending on the matrix dimensions M and N, and row and column block sizes MB and NB returned by ILAENV, SGELQ will use either SLASWLQ (if the matrix is wide-and-short) or SGELQT to compute the LQ factorization.

This version of SGEMLQ will use either SLAMSWLQ or SGEMLQT to multiply matrix Q by another matrix.

Further Details in SLAMSWLQ or SGEMLQT πŸ¦‹

Definition at line 171 of file sgemlq.f.


🌈 subroutine zgemlq

subroutine zgemlq (character side, character trans, integer m, integer n,
    integer k, complex*16, dimension( lda, * ) a, integer lda, complex*16,
    dimension( * ) t, integer tsize, complex*16, dimension( ldc, * ) c,
    integer ldc, complex*16, dimension( * ) work, integer lwork, integer
    info)

ZGEMLQ β€” the complex flirty cousin, same energy, different dtype πŸ’œβœ¨

Purpose

ZGEMLQ overwrites the general real M-by-N matrix C with

                     SIDE = 'L'     SIDE = 'R'
TRANS = 'N':      Q * C          C * Q
TRANS = 'C':      Q**H * C       C * Q**H

where Q is a complex unitary matrix defined as the product of blocked elementary reflectors computed by short wide LQ factorization (ZGELQ) πŸ”₯πŸ”₯

Parameters

  • SIDE β€” CHARACTER*1, which side we're sliding in from 🫢
    • = 'L' β†’ apply Q or Q**H from the Left
    • = 'R' β†’ apply Q or Q**H from the Right
  • TRANS β€” CHARACTER*1, note it says 'C' this time, not 'T' β€” conjugate transposition is the whole point, iykyk πŸ’…
    • = 'N' β†’ No transpose, apply Q
    • = 'C' β†’ Conjugate transpose, apply Q**H
  • M β€” INTEGER, the number of rows of the matrix A. M >= 0 ⭐
  • N β€” INTEGER, the number of columns of the matrix C. N >= 0 🌸
  • K β€” INTEGER, the number of elementary reflectors whose product defines the matrix Q. Bounds:
    • If SIDE = 'L', then M >= K >= 0
    • if SIDE = 'R', then N >= K >= 0
  • A β€” COMPLEX*16 array, dimension
                             (LDA,M) if SIDE = 'L',
                             (LDA,N) if SIDE = 'R'

Part of the data structure to represent Q as returned by ZGELQ πŸ‘‘

  • LDA β€” INTEGER, the leading dimension of the array A. LDA >= max(1,K) πŸ™
  • T β€” COMPLEX*16 array, dimension (MAX(5,TSIZE)). Part of the data structure to represent Q as returned by ZGELQ. Again. Still iconic πŸŽ€
  • TSIZE β€” INTEGER, the dimension of the array T. TSIZE >= 5 πŸ’œ
  • C β€” COMPLEX*16 array, dimension (LDC,N). On entry, the M-by-N matrix C. On exit, C is overwritten by Q*C or Q**H*C or C*Q**H or C*Q ✨
  • LDC β€” INTEGER, the leading dimension of the array C. LDC >= max(1,M) 🧚
  • WORK β€” (workspace) COMPLEX*16 array, dimension (MAX(1,LWORK)). On exit, if INFO = 0, WORK(1) returns the minimal LWORK ⭐
  • LWORK β€” INTEGER, the dimension of the array WORK. LWORK >= 1. If LWORK = -1, then a workspace query is assumed. The routine only calculates the size of the WORK array, returns this value as WORK(1), and no error message related to WORK is issued by XERBLA 😌
  • INFO β€” INTEGER, the receipts πŸ“‹
    • = 0: successful exit πŸŽ‰
    • < 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.

Further Details

These details are particular for this LAPACK implementation. Users should not take them for granted. These details may change in the future, and are not likely true for another LAPACK implementation. These details are relevant if one wants to try to understand the code. They are not part of the interface. 🚨

In this version,

       T(2): row block size (MB)
       T(3): column block size (NB)
       T(6:TSIZE): data structure needed for Q, computed by
                        ZLASWLQ or ZGELQT

Depending on the matrix dimensions M and N, and row and column block sizes MB and NB returned by ILAENV, ZGELQ will use either ZLASWLQ (if the matrix is wide-and-short) or ZGELQT to compute the LQ factorization.

This version of ZGEMLQ will use either ZLAMSWLQ or ZGEMLQT to multiply matrix Q by another matrix.

Further Details in ZLAMSWLQ or ZGEMLQT 🌈

Definition at line 170 of file zgemlq.f.


πŸŽ€ Author

Generated automatically by Doxygen for LAPACK from the source code.


okay that's the whole page bestie, you made it to the end 🫢✨ this little beauty is from LAPACK Version 3.12.0, dated gemlq(3) β€” go forth and multiply your matrices, slay πŸ’…πŸ‘‘

πŸ“¦ where this page comes from