SRC/zcgesv.f(3)

πŸ’… NAME πŸ’…

Okay so bestie, this page is SRC/zcgesv.f β€” and the manual name folded in near the top is SRC/zcgesv.f(3) from the Library Functions Manual. It's giving β€œlinear algebra but make it mixed precision” energy, and yes, we're doing the whole thing. πŸŽ€


✨ SYNOPSIS ✨

🌸 Functions/Subroutines 🌸

subroutine zcgesv (n, nrhs, a, lda, ipiv, b, ldb, x, ldx, work, swork, rwork, iter, info)

ZCGESV computes the solution to system of linear equations A * X = B for GE matrices (mixed precision with iterative refinement) β€” no cap, that's the whole vibe. πŸ’–


🫢 Function/Subroutine Documentation 🫢

🧚 subroutine zcgesv

subroutine zcgesv (integer n, integer nrhs, complex*16, dimension( lda, * ) a, integer lda, integer, dimension( * ) ipiv, complex*16, dimension( ldb, * ) b, integer ldb, complex*16, dimension( ldx, * ) x, integer ldx, complex*16, dimension( n, * ) work, complex, dimension( * ) swork, double precision, dimension( * ) rwork, integer iter, integer info)

ZCGESV computes the solution to system of linear equations A * X = B for GE matrices (mixed precision with iterative refinement). Iconic. πŸ’…

πŸ¦‹ Purpose πŸ¦‹

Okay so here's the agenda: ZCGESV computes the solution to a complex system of linear equations

A * X = B,

where A is an N-by-N matrix and X and B are N-by-NRHS matrices.

First move: ZCGESV attempts to factorize the matrix in COMPLEX and use this factorization within an iterative refinement procedure to produce a solution with COMPLEX*16 normwise backward error quality (see below). If the approach fails, the method switches to a COMPLEX*16 factorization and solve.

The iterative refinement is not going to be a winning strategy if the ratio COMPLEX performance over COMPLEX*16 performance is too small. A reasonable strategy should take the number of right-hand sides and the size of the matrix into account. This might be done with a call to ILAENV in the future. Up to now, we always try iterative refinement.

The iterative refinement process is stopped if

ITER > ITERMAX

or for all the RHS we have:

RNRM < SQRT(N)*XNRM*ANRM*EPS*BWDMAX

where

  • ITER is the number of the current iteration in the iterative refinement process
  • RNRM is the infinity-norm of the residual
  • XNRM is the infinity-norm of the solution
  • ANRM is the infinity-operator-norm of the matrix A
  • EPS is the machine epsilon returned by DLAMCH('Epsilon')

The value ITERMAX and BWDMAX are fixed to 30 and 1.0D+00 respectively. Periodt. πŸ’€βœ¨

🌈 Parameters 🌈

  • N β€” N is INTEGER; the number of linear equations, i.e., the order of the matrix A. N >= 0.
  • NRHS β€” NRHS is INTEGER; the number of right hand sides, i.e., the number of columns of the matrix B. NRHS >= 0.
  • A β€” A is COMPLEX*16 array, dimension (LDA,N). On entry, the N-by-N coefficient matrix A. On exit, if iterative refinement has been successfully used (INFO = 0 and ITER >= 0, see description below), then A is unchanged. If double precision factorization has been used (INFO = 0 and ITER < 0, see description below), then the array A contains the factors L and U from the factorization A = P*L*U; the unit diagonal elements of L are not stored.
  • LDA β€” LDA is INTEGER; the leading dimension of the array A. LDA >= max(1,N).
  • IPIV β€” IPIV is INTEGER array, dimension (N). The pivot indices that define the permutation matrix P; row i of the matrix was interchanged with row IPIV(i). Corresponds either to the single precision factorization (if INFO = 0 and ITER >= 0) or the double precision factorization (if INFO = 0 and ITER < 0).
  • B β€” B is COMPLEX*16 array, dimension (LDB,NRHS). The N-by-NRHS right hand side matrix B.
  • LDB β€” LDB is INTEGER; the leading dimension of the array B. LDB >= max(1,N).
  • X β€” X is COMPLEX*16 array, dimension (LDX,NRHS). If INFO = 0, the N-by-NRHS solution matrix X.
  • LDX β€” LDX is INTEGER; the leading dimension of the array X. LDX >= max(1,N).
  • WORK β€” WORK is COMPLEX*16 array, dimension (N,NRHS). This array is used to hold the residual vectors.
  • SWORK β€” SWORK is COMPLEX array, dimension (N*(N+NRHS)). This array is used to use the single precision matrix and the right-hand sides or solutions in single precision.
  • RWORK β€” RWORK is DOUBLE PRECISION array, dimension (N).
  • ITER β€” ITER is INTEGER.
    • < 0 β€” iterative refinement has failed, COMPLEX*16 factorization has been performed:
      • -1 : the routine fell back to full precision for implementation- or machine-specific reasons
      • -2 : narrowing the precision induced an overflow, the routine fell back to full precision
      • -3 : failure of CGETRF
      • -31: stop the iterative refinement after the 30th iterations
    • > 0 β€” iterative refinement has been successfully used. Returns the number of iterations.
  • INFO β€” INFO is INTEGER.
    • = 0: successful exit
    • < 0: if INFO = -i, the i-th argument had an illegal value
    • > 0: if INFO = i, U(i,i) computed in COMPLEX*16 is exactly zero. The factorization has been completed, but the factor U is exactly singular, so the solution could not be computed.
🚨 bestie, that U(i,i) exactly-zero situation is not a slay: the factorization is done, but U is exactly singular, so the solution could not be computed. 🚨

πŸ‘‘ Author πŸ‘‘

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

πŸ“ Definition at line 199 of file zcgesv.f. πŸ“

Definition at line 199 of file zcgesv.f.

πŸͺ„ Author (generated by Doxygen) πŸͺ„

Generated automatically by Doxygen for LAPACK from the source code.


Cute sign-off, bestie: the footer is giving LAPACK Version 3.12.0 with source page SRC/zcgesv.f(3) β€” source/version noted, vibe check passed, mwah πŸ’‹βœ¨

πŸ“¦ where this page comes from