CCHKHS(3)

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

πŸ’… CCHKHS(3) β€” Library Functions Manual πŸ’…

Bestie, this is the manual page for CCHKHS(3) β€” yes, the manual name is folded right up here, and now we’re reading the source-file tea together. ✨


πŸŽ€ NAME πŸŽ€

/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/TESTING/EIG/cchkhs.f

That whole path? That’s the NAME section. It’s giving β€œthis is the source file for CCHKHS(3),” and we are not editing one character of it. 🫢


✨ SYNOPSIS ✨

🫢 Functions/Subroutines 🫢

Okay so the subroutine signature is literally this, bestie:

       subroutine CCHKHS (nsizes, nn, ntypes, dotype, iseed, thresh, nounit, a,
           lda, h, t1, t2, u, ldu, z, uz, w1, w3, evectl, evectr, evecty,
           evectx, uu, tau, work, nwork, rwork, iwork, select, result, info)
           CCHKHS

πŸ’– Function/Subroutine Documentation πŸ’–

The whole typed-out signature is right here, and no, we are not skipping a single dimension( * ):

   subroutine CCHKHS (integer nsizes, integer, dimension( * ) nn, integer
       ntypes, logical, dimension( * ) dotype, integer, dimension( 4 ) iseed,
       real thresh, integer nounit, complex, dimension( lda, * ) a, integer
       lda, complex, dimension( lda, * ) h, complex, dimension( lda, * ) t1,
       complex, dimension( lda, * ) t2, complex, dimension( ldu, * ) u, integer
       ldu, complex, dimension( ldu, * ) z, complex, dimension( ldu, * ) uz,
       complex, dimension( * ) w1, complex, dimension( * ) w3, complex,
       dimension( ldu, * ) evectl, complex, dimension( ldu, * ) evectr,
       complex, dimension( ldu, * ) evecty, complex, dimension( ldu, * )
       evectx, complex, dimension( ldu, * ) uu, complex, dimension( * ) tau,
       complex, dimension( * ) work, integer nwork, real, dimension( * ) rwork,
       integer, dimension( * ) iwork, logical, dimension( * ) select, real,
       dimension( 16 ) result, integer info)
       CCHKHS

🌸 Purpose 🌸

CCHKHS checks the nonsymmetric eigenvalue problem routines. Here’s the routine-by-routine rundown, because every single one matters:

  • CGEHRD factors A as U H U', where ' means conjugate transpose, H is hessenberg, and U is unitary.
  • CUNGHR generates the unitary matrix U.
  • CUNMHR multiplies a matrix by the unitary matrix U.
  • CHSEQR factors H as Z T Z', where Z is unitary and T is upper triangular. It also computes the eigenvalues, w(1), ..., w(n); we define a diagonal matrix W whose (diagonal) entries are the eigenvalues.
  • CTREVC computes the left eigenvector matrix L and the right eigenvector matrix R for the matrix T. The columns of L are the complex conjugates of the left eigenvectors of T. The columns of R are the right eigenvectors of T. L is lower triangular, and R is upper triangular.
  • CHSEIN computes the left eigenvector matrix Y and the right eigenvector matrix X for the matrix H. The columns of Y are the complex conjugates of the left eigenvectors of H. The columns of X are the right eigenvectors of H. Y is lower triangular, and X is upper triangular.
  • CTREVC3 computes left and right eigenvector matrices from a Schur matrix T and backtransforms them with Z to eigenvector matrices L and R for A. L and R are GE matrices.

When CCHKHS is called, a number of matrix sizes and a number of matrix types are specified. For each size and each type of matrix, one matrix will be generated and used to test the nonsymmetric eigenroutines. For each matrix, 16 tests will be performed:

  1. | A - U H U**H | / ( |A| n ulp )
  2. | I - UU**H | / ( n ulp )
  3. | H - Z T Z**H | / ( |H| n ulp )
  4. | I - ZZ**H | / ( n ulp )
  5. | A - UZ H (UZ)**H | / ( |A| n ulp )
  6. | I - UZ (UZ)**H | / ( n ulp )
  7. | T(Z computed) - T(Z not computed) | / ( |T| ulp )
  8. | W(Z computed) - W(Z not computed) | / ( |W| ulp )
  9. | TR - RW | / ( |T| |R| ulp )
  10. | L**H T - W**H L | / ( |T| |L| ulp )
  11. | HX - XW | / ( |H| |X| ulp )
  12. | Y**H H - W**H Y | / ( |H| |Y| ulp )
  13. | AX - XW | / ( |A| |X| ulp )
  14. | Y**H A - W**H Y | / ( |A| |Y| ulp )
  15. | AR - RW | / ( |A| |R| ulp )
  16. | LA - WL | / ( |A| |L| ulp )

The sizes are specified by an array NN(1:NSIZES); the value of each element NN(j) specifies one size. The types are specified by a logical array DOTYPE( 1:NTYPES ); if DOTYPE(j) is .TRUE., then matrix type j will be generated. Currently, the list of possible types is:

  1. The zero matrix.
  2. The identity matrix.
  3. A (transposed) Jordan block, with 1's on the diagonal.
  4. A diagonal matrix with evenly spaced entries 1, ..., ULP and random complex angles. (ULP = (first number larger than 1) - 1 )
  5. A diagonal matrix with geometrically spaced entries 1, ..., ULP and random complex angles.
  6. A diagonal matrix with entries 1, ULP, ..., ULP and random complex angles.
  7. Same as (4), but multiplied by SQRT( overflow threshold )
  8. Same as (4), but multiplied by SQRT( underflow threshold )
  9. A matrix of the form U' T U, where U is unitary and T has evenly spaced entries 1, ..., ULP with random complex angles on the diagonal and random O(1) entries in the upper triangle.
  10. A matrix of the form U' T U, where U is unitary and T has geometrically spaced entries 1, ..., ULP with random complex angles on the diagonal and random O(1) entries in the upper triangle.
  11. A matrix of the form U' T U, where U is unitary and T has entries 1, ULP,..., ULP with random complex angles on the diagonal and random O(1) entries in the upper triangle.
  12. A matrix of the form U' T U, where U is unitary and T has complex eigenvalues randomly chosen from ULP < |z| < 1 and random O(1) entries in the upper triangle.
  13. A matrix of the form X' T X, where X has condition SQRT( ULP ) and T has evenly spaced entries 1, ..., ULP with random complex angles on the diagonal and random O(1) entries in the upper triangle.
  14. A matrix of the form X' T X, where X has condition SQRT( ULP ) and T has geometrically spaced entries 1, ..., ULP with random complex angles on the diagonal and random O(1) entries in the upper triangle.
  15. A matrix of the form X' T X, where X has condition SQRT( ULP ) and T has entries 1, ULP,..., ULP with random complex angles on the diagonal and random O(1) entries in the upper triangle.
  16. A matrix of the form X' T X, where X has condition SQRT( ULP ) and T has complex eigenvalues randomly chosen from ULP < |z| < 1 and random O(1) entries in the upper triangle.
  17. Same as (16), but multiplied by SQRT( overflow threshold )
  18. Same as (16), but multiplied by SQRT( underflow threshold )
  19. Nonsymmetric matrix with random entries chosen from |z| < 1
  20. Same as (19), but multiplied by SQRT( overflow threshold )
  21. Same as (19), but multiplied by SQRT( underflow threshold )
  • NSIZES β€” INTEGER. The number of sizes of matrices we're going to use. If it's zero, CCHKHS does absolutely nothing (respect the boundaries era πŸ’…). It must be at least zero. Not modified.
  • NN β€” INTEGER array, dimension (NSIZES). An array holding the sizes to use for the matrices. Zero values get skipped. The values must be at least zero. Not modified.
  • NTYPES β€” INTEGER. The number of elements in DOTYPE. If it's zero, CCHKHS does nothing. It must be at least zero. If it's MAXTYP+1 and NSIZES is 1, then one extra type, MAXTYP+1, is defined, and that one means "just use whatever matrix is already in A". This is only useful if DOTYPE(1:MAXTYP) is .FALSE. and DOTYPE(MAXTYP+1) is .TRUE.. Not modified.
  • DOTYPE β€” LOGICAL array, dimension (NTYPES). If DOTYPE(j) is .TRUE., then for each size in NN a matrix of that size and of type j gets generated. If NTYPES is smaller than the maximum number of types defined (PARAMETER MAXTYP), then types NTYPES+1 through MAXTYP will not be generated. If NTYPES is larger than MAXTYP, then DOTYPE(MAXTYP+1) through DOTYPE(NTYPES) just get ignored, no hard feelings. Not modified.
  • ISEED β€” INTEGER array, dimension (4). On entry, ISEED specifies the seed of the random number generator. The array elements should be between 0 and 4095; if they're not, they get reduced mod 4096. Also, ISEED(4) must be odd, no exceptions bestie. The random number generator uses a linear congruential sequence limited to small integers, so it should produce machine independent random numbers. The values of ISEED are changed on exit, and can be used in the next call to CCHKHS to continue the same random number sequence. Modified.
  • THRESH β€” REAL. A test will count as a fail if the value, computed as described above, exceeds THRESH. Note that the error is scaled to be O(1), so THRESH should be a reasonably small multiple of 1, like 10 or 100. In particular, it should not depend on the precision (single vs. double) or the size of the matrix. It must be at least zero. Not modified.
  • NOUNIT β€” INTEGER. The FORTRAN unit number for printing out error messages (like if a routine returns IINFO not equal to 0). Not modified.
  • A β€” COMPLEX array, dimension (LDA,max(NN)). Used to hold the matrix whose eigenvalues are to be computed. On exit, A contains the last matrix that was actually used. Modified.
  • LDA β€” INTEGER. The leading dimension of A, H, T1 and T2. It must be at least 1 and at least max( NN ). Not modified.
  • H β€” COMPLEX array, dimension (LDA,max(NN)). The upper hessenberg matrix computed by CGEHRD. On exit, H contains the Hessenberg form of the matrix in A. Modified.
  • T1 β€” COMPLEX array, dimension (LDA,max(NN)). The Schur (=) matrix computed by CHSEQR if Z is computed. On exit, T1 contains the Schur form of the matrix in A. Modified.
  • T2 β€” COMPLEX array, dimension (LDA,max(NN)). The Schur matrix computed by CHSEQR when Z is not computed. This should be identical to T1 πŸ‘€. Modified.
  • LDU β€” INTEGER. The leading dimension of U, Z, UZ and UU. It must be at least 1 and at least max( NN ). Not modified.
  • U β€” COMPLEX array, dimension (LDU,max(NN)). The unitary matrix computed by CGEHRD. Modified.
  • Z β€” COMPLEX array, dimension (LDU,max(NN)). The unitary matrix computed by CHSEQR. Modified.
  • UZ β€” COMPLEX array, dimension (LDU,max(NN)). The product of U times Z. Modified.
  • W1 β€” COMPLEX array, dimension (max(NN)). The eigenvalues of A, as computed by a full Schur decomposition H = Z T Z'. On exit, W1 contains the eigenvalues of the matrix in A. Modified.
  • W3 β€” COMPLEX array, dimension (max(NN)). The eigenvalues of A, as computed by a partial Schur decomposition (Z not computed, T only computed as much as is necessary for determining eigenvalues). On exit, W3 contains the eigenvalues of the matrix in A, possibly perturbed by CHSEIN. Modified.
  • EVECTL β€” COMPLEX array, dimension (LDU,max(NN)). The conjugate transpose of the (upper triangular) left eigenvector matrix for the matrix in T1. Modified.
  • EVECTR β€” COMPLEX array, dimension (LDU,max(NN)). The (upper triangular) right eigenvector matrix for the matrix in T1. Modified.
  • EVECTY β€” COMPLEX array, dimension (LDU,max(NN)). The conjugate transpose of the left eigenvector matrix for the matrix in H. Modified.
  • EVECTX β€” COMPLEX array, dimension (LDU,max(NN)). The right eigenvector matrix for the matrix in H. Modified.
  • UU β€” COMPLEX array, dimension (LDU,max(NN)). Details of the unitary matrix computed by CGEHRD. Modified.
  • TAU β€” COMPLEX array, dimension (max(NN)). Further details of the unitary matrix computed by CGEHRD. Modified.
  • WORK β€” COMPLEX array, dimension (NWORK). Workspace. Modified.
  • NWORK β€” INTEGER. The number of entries in WORK. NWORK >= 4*NN(j)*NN(j) + 2.
  • RWORK β€” REAL array, dimension (max(NN)). Workspace. Could be equivalenced to IWORK, but not SELECT. Modified.
  • IWORK β€” INTEGER array, dimension (max(NN)). Workspace. Modified.
  • SELECT β€” LOGICAL array, dimension (max(NN)). Workspace. Could be equivalenced to IWORK, but not RWORK. Modified.
  • RESULT β€” REAL array, dimension (16). The values computed by the fourteen tests described above. The values are currently limited to 1/ulp, to avoid overflow. Modified.
  • INFO β€” INTEGER. If it's 0, then everything ran OK πŸŽ‰.
    • -1: NSIZES < 0
    • -2: Some NN(j) < 0
    • -3: NTYPES < 0
    • -6: THRESH < 0
    • -9: LDA < 1 or LDA < NMAX, where NMAX is max( NN(j) ).
    • -14: LDU < 1 or LDU < NMAX.
    • -26: NWORK too small.
    • If CLATMR, CLATMS, or CLATME returns an error code, the absolute value of it is returned.
    • If 1, then CHSEQR could not find all the shifts.
    • If 2, then the EISPACK code (for small blocks) failed.
    • If >2, then 30*N iterations were not enough to find an eigenvalue or to decompose the problem.

Modified.


🧚 Some Local Variables and Parameters

  • ZERO, ONE β€” Real 0 and 1.
  • MAXTYP β€” The number of types defined.
  • MTEST β€” The number of tests defined: care must be taken that (1) the size of RESULT, (2) the number of tests actually performed, and (3) MTEST all agree. fr fr, don't let these drift.
  • NTEST β€” The number of tests performed on this matrix so far. This should be less than MTEST, and equal to it by the last test. It will be less if any of the routines being tested indicates that it could not compute the matrices that would be tested.
  • NMAX β€” Largest value in NN.
  • NMATS β€” The number of matrices generated so far.
  • NERRS β€” The number of tests which have exceeded THRESH so far (computed by SLAFTS).
  • COND, CONDS, IMODE β€” Values to be passed to the matrix generators.
  • ANORM β€” Norm of A; passed to matrix generators.
  • OVFL, UNFL β€” Overflow and underflow thresholds.
  • ULP, ULPINV β€” Finest relative precision and its inverse.
  • RTOVFL, RTUNFL, RTULP, RTULPI β€” Square roots of the previous 4 values.

The following four arrays decode JTYPE:

  • KTYPE(j) β€” The general type (1-10) for the type.
  • KMODE(j) β€” The MODE value to be passed to the matrix generator for the type.
  • KMAGN(j) β€” The order of magnitude ( O(1), O(overflow^(1/2) ), O(underflow^(1/2) ) )
  • KCONDS(j) β€” Selects whether CONDS is to be 1 or 1/sqrt(ulp). (0 means irrelevant.)

πŸ’– Author

Univ. of Tennessee

Univ. of California Berkeley

Univ. of Colorado Denver

NAG Ltd.

Definition at line 416 of file cchkhs.f.

πŸŽ€ AUTHOR πŸŽ€

Okay bestie, gather round, because this part is short and honestly kind of iconic in its own lowkey way πŸ‘‘

  • Generated automatically by Doxygen for LAPACK from the source code.

That's it. That's the whole author section. No mysterious human genius to credit here β€” the docs literally spawned themselves from the source code via Doxygen, like a little documentation glow-up that happens all on its own βœ¨πŸ¦‹

So no cap: if you're looking for someone to thank, thank the source code. The source code is the main character here πŸ’…


Fr fr though β€” auto-generated docs mean nobody hand-typed these pages, so if something reads a little stiff, that's Doxygen's vibe, not a person's πŸ™ˆ

And that's a wrap on CCHKHS(3), bestie! 🫢 This whole thing lives in LAPACK, Version 3.12.0, straight out of the source at /home/abui...IG/cchkhs.f(3). Go forth, check those Hermitian matrices, and slay πŸ’–πŸŒΈβ­

πŸ“¦ where this page comes from