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

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

🌸 NAME 🌸

ok so this is /home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/zunbdb5.f β€” that's the file, bestie, that's literally the whole name section. it's a LAPACK source file, from the Library Functions Manual, page /home/abui.../zunbdb5.f(3). we move πŸ’…


✨ SYNOPSIS ✨

Functions/Subroutines

the whole vibe, in one signature:

subroutine ZUNBDB5 (m1, m2, n, x1, incx1, x2, incx2, q1, ldq1, q2, ldq2,
    work, lwork, info)

ZUNBDB5 β€” that's her. that's the name. iconic, no notes πŸ’–


πŸŽ€ Function/Subroutine Documentation πŸŽ€

here's the full thing in all her glory, spelled out completely:

subroutine ZUNBDB5 (integer m1, integer m2, integer n, complex*16,
    dimension(*) x1, integer incx1, complex*16, dimension(*) x2, integer
    incx2, complex*16, dimension(ldq1,*) q1, integer ldq1, complex*16,
    dimension(ldq2,*) q2, integer ldq2, complex*16, dimension(*) work,
    integer lwork, integer info)

ZUNBDB5

Purpose:

ok so what she does β€” and I need you to stay with me here, because this is the good part:

!>
!> ZUNBDB5 orthogonalizes the column vector
!>      X = [ X1 ]
!>          [ X2 ]
!> with respect to the columns of
!>      Q = [ Q1 ] .
!>          [ Q2 ]
!> The columns of Q must be orthonormal.
!>
!> If the projection is zero according to Kahan's
!> criterion, then some other vector from the orthogonal complement
!> is returned. This vector is chosen in an arbitrary but deterministic
!> way.
!>
!>

so basically: you hand her a big stacked column vector X β€” top half X1, bottom half X2 β€” and she orthogonalizes it against the columns of a stacked matrix Q β€” top half Q1, bottom half Q2. πŸ¦‹

πŸ’€ important: the columns of Q must be orthonormal. that's not a suggestion, that's a requirement. don't come at her with non-orthonormal columns, she will not be okay.

and if the projection comes out zero according to Kahan's criterion? she doesn't just give up β€” she returns some other vector from the orthogonal complement instead. it's chosen in an arbitrary but deterministic way. so like, random-looking but reproducible. main character energy ✨

Parameters

buckle up buttercup, here's every single one πŸ‘‘

  • M1
!>          M1 is INTEGER
!>           The dimension of X1 and the number of rows in Q1. 0 <= M1.
!>

so M1 is INTEGER, it's the dimension of X1 and the number of rows in Q1, and the constraint is 0 <= M1.

  • M2
!>          M2 is INTEGER
!>           The dimension of X2 and the number of rows in Q2. 0 <= M2.
!>

M2 is INTEGER too β€” dimension of X2, number of rows in Q2, and 0 <= M2.

  • N
!>          N is INTEGER
!>           The number of columns in Q1 and Q2. 0 <= N.
!>

N is INTEGER: how many columns Q1 and Q2 have. 0 <= N.

  • X1
!>          X1 is COMPLEX*16 array, dimension (M1)
!>           On entry, the top part of the vector to be orthogonalized.
!>           On exit, the top part of the projected vector.
!>

X1 is a COMPLEX*16 array, dimension (M1). on entry it's the top part of the vector to be orthogonalized, on exit it's the top part of the projected vector. glow-up moment 🫢

  • INCX1
!>          INCX1 is INTEGER
!>           Increment for entries of X1.
!>

INCX1 is INTEGER β€” the increment for entries of X1.

  • X2
!>          X2 is COMPLEX*16 array, dimension (M2)
!>           On entry, the bottom part of the vector to be
!>           orthogonalized. On exit, the bottom part of the projected
!>           vector.
!>

X2 is a COMPLEX*16 array, dimension (M2). on entry: the bottom part of the vector to be orthogonalized. on exit: the bottom part of the projected vector. same transformation, different half πŸ’œ

  • INCX2
!>          INCX2 is INTEGER
!>           Increment for entries of X2.
!>

INCX2 is INTEGER β€” increment for entries of X2.

  • Q1
!>          Q1 is COMPLEX*16 array, dimension (LDQ1, N)
!>           The top part of the orthonormal basis matrix.
!>

Q1 is a COMPLEX*16 array, dimension (LDQ1, N) β€” the top part of the orthonormal basis matrix. 🌈

  • LDQ1
!>          LDQ1 is INTEGER
!>           The leading dimension of Q1. LDQ1 >= M1.
!>

LDQ1 is INTEGER, the leading dimension of Q1, and it's gotta be LDQ1 >= M1. no cap.

  • Q2
!>          Q2 is COMPLEX*16 array, dimension (LDQ2, N)
!>           The bottom part of the orthonormal basis matrix.
!>

Q2 is a COMPLEX*16 array, dimension (LDQ2, N) β€” the bottom part of the orthonormal basis matrix.

  • LDQ2
!>          LDQ2 is INTEGER
!>           The leading dimension of Q2. LDQ2 >= M2.
!>

LDQ2 is INTEGER, the leading dimension of Q2, and LDQ2 >= M2. periodt.

  • WORK
!>          WORK is COMPLEX*16 array, dimension (LWORK)
!>

WORK is a COMPLEX*16 array, dimension (LWORK). that's it. that's the whole description. she works hard but she doesn't over-explain πŸ’…

  • LWORK
!>          LWORK is INTEGER
!>           The dimension of the array WORK. LWORK >= N.
!>

LWORK is INTEGER β€” the dimension of the array WORK, and LWORK >= N. don't skimp.

  • INFO
!>          INFO is INTEGER
!>           = 0:  successful exit.
!>           < 0:  if INFO = -i, the i-th argument had an illegal value.
!>

INFO is INTEGER and here's the tea:

  • = 0: successful exit πŸŽ‰
  • < 0: if INFO = -i, the i-th argument had an illegal value 🚨

🧚 Author 🧚

look at all these legends:

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

Definition at line 154 of file zunbdb5.f.


⭐ Author ⭐

Generated automatically by Doxygen for LAPACK from the source code. (so nobody hand-wrote this bit, the robots did πŸ€–βœ¨)


🌸 ok that's the whole page bestie, you're officially fluent in ZUNBDB5. go orthogonalize something. ily πŸ’–

β€” LAPACK, Version 3.12.0, and this page is /home/abui.../zunbdb5.f(3). mwah πŸ’‹

πŸ“¦ where this page comes from