ZLATDF(3)

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

πŸ’– ZLATDF(3) β€” like, the whole entire manual page, bestie πŸ’–

okay so first things first: this is a page from the LAPACK Library Functions Manual, and the file it lives in is literally

/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/zlatdf.f

and it's the man page zlatdf.f(3). that's the header situation, we move 🫢


✨ NAME ✨

/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/SRC/zlatdf.f

(yeah. that's the name. it's a whole path. iconic of Fortran, honestly πŸ’…)


🌸 SYNOPSIS 🌸

Functions/Subroutines

subroutine ZLATDF (ijob, n, z, ldz, rhs, rdsum, rdscal, ipiv, jpiv)

ZLATDF takes the LU factorization of the n-by-n matrix that was computed by sgetc2 and computes a contribution to the reciprocal Dif-estimate. slay.


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

subroutine ZLATDF (integer ijob, integer n, complex*16, dimension( ldz, * )
    z, integer ldz, complex*16, dimension( * ) rhs, double precision rdsum,
    double precision rdscal, integer, dimension( * ) ipiv, integer,
    dimension( * ) jpiv)

so ZLATDF uses the LU factorization of the n-by-n matrix computed by sgetc2, and computes a contribution to the reciprocal Dif-estimate. that's the whole vibe of this subroutine ✨

πŸ’œ Purpose πŸ’œ

!> !> ZLATDF computes the contribution to the reciprocal Dif-estimate !> by solving for x in Z * x = b, where b is chosen such that the norm !> of x is as large as possible. It is assumed that LU decomposition !> of Z has been computed by ZGETC2. On entry RHS = f holds the !> contribution from earlier solved sub-systems, and on return RHS = x. !> !> The factorization of Z returned by ZGETC2 has the form !> Z = P * L * U * Q, where P and Q are permutation matrices. L is lower !> triangular with unit diagonal elements and U is upper triangular. !>

so bestie, we're solving Z * x = b where b is picked so the norm of x is as big as it can possibly be 😭 it needs the LU decomposition of Z from ZGETC2, and the factorization it hands back looks like Z = P * L * U * Q β€” P and Q are permutation matrices, L is lower triangular with unit diagonal, U is upper triangular. periodt.


πŸ¦‹ Parameters πŸ¦‹

  • IJOB β€” this is an INTEGER. the whole personality of the routine changes based on it:
!> IJOB is INTEGER !> IJOB = 2: First compute an approximative null-vector e !> of Z using ZGECON, e is normalized and solve for !> Zx = +-e - f with the sign giving the greater value of !> 2-norm(x). About 5 times as expensive as Default. !> IJOB .ne. 2: Local look ahead strategy where !> all entries of the r.h.s. b is chosen as either +1 or !> -1. Default. !>

so like: IJOB = 2 means first compute an approximative null-vector e of Z using ZGECON, normalize e, and solve for Zx = +-e - f β€” picking whichever sign gives the greater value of 2-norm(x). heads up though, that path is about 5 times as expensive as the default 😭 IJOB .ne. 2 is the local look ahead strategy where all the entries of the r.h.s. b are chosen as either +1 or -1. that one's the Default.

  • N β€” INTEGER. the number of columns of the matrix Z. that's it, that's the whole job πŸ’…
!> N is INTEGER !> The number of columns of the matrix Z. !>
  • Z β€” COMPLEX*16 array, dimension (LDZ, N). on entry it holds the LU part of the factorization of the n-by-n matrix Z computed by ZGETC2: Z = P * L * U * Q ✨
!> Z is COMPLEX*16 array, dimension (LDZ, N) !> On entry, the LU part of the factorization of the n-by-n !> matrix Z computed by ZGETC2: Z = P * L * U * Q !>
  • LDZ β€” INTEGER. the leading dimension of the array Z. and it says LDA >= max(1, N) β€” yes it literally says LDA, that's the original text, we do not edit, we do not fix, we respect the source πŸ™ˆ
!> LDZ is INTEGER !> The leading dimension of the array Z. LDA >= max(1, N). !>
  • RHS β€” COMPLEX*16 array, dimension (N). on entry it contains contributions from other subsystems; on exit it contains the solution of the subsystem, with entries according to the value of IJOB (see above πŸ‘€)
!> RHS is COMPLEX*16 array, dimension (N). !> On entry, RHS contains contributions from other subsystems. !> On exit, RHS contains the solution of the subsystem with !> entries according to the value of IJOB (see above). !>
  • RDSUM β€” DOUBLE PRECISION. on entry, the sum of squares of computed contributions to the Dif-estimate under computation by ZTGSYL, where the scaling factor RDSCAL (see below) has been factored out. on exit, the corresponding sum of squares updated with the contributions from the current sub-system. if TRANS = 'T', RDSUM is not touched. and a NOTE, bestie: RDSUM only makes sense when ZTGSY2 is called by CTGSYL πŸ‘‘
!> RDSUM is DOUBLE PRECISION !> On entry, the sum of squares of computed contributions to !> the Dif-estimate under computation by ZTGSYL, where the !> scaling factor RDSCAL (see below) has been factored out. !> On exit, the corresponding sum of squares updated with the !> contributions from the current sub-system. !> If TRANS = 'T' RDSUM is not touched. !> NOTE: RDSUM only makes sense when ZTGSY2 is called by CTGSYL. !>
  • RDSCAL β€” DOUBLE PRECISION. on entry, the scaling factor used to prevent overflow in RDSUM. on exit, RDSCAL is updated w.r.t. the current contributions in RDSUM. if TRANS = 'T', RDSCAL is not touched. NOTE again: RDSCAL only makes sense when ZTGSY2 is called by ZTGSYL 🧚
!> RDSCAL is DOUBLE PRECISION !> On entry, scaling factor used to prevent overflow in RDSUM. !> On exit, RDSCAL is updated w.r.t. the current contributions !> in RDSUM. !> If TRANS = 'T', RDSCAL is not touched. !> NOTE: RDSCAL only makes sense when ZTGSY2 is called by !> ZTGSYL. !>
  • IPIV β€” INTEGER array, dimension (N). the pivot indices; for 1 <= i <= N, row i of the matrix has been interchanged with row IPIV(i) πŸ”₯
!> IPIV is INTEGER array, dimension (N). !> The pivot indices; for 1 <= i <= N, row i of the !> matrix has been interchanged with row IPIV(i). !>
  • JPIV β€” INTEGER array, dimension (N). the pivot indices; for 1 <= j <= N, column j of the matrix has been interchanged with column JPIV(j) πŸ’«
!> JPIV is INTEGER array, dimension (N). !> The pivot indices; for 1 <= j <= N, column j of the !> matrix has been interchanged with column JPIV(j). !>

🌈 Author 🌈

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

all four of them, credited, no cap 🫢


⭐ Further Details ⭐

this routine is a further developed implementation of algorithm BSOLVE in [1] using complete pivoting in the LU factorization. that's the tea β˜•


πŸ“ Contributors: πŸ“

Bo Kagstrom and Peter Poromaa, Department of Computing Science, Umea University, S-901 87 Umea, Sweden.


πŸ’€ References: πŸ’€

  • [1] Bo Kagstrom and Lars Westin, Generalized Schur Methods with Condition Estimators for Solving the Generalized Sylvester Equation, IEEE Transactions on Automatic Control, Vol. 34, No. 7, July 1989, pp 745-751.
  • [2] Peter Poromaa, On Efficient and Robust Estimators for the Separation between two Regular Matrix Pairs with Applications in Condition Estimation. Report UMINF-95.05, Department of Computing Science, Umea University, S-901 87 Umea, Sweden, 1995.

πŸ”₯ Definition πŸ”₯

Definition at line 167 of file zlatdf.f. iykyk πŸ“


πŸ‘‘ Author πŸ‘‘

Generated automatically by Doxygen for LAPACK from the source code. (not me, Doxygen did that. i just added the sparkles ✨)


aaaand that's the whole page, bestie β€” no options skipped, no numbers fudged, no lore lost πŸ’– this was LAPACK, Version 3.12.0, living at /home/abui...RC/zlatdf.f(3), and i'm obsessed with her. mwah πŸ’‹πŸŽ€

πŸ“¦ where this page comes from