unmr2(3)

🌸 unmr2(3) β€” from the Library Functions Manual 🌸

okay so bestie. you found it. this is the page for unmr2(3), aka the whole {un,or}mr2 family β€” and yes the name in the wild is literally unmr2 - {un,or}mr2: step in unmrq. it's giving "one letter changes everything" and honestly? iconic. πŸ’…

here's the tea: this is a family page. four separate Fortran subroutines live here, all doing the same little dance but with different number types. don't panic. we're gonna go through every single one. 🫢


✨ NAME ✨

unmr2 β€” {un,or}mr2: step in unmrq

that's it. that's the name section. short, sweet, mysterious. iykyk. πŸŽ€


πŸ’– SYNOPSIS πŸ’–

🌈 Functions

  • cunmr2 β€” subroutine cunmr2 (side, trans, m, n, k, a, lda, tau, c, ldc, work, info) β€” CUNMR2 multiplies a general matrix by the unitary matrix from a RQ factorization determined by cgerqf (unblocked algorithm).
  • dormr2 β€” subroutine dormr2 (side, trans, m, n, k, a, lda, tau, c, ldc, work, info) β€” DORMR2 multiplies a general matrix by the orthogonal matrix from a RQ factorization determined by sgerqf (unblocked algorithm).
  • sormr2 β€” subroutine sormr2 (side, trans, m, n, k, a, lda, tau, c, ldc, work, info) β€” SORMR2 multiplies a general matrix by the orthogonal matrix from a RQ factorization determined by sgerqf (unblocked algorithm).
  • zunmr2 β€” subroutine zunmr2 (side, trans, m, n, k, a, lda, tau, c, ldc, work, info) β€” ZUNMR2 multiplies a general matrix by the unitary matrix from a RQ factorization determined by cgerqf (unblocked algorithm).
ok so real talk: dormr2's one-liner points at sgerqf and zunmr2's points at cgerqf. that's literally what the page says. i'm not fixing it. i don't make the rules. πŸ™ˆ

πŸ¦‹ Detailed Description πŸ¦‹

(this page is mostly a container. the real content is down in Function Documentation. keep scrolling bestie. ⭐)


πŸ‘‘ Function Documentation πŸ‘‘

πŸ’œ cunmr2 β€” the complex one

subroutine cunmr2 (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 info)

CUNMR2 multiplies a general matrix by the unitary matrix from a RQ factorization determined by cgerqf (unblocked algorithm).

✨ Purpose

ok so listen. CUNMR2 overwrites the general complex m-by-n matrix C with:

Q * C  if SIDE = 'L' and TRANS = 'N', or

Q**H* C  if SIDE = 'L' and TRANS = 'C', or

C * Q  if SIDE = 'R' and TRANS = 'N', or

C * Q**H if SIDE = 'R' and TRANS = 'C',

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

πŸŽ€ 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': apply Q (No transpose)
    • = 'C': apply Q**H (Conjugate transpose)
  • 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 a COMPLEX array, dimension:
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. πŸ”₯ heads up: A is modified by the routine but restored on exit.

  • 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 a COMPLEX array, dimension:
WORK is COMPLEX array, dimension
                         (N) if SIDE = 'L',
                         (M) if SIDE = 'R'
  • 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 157 of file cunmr2.f.


πŸ’™ dormr2 β€” the double precision one

subroutine dormr2 (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 info)

DORMR2 multiplies a general matrix by the orthogonal matrix from a RQ factorization determined by sgerqf (unblocked algorithm).

✨ Purpose

same energy, real numbers this time. DORMR2 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 = 'T', or

C * Q  if SIDE = 'R' and TRANS = 'N', or

C * Q**T if SIDE = 'R' and TRANS = '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'.

πŸŽ€ 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': apply Q (No transpose)
    • = 'T': apply Q' (Transpose)
  • 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 a DOUBLE PRECISION array, dimension:
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. also: A is modified by the routine but restored on exit. πŸ’–

  • 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 a DOUBLE PRECISION array, dimension:
WORK is DOUBLE PRECISION array, dimension
                         (N) if SIDE = 'L',
                         (M) if SIDE = 'R'
  • 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 157 of file dormr2.f.


🌸 sormr2 β€” the single precision one

subroutine sormr2 (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 info)

SORMR2 multiplies a general matrix by the orthogonal matrix from a RQ factorization determined by sgerqf (unblocked algorithm).

✨ Purpose

bestie this is the REAL twin of DORMR2. SORMR2 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 = 'T', or

C * Q  if SIDE = 'R' and TRANS = 'N', or

C * Q**T if SIDE = 'R' and TRANS = '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'.

πŸŽ€ 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': apply Q (No transpose)
    • = 'T': apply Q' (Transpose)
  • 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 a REAL array, dimension:
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. (and yeah β€” A is modified by the routine but restored on exit 😭)

  • LDA β€” LDA is INTEGER β€” the leading dimension of the array A. LDA >= max(1,K).
  • TAU β€” …
  • 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 (N) if SIDE = 'L', (M) if SIDE = 'R'.
  • 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 157 of file sormr2.f.


zunmr2 β€” the COMPLEX*16 unitary RQ era πŸ’œ

The signature, exactly:

   subroutine zunmr2 (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 info)

The official one-liner is: ZUNMR2 multiplies a general matrix by the unitary matrix from an RQ factorization determined by cgerqf (unblocked algorithm).

Purpose 🎯

ZUNMR2 overwrites the general complex m-by-n matrix C with:

Q * C  if SIDE = 'L' and TRANS = 'N', or

Q**H* C  if SIDE = 'L' and TRANS = 'C', or

C * Q  if SIDE = 'R' and TRANS = 'N', or

C * Q**H if SIDE = 'R' and TRANS = 'C',

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

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': apply Q (No transpose). = 'C': apply Q**H (Conjugate transpose).
  • 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. A is modified by the routine but restored on exit.
  • 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 (N) if SIDE = 'L', (M) if SIDE = 'R'.
  • 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 157 of file zunmr2.f.

Author πŸ€–

Generated automatically by Doxygen for LAPACK from the source code.

Ok that's the whole page, bestie πŸ’– β€” footer tea: LAPACK, version 3.12.0, page unmr2(3). No date on the line, so I'm not making one up, periodt. Bye! πŸ¦‹

πŸ“¦ where this page comes from