DCHKHS(3)

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

πŸ’– NAME πŸ’–

DCHKHS(3) β€” from the Library Functions Manual. The header has the title DCHKHS(3) and the path-ish bit /home/abui...IG/dchkhs.f(3) hanging around it, and the actual file path in the NAME entry is:

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

✨ SYNOPSIS ✨

🫢 Functions/Subroutines 🫢

subroutine DCHKHS (nsizes, nn, ntypes, dotype, iseed, thresh, nounit, a,
    lda, h, t1, t2, u, ldu, z, uz, wr1, wi1, wr2, wi2, wr3, wi3, evectl,
    evectr, evecty, evectx, uu, tau, work, nwork, iwork, select, result,
    info)
    DCHKHS

🌸 Function/Subroutine Documentation 🌸

       subroutine DCHKHS (integer nsizes, integer, dimension( * ) nn, integer
       ntypes, logical, dimension( * ) dotype, integer, dimension( 4 ) iseed,
       double precision thresh, integer nounit, double precision, dimension(
       lda, * ) a, integer lda, double precision, dimension( lda, * ) h, double
       precision, dimension( lda, * ) t1, double precision, dimension( lda, * )
       t2, double precision, dimension( ldu, * ) u, integer ldu, double
       precision, dimension( ldu, * ) z, double precision, dimension( ldu, * )
       uz, double precision, dimension( * ) wr1, double precision, dimension( *
       ) wi1, double precision, dimension( * ) wr2, double precision,
       dimension( * ) wi2, double precision, dimension( * ) wr3, double
       precision, dimension( * ) wi3, double precision, dimension( ldu, * )
       evectl, double precision, dimension( ldu, * ) evectr, double precision,
       dimension( ldu, * ) evecty, double precision, dimension( ldu, * )
       evectx, double precision, dimension( ldu, * ) uu, double precision,
       dimension( * ) tau, double precision, dimension( * ) work, integer
       nwork, integer, dimension( * ) iwork, logical, dimension( * ) select,
       double precision, dimension( 16 ) result, integer info)
       DCHKHS

πŸŽ€ Purpose πŸŽ€

bestie, <pink>DCHKHS</pink> checks the nonsymmetric eigenvalue problem routines. πŸ’…

  • DGEHRD factors A as U H U' , where ' means transpose, H is hessenberg, and U is an orthogonal matrix.
  • DORGHR generates the orthogonal matrix U.
  • DORMHR multiplies a matrix by the orthogonal matrix U.
  • DHSEQR factors H as Z T Z' , where Z is orthogonal and T is , and the eigenvalue vector W.
  • DTREVC computes the left and right eigenvector matrices L and R for T. L is lower quasi-triangular, and R is upper quasi-triangular.
  • DHSEIN computes the left and right eigenvector matrices Y and X for H, using inverse iteration.
  • DTREVC3 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 DCHKHS is called, a number of matrix () and a number of matrix 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**T | / ( |A| n ulp )
  • (2) β€” | I - UU**T | / ( n ulp )
  • (3) β€” | H - Z T Z**T | / ( |H| n ulp )
  • (4) β€” | I - ZZ**T | / ( n ulp )
  • (5) β€” | A - UZ H (UZ)**T | / ( |A| n ulp )
  • (6) β€” | I - UZ (UZ)**T | / ( 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 are specified by an array NN(1:NSIZES); the value of each element NN(j) specifies one size. The are specified by a logical array DOTYPE( 1:NTYPES ); if DOTYPE(j) is .TRUE., then matrix type 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 signs. (ULP = (first number larger than 1) - 1)
  • (5) β€” A diagonal matrix with geometrically spaced entries 1, ..., ULP and random signs.
  • (6) β€” A diagonal matrix with entries 1, ULP, ..., ULP and random signs.
  • (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 orthogonal and T has evenly spaced entries 1, ..., ULP with random signs on the diagonal and random O(1) entries in the upper triangle.
  • (10) β€” A matrix of the form U' T U, where U is orthogonal and T has geometrically spaced entries 1, ..., ULP with random signs on the diagonal and random O(1) entries in the upper triangle.
  • (11) β€” A matrix of the form U' T U, where U is orthogonal and T has entries 1, ULP,..., ULP with random signs on the diagonal and random O(1) entries in the upper triangle.
  • (12) β€” A matrix of the form U' T U, where U is orthogonal and T has real or complex conjugate paired eigenvalues randomly chosen from ( ULP, 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 signs 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 signs 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 signs 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 real or complex conjugate paired eigenvalues randomly chosen from ( ULP, 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 (-1,1).
  • (20) β€” Same as (19), but multiplied by SQRT( overflow threshold )
  • (21) β€” Same as (19), but multiplied by SQRT( underflow threshold )
  • NSIZES β€” INTEGER β€” how many different matrix sizes we're gonna test. If it's zero, DCHKHS literally does nothing, no thoughts head empty. It must be at least zero. Not modified.
  • NN β€” INTEGER array, dimension (NSIZES) β€” the actual sizes the matrices will be, bestie. Zero values get skipped, no cap. All values must be at least zero. Not modified.
  • NTYPES β€” INTEGER β€” how many elements live in DOTYPE. If it's zero, DCHKHS again does nothing (slay, but also why are you here). Must be at least zero. Special case alert 🚨: if it's MAXTYP+1 and NSIZES is 1, then an extra type, MAXTYP+1, gets defined β€” which just uses whatever matrix is already sitting in A. That's only useful when 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 every size in NN a matrix of that size and of type j gets generated, periodt. If NTYPES is smaller than the max number of types defined (PARAMETER MAXTYP), then types NTYPES+1 through MAXTYP don't get generated at all. And if NTYPES is bigger than MAXTYP, then DOTYPE(MAXTYP+1) through DOTYPE(NTYPES) are just ignored. Not modified.
  • ISEED β€” INTEGER array, dimension (4) β€” the seed of the random number generator, on entry. The elements should be between 0 and 4095; if they're not, they get reduced mod 4096 (the algorithm said no ma'am). Also ISEED(4) must be odd β€” like, non-negotiable. The generator uses a linear congruential sequence limited to small integers, so it should produce machine independent random numbers. The values of ISEED get changed on exit and can be reused in the next call to DCHKHS to keep the same random number sequence going. Modified.
  • THRESH β€” DOUBLE PRECISION β€” a test counts as failed if the error, 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, e.g. 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 used for printing out error messages (like, e.g., if a routine returns IINFO not equal to 0). Not modified.
  • A β€” DOUBLE PRECISION array, dimension (LDA,max(NN)) β€” holds the matrix whose eigenvalues are gonna be computed. On exit, A contains the last matrix 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 β€” DOUBLE PRECISION array, dimension (LDA,max(NN)) β€” the upper hessenberg matrix computed by DGEHRD. On exit, H contains the Hessenberg form of the matrix in A. Modified.
  • T1 β€” DOUBLE PRECISION array, dimension (LDA,max(NN)) β€” the Schur (=) matrix computed by DHSEQR if Z is computed. On exit, T1 contains the Schur form of the matrix in A. Modified.
  • T2 β€” DOUBLE PRECISION array, dimension (LDA,max(NN)) β€” the Schur matrix computed by DHSEQR when Z is not computed. This should be identical to T1 β€” like, that's the whole vibe check. 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 β€” DOUBLE PRECISION array, dimension (LDU,max(NN)) β€” the orthogonal matrix computed by DGEHRD. Modified.
  • Z β€” DOUBLE PRECISION array, dimension (LDU,max(NN)) β€” the orthogonal matrix computed by DHSEQR. Modified.
  • UZ β€” DOUBLE PRECISION array, dimension (LDU,max(NN)) β€” the product of U times Z. Modified.
  • WR1 β€” DOUBLE PRECISION array, dimension (max(NN))
  • WI1 β€” DOUBLE PRECISION array, dimension (max(NN)) β€” the real and imaginary parts of the eigenvalues of A, as computed when Z is computed. On exit, WR1 + WI1*i are the eigenvalues of the matrix in A. Modified.
  • WR2 β€” DOUBLE PRECISION array, dimension (max(NN))
  • WI2 β€” DOUBLE PRECISION array, dimension (max(NN)) β€” the real and imaginary parts of the eigenvalues of A, as computed when T is computed but not Z. On exit, WR2 + WI2*i are the eigenvalues of the matrix in A. Modified.
  • WR3 β€” DOUBLE PRECISION array, dimension (max(NN))
  • WI3 β€” DOUBLE PRECISION array, dimension (max(NN)) β€” like WR1, WI1, these arrays contain the eigenvalues of A, but the ones computed when DHSEQR only computes the eigenvalues, i.e. not the Schur vectors and no more of the Schur form than is necessary for computing the eigenvalues. Modified.
  • EVECTL β€” DOUBLE PRECISION array, dimension (LDU,max(NN)) β€” the (upper triangular) left eigenvector matrix for the matrix in T1. For complex conjugate pairs, the real part is stored in one row and the imaginary part in the next. Modified.
  • EVEZTR β€” DOUBLE PRECISION array, dimension (LDU,max(NN)) β€” the (upper triangular) right eigenvector matrix for the matrix in T1. For complex conjugate pairs, the real part is stored in one column and the imaginary part in the next. Modified.
  • EVECTY β€” DOUBLE PRECISION array, dimension (LDU,max(NN)) β€” the left eigenvector matrix for the matrix in H. For complex conjugate pairs, the real part is stored in one row and the imaginary part in the next. Modified.
  • EVECTX β€” DOUBLE PRECISION array, dimension (LDU,max(NN)) β€” the right eigenvector matrix for the matrix in H. For complex conjugate pairs, the real part is stored in one column and the imaginary part in the next. Modified.
  • UU β€” DOUBLE PRECISION array, dimension (LDU,max(NN)) β€” details of the orthogonal matrix computed by DGEHRD. Modified.
  • TAU β€” DOUBLE PRECISION array, dimension(max(NN)) β€” further details of the orthogonal matrix computed by DGEHRD. Modified.
  • WORK β€” DOUBLE PRECISION array, dimension (NWORK) β€” workspace, bestie. Modified.
  • NWORK β€” INTEGER β€” the number of entries in WORK. Gotta satisfy NWORK >= 4*NN(j)*NN(j) + 2.
  • IWORK β€” INTEGER array, dimension (max(NN)) β€” workspace. Modified.
  • SELECT β€” LOGICAL array, dimension (max(NN)) β€” workspace. Modified.
  • RESULT β€” DOUBLE PRECISION 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 β€” literally the receipts. If 0, then everything ran OK ✨. Otherwise:
    • -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.
    • -28: NWORK too small.
    • If DLATMR, SLATMS, or SLATME returns an error code, the absolute value of it is returned.
    • If 1, then DHSEQR 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 🌸

okay so these aren't arguments, they're the backstage crew, but you should still know them:

  • ZERO, ONE β€” real 0 and 1. iconic, no notes.
  • 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 agree. fr fr, keep these in sync.
  • 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'll 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 DLAFTS).
  • 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 type .
  • KMODE(j) β€” the MODE value to be passed to the matrix generator for 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 417 of file dchkhs.f. ✨

🌸 Author

Generated automatically by Doxygen for LAPACK from the source code.


Okay bestie, that’s the whole DCHKHS(3) page! Footer vibe: LAPACK Version 3.12.0, file /home/abui...IG/dchkhs.f(3) β€” source/version/date footer spot included, no cap πŸ’…πŸŽ€

πŸ“¦ where this page comes from