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

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

πŸ’… NAME πŸ’…

ok so bestie, this is <pink>/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/TESTING/LIN/dlavsy_rook.f` β€” yes that's the whole entire path, no I'm not kidding, it's giving "my professor named the file with his whole address" energy 😭 and it lives in the LAPACK library functions manual, section 3. Slay.


✨ SYNOPSIS ✨

🧚 Functions/Subroutines

  • subroutine DLAVSY_ROOK (uplo, trans, diag, n, nrhs, a, lda, ipiv, b, ldb, info) β€” the icon herself. That's it. That's the name. She's serving all caps and underscores.
subroutine DLAVSY_ROOK (uplo, trans, diag, n, nrhs, a, lda, ipiv, b, ldb, info)

πŸ‘‘ Function/Subroutine Documentation πŸ‘‘

🌸 subroutine DLAVSY_ROOK

subroutine DLAVSY_ROOK (character uplo, character trans, character diag,
    integer n, integer nrhs, double precision, dimension( lda, * ) a,
    integer lda, integer, dimension( * ) ipiv, double precision, dimension(
    ldb, * ) b, integer ldb, integer info)

DLAVSY_ROOK. She's the main character, obviously. πŸ’–

πŸ¦‹ Purpose:

!>
!> DLAVSY_ROOK  performs one of the matrix-vector operations
!>    x := A*x  or  x := A'*x,
!> where x is an N element vector and A is one of the factors
!> from the block U*D*U' or L*D*L' factorization computed by DSYTRF_ROOK.
!>
!> If TRANS = 'N', multiplies by U  or U * D  (or L  or L * D)
!> If TRANS = 'T', multiplies by U' or D * U' (or L' or D * L')
!> If TRANS = 'C', multiplies by U' or D * U' (or L' or D * L')
!>

So basically: DLAVSY_ROOK does one of those matrix-vector glow-ups, x := A*x or x := A'*x, where x is an N-element vector and A is one of the factors from the block U*D*U' or L*D*L' factorization that DSYTRF_ROOK computed. Yep, DSYTRF_ROOK is her bestie from earlier in the story. πŸ”₯

  • If TRANS = 'N', you multiply by U or U * D (or L or L * D)
  • If TRANS = 'T', you multiply by U' or D * U' (or L' or D * L')
  • If TRANS = 'C', you multiply by U' or D * U' (or L' or D * L')

Note how 'T' and 'C' do literally the exact same thing here β€” no cap, that's just how she is. πŸ’€


πŸ’œ Parameters

πŸ“ UPLO

!>          UPLO is CHARACTER*1
!>          Specifies whether the factor stored in A is upper or lower
!>          triangular.
!>          = 'U':  Upper triangular
!>          = 'L':  Lower triangular
!>

Tells you whether the factor chillin' inside A is upper or lower triangular. Choose your fighter: 'U' for upper triangular, 'L' for lower triangular. ✨

🌈 TRANS

!>          TRANS is CHARACTER*1
!>          Specifies the operation to be performed:
!>          = 'N':  x := A*x
!>          = 'T':  x := A'*x
!>          = 'C':  x := A'*x
!>

Which operation are we doing today, bestie? 'N' gives you x := A*x, 'T' gives you x := A'*x, and 'C' gives you x := A'*x too (yes, twins πŸ‘―). 🫢

πŸŽ€ DIAG

!>          DIAG is CHARACTER*1
!>          Specifies whether or not the diagonal blocks are unit
!>          matrices.  If the diagonal blocks are assumed to be unit,
!>          then A = U or A = L, otherwise A = U*D or A = L*D.
!>          = 'U':  Diagonal blocks are assumed to be unit matrices.
!>          = 'N':  Diagonal blocks are assumed to be non-unit matrices.
!>

This one decides whether the diagonal blocks are unit matrices or not. If they're assumed unit, then A = U or A = L; otherwise A = U*D or A = L*D. Pick 'U' for "yep, unit matrices, we said what we said" or 'N' for "nope, non-unit." πŸ’…

🧚 N

!>          N is INTEGER
!>          The number of rows and columns of the matrix A.  N >= 0.
!>

The number of rows and columns of matrix A β€” she's square, obviously. Constraint: N >= 0. ✨

πŸ¦‹ NRHS

!>          NRHS is INTEGER
!>          The number of right hand sides, i.e., the number of vectors
!>          x to be multiplied by A.  NRHS >= 0.
!>

The number of right hand sides, aka how many vectors x are getting multiplied by A. Constraint: NRHS >= 0. 🌸

πŸ’– A

!>          A is DOUBLE PRECISION array, dimension (LDA,N)
!>          The block diagonal matrix D and the multipliers used to
!>          obtain the factor U or L as computed by DSYTRF_ROOK.
!>          Stored as a 2-D triangular matrix.
!>

A DOUBLE PRECISION array, dimension (LDA,N). She's holding the block diagonal matrix D and the multipliers used to obtain the factor U or L, exactly as computed by DSYTRF_ROOK. Stored as a 2-D triangular matrix β€” lowkey fancy. πŸ”₯

⭐ LDA

!>          LDA is INTEGER
!>          The leading dimension of the array A.  LDA >= max(1,N).
!>

Integer, the leading dimension of array A. Constraint is LDA >= max(1,N) β€” don't you dare go smaller. 😀

🧚 IPIV

!>          IPIV is INTEGER array, dimension (N)
!>          Details of the interchanges and the block structure of D,
!>          as determined by DSYTRF_ROOK.
!>
!>          If UPLO = 'U':
!>               If IPIV(k) > 0, then rows and columns k and IPIV(k)
!>               were interchanged and D(k,k) is a 1-by-1 diagonal block.
!>               (If IPIV( k ) = k, no interchange was done).
!>
!>               If IPIV(k) < 0 and IPIV(k-1) < 0, then rows and
!>               columns k and -IPIV(k) were interchanged and rows and
!>               columns k-1 and -IPIV(k-1) were inerchaged,
!>               D(k-1:k,k-1:k) is a 2-by-2 diagonal block.
!>
!>          If UPLO = 'L':
!>               If IPIV(k) > 0, then rows and columns k and IPIV(k)
!>               were interchanged and D(k,k) is a 1-by-1 diagonal block.
!>               (If IPIV( k ) = k, no interchange was done).
!>
!>               If IPIV(k) < 0 and IPIV(k+1) < 0, then rows and
!>               columns k and -IPIV(k) were interchanged and rows and
!>               columns k+1 and -IPIV(k+1) were inerchaged,
!>               D(k:k+1,k:k+1) is a 2-by-2 diagonal block.
!>

Integer array, dimension (N). She's the receipts πŸ“‹ β€” details of the interchanges and the block structure of D, as determined by DSYTRF_ROOK.

If UPLO = 'U':

  • If IPIV(k) > 0, then rows and columns k and IPIV(k) were interchanged and D(k,k) is a 1-by-1 diagonal block. (If IPIV( k ) = k, no interchange was done β€” she stayed put.)
  • If IPIV(k) < 0 and IPIV(k-1) < 0, then rows and columns k and -IPIV(k) were interchanged and rows and columns k-1 and -IPIV(k-1) were inerchaged, and D(k-1:k,k-1:k) is a 2-by-2 diagonal block. πŸ‘€

If UPLO = 'L':

  • If IPIV(k) > 0, then rows and columns k and IPIV(k) were interchanged and D(k,k) is a 1-by-1 diagonal block. (If IPIV( k ) = k, no interchange was done.)
  • If IPIV(k) < 0 and IPIV(k+1) < 0, then rows and columns k and -IPIV(k) were interchanged and rows and columns k+1 and -IPIV(k+1) were inerchaged, and D(k:k+1,k:k+1) is a 2-by-2 diagonal block. πŸ’€
fun fact: "inerchaged" is a typo that lives in the actual source, so it lives here too. we don't fix, we preserve. 🫢

🌟 B

!>          B is DOUBLE PRECISION array, dimension (LDB,NRHS)
!>          On entry, B contains NRHS vectors of length N.
!>          On exit, B is overwritten with the product A * B.
!>

DOUBLE PRECISION array, dimension (LDB,NRHS). On entry, B contains NRHS vectors of length N. On exit, B gets overwritten with the product A * B β€” so like, screenshot your original data first if you needed it, bestie πŸ˜­πŸ’€

πŸŽ€ LDB

!>          LDB is INTEGER
!>          The leading dimension of the array B.  LDB >= max(1,N).
!>

Integer, leading dimension of array B. Constraint: LDB >= max(1,N). Iconic and non-negotiable. πŸ’…

πŸ“ INFO

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

The vibe check at the end πŸ’« β€” INFO is INTEGER:

  • = 0: successful exit, we ate and left no crumbs πŸ”₯
  • < 0: if INFO = -k, the k-th argument had an illegal value πŸ™ˆ

🌈 Author

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

Definition at line 155 of file dlavsy_rook.f. ✨


πŸ’œ Author πŸ’œ

Generated automatically by Doxygen for LAPACK from the source code. (The robots did this one, not me β€” she's ✨automated✨.)


k bye bestie, mwah πŸ’‹ β€” this page was brought to you by LAPACK, Version 3.12.0, dated at the bottom of the original as /home/abui...vsy_rook.f(3). go forth and multiply your matrices responsibly πŸ«ΆπŸ’–

πŸ“¦ where this page comes from