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)β CGEMLQsubroutine dgemlq (side, trans, m, n, k, a, lda, t, tsize, c, ldc, work, lwork, info)β DGEMLQsubroutine sgemlq (side, trans, m, n, k, a, lda, t, tsize, c, ldc, work, lwork, info)β SGEMLQsubroutine 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': applyQorQ**Hfrom the Left;= 'R': applyQorQ**Hfrom the Right. pick a side, any side πTRANSβTRANS is CHARACTER*1.= 'N': no transpose, applyQ;= 'C': conjugate transpose, applyQ**H. that's the whole thing, no'T'option here okurrrMβM is INTEGER. The number of rows of the matrixA.M >=0. πNβN is INTEGER. The number of columns of the matrixC.N >= 0. the wayMis aboutAandNis aboutCβ¦ that's just how it is, bestie, don't @ meKβK is INTEGER. The number of elementary reflectors whose product defines the matrixQ. IfSIDE = 'L',M >= K >= 0; ifSIDE = 'R',N >= K >= 0. soKis squeezed between zero and whichever dimension is relevant πAβA is COMPLEX array, dimension(LDA,M)ifSIDE = 'L',(LDA,N)ifSIDE = 'R'. Part of the data structure to representQas returned byCGELQ. it's not the wholeQ, it's a part of it, respect the lore π¦LDAβLDA is INTEGER. The leading dimension of the arrayA.LDA >= max(1,K). βTβT is COMPLEX array, dimension(MAX(5,TSIZE)). Part of the data structure to representQas returned byCGELQ. again, just a piece of the puzzle π§©TSIZEβTSIZE is INTEGER. The dimension of the arrayT.TSIZE >= 5. no vowel, no mercy π¦CβC is COMPLEX array, dimension(LDC,N). On entry, the M-by-N matrixC. On exit,Cis overwritten byQ*CorQ**H*CorC*Q**HorC*Q. overwritten, so if you needed the oldCβ¦ she's gone, bestie πLDCβLDC is INTEGER. The leading dimension of the arrayC.LDC >= max(1,M). π«WORKβ(workspace) COMPLEX array, dimension(MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the minimalLWORK. β¨LWORKβLWORK is INTEGER. The dimension of the arrayWORK.LWORK >= 1. IfLWORK = -1, then a workspace query is assumed: the routine only calculates the size of theWORKarray, returns this value asWORK(1), and no error message related toWORKis issued byXERBLA. (that's the classic "lemme just ask how much room I need" move π«Ά)INFOβINFO is INTEGER.= 0: successful exit π;< 0: ifINFO = -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': applyQorQ**Tfrom the Left;= 'R': applyQorQ**Tfrom the Right. πTRANSβTRANS is CHARACTER*1.= 'N': no transpose, applyQ;= 'T': transpose, applyQ**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 matrixA.M >=0. πNβN is INTEGER. The number of columns of the matrixC.N >= 0. πKβK is INTEGER. The number of elementary reflectors whose product defines the matrixQ. IfSIDE = 'L',M >= K >= 0; ifSIDE = 'R',N >= K >= 0. πAβA is DOUBLE PRECISION array, dimension(LDA,M)ifSIDE = 'L',(LDA,N)ifSIDE = 'R'. Part of the data structure to representQas returned byDGELQ. π§LDAβLDA is INTEGER. The leading dimension of the arrayA.LDA >= max(1,K). βTβT is DOUBLE PRECISION array, dimension(MAX(5,TSIZE)). Part of the data structure to representQas returned byDGELQ. π§©TSIZEβTSIZE is INTEGER. The dimension of the arrayT.TSIZE >= 5. π¦CβC is DOUBLE PRECISION array, dimension(LDC,N). On entry, the M-by-N matrixC. On exit,Cis overwritten byQ*CorQ**T*CorC*Q**TorC*Q. overwritten, babes, gone forever πLDCβLDC is INTEGER. The leading dimension of the arrayC.LDC >= max(1,M). π«WORKβ(workspace) DOUBLE PRECISION array, dimension(MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the minimalLWORK. β¨LWORKβLWORK is INTEGER. The dimension of the arrayWORK.LWORK >= 1. IfLWORK = -1, then a workspace query is assumed: the routine only calculates the size of theWORKarray, returns this value asWORK(1), and no error message related toWORKis issued byXERBLA. π«ΆINFOβINFO is INTEGER.= 0: successful exit π;< 0: ifINFO = -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, soSIDEis where we're picking back upβ¦SIDEβ aCHARACTER*1bestie, okay? Which side are we multiplying from?= 'L'β applyQorQ**Tfrom the Left π«Ά= 'R'β applyQorQ**Tfrom the Right
TRANSβ alsoCHARACTER*1, the vibe check on transposition π= 'N'β No transpose, just applyQ= 'T'β Transpose, applyQ**T
MβINTEGER, the number of rows of the matrixA. Constraint era:M >= 0βNβINTEGER, the number of columns of the matrixC. AlsoN >= 0, no cap π§KβINTEGER, the number of elementary reflectors whose product defines the matrixQ. And the bounds are:- If
SIDE = 'L', thenM >= K >= 0 - if
SIDE = 'R', thenN >= K >= 0
- If
AβREALarray, 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 arrayA.LDA >= max(1,K), respectfully πTβREALarray, dimension(MAX(5,TSIZE)). Part of the data structure to representQas returned bySGELQ. Same squad, different array πTSIZEβINTEGER, the dimension of the arrayT.TSIZE >= 5, minimum requirement, we don't make the rules πCβREALarray, dimension(LDC,N). On entry, theM-by-NmatrixC. On exit,Cis overwritten byQ*CorQ**T*CorC*Q**TorC*Q. She gets a whole glow-up on the way out β¨LDCβINTEGER, the leading dimension of the arrayC.LDC >= max(1,M)πWORKβ (workspace)DOUBLE PRECISIONarray, dimension(MAX(1,LWORK)). Yes bestie,DOUBLE PRECISIONβ that's not a typo, that's literally what it says. On exit, ifINFO = 0,WORK(1)returns the minimalLWORK.LWORKβINTEGER, the dimension of the arrayWORK.LWORK >= 1. And the fun part: ifLWORK = -1, then a workspace query is assumed. The routine only calculates the size of theWORKarray, returns this value asWORK(1), and no error message related toWORKis issued byXERBLAπINFOβINTEGER, the receipts π= 0: successful exit π< 0: ifINFO = -i, thei-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'β applyQorQ**Hfrom the Left= 'R'β applyQorQ**Hfrom the Right
TRANSβCHARACTER*1, note it says'C'this time, not'T'β conjugate transposition is the whole point, iykyk π= 'N'β No transpose, applyQ= 'C'β Conjugate transpose, applyQ**H
MβINTEGER, the number of rows of the matrixA.M >= 0βNβINTEGER, the number of columns of the matrixC.N >= 0πΈKβINTEGER, the number of elementary reflectors whose product defines the matrixQ. Bounds:- If
SIDE = 'L', thenM >= K >= 0 - if
SIDE = 'R', thenN >= K >= 0
- If
AβCOMPLEX*16array, 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 arrayA.LDA >= max(1,K)πTβCOMPLEX*16array, dimension(MAX(5,TSIZE)). Part of the data structure to representQas returned byZGELQ. Again. Still iconic πTSIZEβINTEGER, the dimension of the arrayT.TSIZE >= 5πCβCOMPLEX*16array, dimension(LDC,N). On entry, theM-by-NmatrixC. On exit,Cis overwritten byQ*CorQ**H*CorC*Q**HorC*Qβ¨LDCβINTEGER, the leading dimension of the arrayC.LDC >= max(1,M)π§WORKβ (workspace)COMPLEX*16array, dimension(MAX(1,LWORK)). On exit, ifINFO = 0,WORK(1)returns the minimalLWORKβLWORKβINTEGER, the dimension of the arrayWORK.LWORK >= 1. IfLWORK = -1, then a workspace query is assumed. The routine only calculates the size of theWORKarray, returns this value asWORK(1), and no error message related toWORKis issued byXERBLAπINFOβINTEGER, the receipts π= 0: successful exit π< 0: ifINFO = -i, thei-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
- arch rolling: lapack-doc 3.12.1-2 Β· custom
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms