unmrq(3)

πŸ’… unmrq β€” {un,or}mrq: multiply by Q from gerqf πŸ¦‹

okay bestie, welcome to the unmrq page β€” this is the family of LAPACK routines that take the Q you carefully built with gerqf and actually use it. like, Q gets to have its main character moment and multiply a whole matrix. iconic behavior honestly.

the homegirls in question are cunmrq, dormrq, sormrq and zunmrq β€” one for each real/complex, single/double precision vibe check. same energy, different dtypes. iykyk ✨


🌸 SYNOPSIS 🌸

subroutine cunmrq (side, trans, m, n, k, a, lda, tau, c, ldc, work,
    lwork, info)
    CUNMRQ
subroutine dormrq (side, trans, m, n, k, a, lda, tau, c, ldc, work,
    lwork, info)
    DORMRQ
subroutine sormrq (side, trans, m, n, k, a, lda, tau, c, ldc, work,
    lwork, info)
    SORMRQ
subroutine zunmrq (side, trans, m, n, k, a, lda, tau, c, ldc, work,
    lwork, info)
    ZUNMRQ

πŸ’– Detailed Description πŸ’–

so this page is like a little friend group of four routines, all doing the same thing for different precisions. every one of them is documented in full below β€” no skipping, bestie, we read the whole menu 🫢


✨ Function Documentation ✨

πŸŽ€ subroutine cunmrq πŸŽ€

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

CUNMRQ

Purpose:

!>
!> CUNMRQ overwrites the general complex 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 k
!> elementary reflectors
!>
!>       Q = H(1)**H H(2)**H . . . H(k)**H
!>
!> as returned by CGERQF. Q is of order M if SIDE = 'L' and of order N
!> if SIDE = 'R'.
!>

like, literally β€” it overwrites your general complex M-by-N matrix C with whichever of those four products you asked for. and Q here is that complex unitary matrix, built as the product of k elementary reflectors, exactly as CGERQF handed it to you. Q is order M if SIDE = 'L', order N if SIDE = 'R'. slay πŸ’…

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 C. 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 COMPLEX 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 CGERQF in the last k rows of its array argument A.

  • LDA β€” LDA is INTEGER. the leading dimension of the array A. LDA >= max(1,K).
  • TAU β€” TAU is COMPLEX array, dimension (K). TAU(i) must contain the scalar factor of the elementary reflector H(i), as returned by CGERQF.
  • 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.
  • LDC β€” LDC is INTEGER. the leading dimension of the array C. LDC >= max(1,M).
  • WORK β€” WORK is COMPLEX array, dimension (MAX(1,LWORK)). on exit, if INFO = 0, WORK(1) returns the optimal LWORK.
  • LWORK β€” LWORK is INTEGER. the dimension of the array WORK.
    • If SIDE = 'L', LWORK >= max(1,N);
    • if SIDE = 'R', LWORK >= max(1,M).
    • For good performance, LWORK should generally be larger.
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.
  • 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.

Definition at line 166 of file cunmrq.f.


πŸ¦‹ subroutine dormrq πŸ¦‹

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

DORMRQ

Purpose:

!>
!> DORMRQ 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 k
!> elementary reflectors
!>
!>       Q = H(1) H(2) . . . H(k)
!>
!> as returned by DGERQF. Q is of order M if SIDE = 'L' and of order N
!> if SIDE = 'R'.
!>

same deal, double precision edition πŸ’œ β€” overwrites the general real M-by-N matrix C with one of those four products, where Q is a real orthogonal matrix defined as the product of k elementary reflectors, as returned by DGERQF. Q is of order M if SIDE = 'L', order N if SIDE = 'R'.

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.
  • M β€” M is INTEGER. the number of rows of the matrix C. 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'

the i-th row must contain the vector which defines the elementary reflector H(i), for i = 1,2,...,k, as returned by DGERQF in the last k rows of its array argument A.

  • LDA β€” LDA is INTEGER. the leading dimension of the array A. LDA >= max(1,K).
  • TAU β€” TAU is DOUBLE PRECISION array, dimension (K). TAU(i) must contain the scalar factor of the elementary reflector H(i), as returned by DGERQF.
  • 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.
  • LDC β€” LDC is INTEGER. the leading dimension of the array C. LDC >= max(1,M).
  • WORK β€” WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK)). on exit, if INFO = 0, WORK(1) returns the optimal LWORK.
  • LWORK β€” LWORK is INTEGER. the dimension of the array WORK.
    • If SIDE = 'L', LWORK >= max(1,N);
    • if SIDE = 'R', LWORK >= max(1,M).
    • For good performance, LWORK should generally be larger.
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.
  • 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.

Definition at line 165 of file dormrq.f.


🧚 subroutine sormrq 🧚

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

SORMRQ

Purpose:

!>
!> SORMRQ 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 k
!> elementary reflectors
!>
!>       Q = H(1) H(2) . . . H(k)
!>
!> as returned by SGERQF. Q is of order M if SIDE = 'L' and of order N
!> if SIDE = 'R'.
!>

single precision real, bestie 🌸 β€” overwrites the general real M-by-N matrix C with one of those four products, Q being a real orthogonal matrix defined as the product of k elementary reflectors as returned by SGERQF. Q is of order M if SIDE = 'L', order N if SIDE = 'R'.

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.
  • M β€” M is INTEGER. the number of rows of the matrix C. 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 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 SGERQF in the last k rows of its array argument A.

  • LDA β€” LDA is INTEGER. the leading dimension of the array A. LDA >= max(1,K).
  • TAU β€” TAU is REAL array, dimension (K). TAU(i) must contain the scalar factor of the elementary reflector H(i), as returned by SGERQF.
  • 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.
  • LDC β€” LDC is INTEGER. the leading dimension of the array C. LDC >= max(1,M).
  • WORK β€” WORK is REAL array, dimension (MAX(1,LWORK)). on exit, if INFO = 0, WORK(1) returns the optimal LWORK.
  • LWORK β€” LWORK is INTEGER. the dimension of the array WORK.
    • If SIDE = 'L', LWORK >= max(1,N);
    • if SIDE = 'R', LWORK >= max(1,M).
    • For good performance, LWORK should generally be larger.
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.
  • 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.

Definition at line 164 of file sormrq.f.


πŸ‘‘ subroutine zunmrq πŸ‘‘

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

ZUNMRQ

Purpose:

!>
!> ZUNMRQ overwrites the general complex 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 k
!> elementary reflectors
!>
!>       Q = H(1)**H H(2)**H . . . H(k)**H
!>
!> as returned by ZGERQF. Q is of order M if SIDE = 'L' and of order N
!> if SIDE = 'R'.
!>

double precision complex, the queen herself πŸ’… β€” overwrites the general complex M-by-N matrix C with one of those four, where Q is a complex unitary matrix defined as the product of k elementary reflectors, as returned by ZGERQF. Q is of order M if SIDE = 'L', order N if SIDE = 'R'.

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 C. 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 COMPLEX*16 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 ZGERQF in the last k rows of its array argument A.

  • LDA β€” LDA is INTEGER. the leading dimension of the array A. LDA >= max(1,K).
  • TAU β€” TAU is COMPLEX*16 array, dimension (K). TAU(i) must contain the scalar factor of the elementary reflector H(i), as returned by ZGERQF.
  • C β€” C is 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 β€” LDC is INTEGER. the leading dimension of the array C. LDC >= max(1,M).
  • WORK β€” WORK is COMPLEX*16 array, dimension (MAX(1,LWORK)). on exit, if INFO = 0, WORK(1) returns the optimal LWORK.
  • LWORK β€” LWORK is INTEGER. the dimension of the array WORK.
    • If SIDE = 'L', LWORK >= max(1,N);
    • if SIDE = 'R', LWORK >= max(1,M).
    • For good performance, LWORK should generally be larger.
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.
  • 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.

Definition at line 167 of file zunmrq.f.


okay and that's part 1, bestie β€” there's more where that came from, so don't you dare close the tab yet πŸ«ΆπŸ’–

  • TAU β€” it’s a REAL array, dimension (K), and TAU(i) must contain the scalar factor of the elementary reflector H(i), exactly as returned by SGERQF. slay ✨
  • C β€” C is REAL array, dimension (LDC,N). On entry it’s 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. iconic behavior πŸ’…
  • LDC β€” LDC is INTEGER, the leading dimension of the array C. And the rule is LDC >= max(1,M). no cap.
  • WORK β€” WORK is REAL array, dimension (MAX(1,LWORK)). On exit, if INFO = 0, then WORK(1) returns the optimal LWORK. bestie, it’s giving workspace reveal 🫢
  • LWORK β€” LWORK is INTEGER, the dimension of the array WORK. If SIDE = 'L', then LWORK >= max(1,N); if SIDE = 'R', then LWORK >= max(1,M). For good performance, LWORK should generally be larger.

Also: 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. periodt πŸ’–

  • 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.

πŸ“Œ Definition

Definition at line 166 of file sormrq.f.


🌸 subroutine zunmrq β€” the complex edition, hehe πŸ¦‹

subroutine zunmrq (character side, character trans, integer m, integer n,
    integer k, complex*16, dimension( lda, * ) a, integer lda, complex*16,
    dimension( * ) tau, complex*16, dimension( ldc, * ) c, integer ldc,
    complex*16, dimension( * ) work, integer lwork, integer info)
ZUNMRQ

✨ Purpose

okay so ZUNMRQ overwrites the general complex 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 k elementary reflectors:

      Q = H(1)**H H(2)**H . . . H(k)**H

as returned by ZGERQF. Q is of order M if SIDE = 'L' and of order N if SIDE = 'R'. literally the main character matrix energy πŸ‘‘

✨ Parameters

  • SIDE β€” SIDE is CHARACTER*1.
    • = 'L': apply Q or Q**H from the Left;
    • = 'R': apply Q or Q**H from the Right. choose your vibe πŸ’…
  • TRANS β€” TRANS is CHARACTER*1.
    • = 'N': No transpose, apply Q;
    • = 'C': Conjugate transpose, apply Q**H. yup, conjugate transpose is the moment πŸŒ€
  • M β€” M is INTEGER, the number of rows of the matrix C. And M >= 0. respect the bound, bestie 🫢
  • N β€” N is INTEGER, the number of columns of the matrix C. And N >= 0. slay the dimension check ✨
  • K β€” K is INTEGER, the number of elementary reflectors whose product defines the matrix Q. If SIDE = 'L', then M >= K >= 0; if SIDE = 'R', then N >= K >= 0. math said what it said πŸ’–
  • A β€” A is COMPLEX*16 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 ZGERQF in the last k rows of its array argument A. okayyyyy data placement icon πŸŽ€

  • LDA β€” LDA is INTEGER, the leading dimension of the array A. And LDA >= max(1,K). no skipping the leading dimension, iykyk 🌸
  • TAU β€” TAU is COMPLEX*16 array, dimension (K). TAU(i) must contain the scalar factor of the elementary reflector H(i), as returned by ZGERQF. the scalar factor is doing its little dance πŸ’ƒ
  • C β€” C is 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. bestie it’s literally getting replaced, stay calm 😭
  • LDC β€” LDC is INTEGER, the leading dimension of the array C. And LDC >= max(1,M). periodt πŸ”₯
  • WORK β€” WORK is COMPLEX*16 array, dimension (MAX(1,LWORK)). On exit, if INFO = 0, then WORK(1) returns the optimal LWORK. workspace said β€œI’m the moment” ✨
  • LWORK β€” LWORK is INTEGER, the dimension of the array WORK. If SIDE = 'L', then LWORK >= max(1,N); if SIDE = 'R', then LWORK >= max(1,M). For good performance, LWORK should generally be larger.

Also: 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. no notes, just query behavior 🫢

  • 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.

πŸ“Œ Definition

Definition at line 165 of file zunmrq.f.

🌈 Author

Generated automatically by Doxygen for LAPACK from the source code. yes babe, the docs generated themselves and still ate πŸ’…


okay final footer check, bestie: this whole thing is serving LAPACK Version 3.12.0, page unmrq(3), and it’s from the LAPACK source-code side of the internet. mwah πŸ’‹πŸŽ€

πŸ“¦ where this page comes from