CCHKST2STG(3)

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

πŸ’… NAME πŸ’…

Okay bestie, buckle up β€” this page lives in the Library Functions Manual and it's literally about this one file:

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

Yep, that's the whole path, every character, no cap. It's a Fortran file (.f, the classic ✨) hanging out in LAPACK's TESTING/EIG corner, and honestly? It's giving "test driver that takes its job very seriously." πŸŽ€


✨ SYNOPSIS ✨

Functions/Subroutines

So under this heading we've got the subroutine, and here's the short-and-sweet calling card, verbatim:

subroutine CCHKST2STG (nsizes, nn, ntypes, dotype, iseed, thresh,
    nounit, a, lda, ap, sd, se, d1, d2, d3, d4, d5, wa1, wa2, wa3, wr,
    u, ldu, v, vp, tau, z, work, lwork, rwork, lrwork, iwork, liwork,
    result, info)
    CCHKST2STG

That's 35 arguments, bestie. Thirty-five. Not me counting them twice 😭. It's not a vibe, it's a whole lifestyle.


πŸ¦‹ Function/Subroutine Documentation πŸ¦‹

Okay so the full signature with all the types spelled out β€” and yes, I'm keeping every single dimension( * ) because the details matter and we do NOT skip:

subroutine CCHKST2STG (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( * ) ap, real, dimension( * ) sd, real,
    dimension( * ) se, real, dimension( * ) d1, real, dimension( * ) d2,
    real, dimension( * ) d3, real, dimension( * ) d4, real, dimension( * )
    d5, real, dimension( * ) wa1, real, dimension( * ) wa2, real, dimension(
    * ) wa3, real, dimension( * ) wr, complex, dimension( ldu, * ) u,
    integer ldu, complex, dimension( ldu, * ) v, complex, dimension( * ) vp,
    complex, dimension( * ) tau, complex, dimension( ldu, * ) z, complex,
    dimension( * ) work, integer lwork, real, dimension( * ) rwork, integer
    lrwork, integer, dimension( * ) iwork, integer liwork, real, dimension(
    * ) result, integer info)
    CCHKST2STG

Let me just do a little scavenger hunt through those, because it's iconic honestly:

  • integer nsizes β€” an integer. We love a scaler moment.
  • integer, dimension( * ) nn β€” integer array, size whatever you pass.
  • integer ntypes β€” another integer, living its truth.
  • logical, dimension( * ) dotype β€” logical array, AKA the booleans.
  • integer, dimension( 4 ) iseed β€” exactly four integers, no more no less, that's the seed array.
  • real thresh β€” a real (single precision) threshold.
  • integer nounit β€” integer, and the name is giving "logical unit? nope, no unit" πŸ’€.
  • complex, dimension( lda, * ) a β€” the big complex matrix, leading dimension lda.
  • integer lda β€” leading dimension of a.
  • complex, dimension( * ) ap β€” packed complex storage, vibing as a 1-D array.
  • real, dimension( * ) sd β€” real array.
  • real, dimension( * ) se β€” real array, se-cond one πŸ“.
  • real, dimension( * ) d1 β€” real array.
  • real, dimension( * ) d2 β€” real array.
  • real, dimension( * ) d3 β€” real array.
  • real, dimension( * ) d4 β€” real array.
  • real, dimension( * ) d5 β€” real array, and yes we ran all the way to five.
  • real, dimension( * ) wa1 β€” workspace-ish real array.
  • real, dimension( * ) wa2 β€” another one.
  • real, dimension( * ) wa3 β€” third one, slay.
  • real, dimension( * ) wr β€” real array.
  • complex, dimension( ldu, * ) u β€” complex matrix, leading dimension ldu.
  • integer ldu β€” leading dimension of u (and v and z, iykyk).
  • complex, dimension( ldu, * ) v β€” complex matrix, also ldu.
  • complex, dimension( * ) vp β€” packed complex, one-dimensional.
  • complex, dimension( * ) tau β€” complex array of them tau values.
  • complex, dimension( ldu, * ) z β€” complex matrix, ldu again.
  • complex, dimension( * ) work β€” complex workspace.
  • integer lwork β€” length of work.
  • real, dimension( * ) rwork β€” real workspace.
  • integer lrwork β€” length of rwork.
  • integer, dimension( * ) iwork β€” integer workspace.
  • integer liwork β€” length of iwork.
  • real, dimension( * ) result β€” real array where the results land.
  • integer info β€” the classic info, the final boss of every LAPACK signature πŸ‘‘.

And then it just says CCHKST2STG at the end, like a little mic drop. Periodt. πŸ’…


🌸 Purpose 🌸

Okay so the Purpose section is up next β€” and it's literally empty in this part of the page, so hold that thought, bestie. The tea is coming. πŸ«–βœ¨

No cap: I'm not gonna make anything up here. Nothing's written yet, so nothing gets added. We keep it 100.

okay so real talk, here's the lore on what CCHKST2STG is actually checking πŸ’…

CCHKST2STG checks the Hermitian eigenvalue problem routines using the 2-stage reduction techniques. And here's the catch, bestie β€” since the generation of Q or the vectors is not available in this release, we only compare the eigenvalue resulting when using the 2-stage to the one considered as reference using the standard 1-stage reduction CHETRD. So the whole plan is: we call the standard CHETRD and compute D1 using DSTEQR, then we call the 2-stage CHETRD_2STAGE with Upper and Lower and we compute D2 and D3 using DSTEQR, and then we replaced tests 3 and 4 by tests 11 and 12. Tests 1 and 2 remain to verify that the 1-stage results are OK and can be trusted. This testing routine will converge to the CCHKST in the next release when vectors and generation of Q will be implemented. no cap, it's a whole glow-up in progress 😭


πŸ¦‹ the cast of characters (aka what each routine does)

  • CHETRD factors A as U S U* , where * means conjugate transpose, S is real symmetric tridiagonal, and U is unitary. CHETRD can use either just the lower or just the upper triangle of A; CCHKST2STG checks both cases. U is represented as a product of Householder transformations, whose vectors are stored in the first n-1 columns of V, and whose scale factors are in TAU. iconic.
  • CHPTRD does the same as CHETRD, except that A and V are stored in packed format.
  • CUNGTR constructs the matrix U from the contents of V and TAU. slay.
  • CUPGTR constructs the matrix U from the contents of VP and TAU.
  • CSTEQR factors S as Z D1 Z* , where Z is the unitary matrix of eigenvectors and D1 is a diagonal matrix with the eigenvalues on the diagonal. D2 is the matrix of eigenvalues computed when Z is not computed. iykyk.
  • SSTERF computes D3, the matrix of eigenvalues, by the PWK method, which does not yield eigenvectors. (no eigenvectors, no problem 🫢)
  • CPTEQR factors S as Z4 D4 Z4* , for a Hermitian positive definite tridiagonal matrix. D5 is the matrix of eigenvalues computed when Z is not computed.
  • SSTEBZ computes selected eigenvalues. WA1, WA2, and WA3 will denote eigenvalues computed to high absolute accuracy, with different range options. WR will denote eigenvalues computed to high relative accuracy.
  • CSTEIN computes Y, the eigenvectors of S, given the eigenvalues.
  • CSTEDC factors S as Z D1 Z* , where Z is the unitary matrix of eigenvectors and D1 is a diagonal matrix with the eigenvalues on the diagonal ('I' option). It may also update an input unitary matrix, usually the output from CHETRD/CUNGTR or CHPTRD/CUPGTR ('V' option). It may also just compute eigenvalues ('N' option).
  • CSTEMR factors S as Z D1 Z* , where Z is the unitary matrix of eigenvectors and D1 is a diagonal matrix with the eigenvalues on the diagonal ('I' option). CSTEMR uses the Relatively Robust Representation whenever possible. main character energy fr.

✨ how the testing actually goes down

When CCHKST2STG 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 Hermitian eigenroutines. For each matrix, a number of tests will be performed. buckle up buttercup, there are a LOT 🌸

  • (1) | A - V S V* | / ( |A| n ulp ) β€” CHETRD( UPLO='U', ... )
  • (2) | I - UV* | / ( n ulp ) β€” CUNGTR( UPLO='U', ... )
  • (3) | A - V S V* | / ( |A| n ulp ) β€” CHETRD( UPLO='L', ... ) … replaced by | D1 - D2 | / ( |D1| ulp ) where D1 is the eigenvalue matrix computed using S and D2 is the eigenvalue matrix computed using S_2stage the output of CHETRD_2STAGE(, ,....). D1 and D2 are computed via DSTEQR('N',...)
  • (4) | I - UV* | / ( n ulp ) β€” CUNGTR( UPLO='L', ... ) … replaced by | D1 - D3 | / ( |D1| ulp ) where D1 is the eigenvalue matrix computed using S and D3 is the eigenvalue matrix computed using S_2stage the output of CHETRD_2STAGE(, ,....). D1 and D3 are computed via DSTEQR('N',...)
  • (5-8) Same as 1-4, but for CHPTRD and CUPGTR. πŸ’€
  • (9) | S - Z D Z* | / ( |S| n ulp ) β€” CSTEQR('V',...)
  • (10) | I - ZZ* | / ( n ulp ) β€” CSTEQR('V',...)
  • (11) | D1 - D2 | / ( |D1| ulp ) β€” CSTEQR('N',...)
  • (12) | D1 - D3 | / ( |D1| ulp ) β€” SSTERF
  • (13) 0 if the true eigenvalues (computed by sturm count) of S are within THRESH of those in D1. 2*THRESH if they are not. (Tested using SSTECH)

For S positive definite:

  • (14) | S - Z4 D4 Z4* | / ( |S| n ulp ) β€” CPTEQR('V',...)
  • (15) | I - Z4 Z4* | / ( n ulp ) β€” CPTEQR('V',...)
  • (16) | D4 - D5 | / ( 100 |D4| ulp ) β€” CPTEQR('N',...)

When S is also diagonally dominant by the factor gamma < 1:

  • (17) the max over i of | D4(i) - WR(i) | / ( |D4(i)| omega ) , with
omega = 2 (2n-1) ULP (1 + 8 gamma**2) / (1 - gamma)**4
                                     SSTEBZ( 'A', 'E', ...)
  • (18) | WA1 - D3 | / ( |D3| ulp ) β€” SSTEBZ( 'A', 'E', ...)
  • (19) this whole nested-min-max situation, SSTEBZ( 'I', 'E', ...)
( max { min | WA2(i)-WA3(j) | } +
   i     j
  max { min | WA3(i)-WA2(j) | } ) / ( |D3| ulp )
   i     j
  • (20) | S - Y WA1 Y* | / ( |S| n ulp ) β€” SSTEBZ, CSTEIN
  • (21) | I - Y Y* | / ( n ulp ) β€” SSTEBZ, CSTEIN
  • (22) | S - Z D Z* | / ( |S| n ulp ) β€” CSTEDC('I')
  • (23) | I - ZZ* | / ( n ulp ) β€” CSTEDC('I')
  • (24) | S - Z D Z* | / ( |S| n ulp ) β€” CSTEDC('V')
  • (25) | I - ZZ* | / ( n ulp ) β€” CSTEDC('V')
  • (26) | D1 - D2 | / ( |D1| ulp ) β€” CSTEDC('V') and CSTEDC('N')
🚨 Test 27 is disabled at the moment because CSTEMR does not guarantee high relative accuracy. so it's just sitting there, benched, vibing πŸ˜”
  • (27) the max over i of | D6(i) - WR(i) | / ( |D6(i)| omega ) , with
omega = 2 (2n-1) ULP (1 + 8 gamma**2) / (1 - gamma)**4
                                     CSTEMR('V', 'A')
  • (28) the max over i of | D6(i) - WR(i) | / ( |D6(i)| omega ) , with
omega = 2 (2n-1) ULP (1 + 8 gamma**2) / (1 - gamma)**4
                                     CSTEMR('V', 'I')
🚨 Tests 29 through 34 are disabled at present because CSTEMR does not handle partial spectrum requests. they're on the bench too, tragic πŸ’€
  • (29) | S - Z D Z* | / ( |S| n ulp ) β€” CSTEMR('V', 'I')
  • (30) | I - ZZ* | / ( n ulp ) β€” CSTEMR('V', 'I')
  • (31) the min-max party, CSTEMR('N', 'I') vs. CSTEMR('V', 'I'):
( max { min | WA2(i)-WA3(j) | } +
   i     j
  max { min | WA3(i)-WA2(j) | } ) / ( |D3| ulp )
   i     j
  • (32) | S - Z D Z* | / ( |S| n ulp ) β€” CSTEMR('V', 'V')
  • (33) | I - ZZ* | / ( n ulp ) β€” CSTEMR('V', 'V')
  • (34) another min-max round, CSTEMR('N', 'V') vs. CSTEMR('V', 'V'):
( max { min | WA2(i)-WA3(j) | } +
   i     j
  max { min | WA3(i)-WA2(j) | } ) / ( |D3| ulp )
   i     j
  • (35) | S - Z D Z* | / ( |S| n ulp ) β€” CSTEMR('V', 'A')
  • (36) | I - ZZ* | / ( n ulp ) β€” CSTEMR('V', 'A')
  • (37) and one more min-max, CSTEMR('N', 'A') vs. CSTEMR('V', 'A'):
( max { min | WA2(i)-WA3(j) | } +
   i     j
  max { min | WA3(i)-WA2(j) | } ) / ( |D3| ulp )
   i     j

πŸŽ€ the matrix sizes and the matrix types

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. (humbling tbh)
  • (2) The identity matrix.
  • (3) A diagonal matrix with evenly spaced entries 1, ..., ULP and random signs. (ULP = (first number larger than 1) - 1)
  • (4) A diagonal matrix with geometrically spaced entries 1, ..., ULP and random signs.
  • (5) A diagonal matrix with entries 1, ULP, ..., ULP and random signs.
  • (6) Same as (4), but multiplied by SQRT( overflow threshold )
  • (7) Same as (4), but multiplied by SQRT( underflow threshold )
  • (8) A matrix of the form U* D U, where U is unitary and D has evenly spaced entries 1, ..., ULP with random signs on the diagonal.
  • (9) A matrix of the form U* D U, where U is unitary and D has geometrically spaced entries 1, ..., ULP with random signs on the diagonal.
  • (10) A matrix of the form U* D U, where U is unitary and D has entries 1, ULP,..., ULP with random signs on the diagonal.
  • (11) Same as (8), but multiplied by SQRT( overflow threshold )
  • (12) Same as (8), but multiplied by SQRT( underflow threshold )
  • (13) Hermitian matrix with random entries chosen from (-1,1).
  • (14) Same as (13), but multiplied by SQRT( overflow threshold )
  • (15) Same as (13), but multiplied by SQRT( underflow threshold )
  • (16) Same as (8), but diagonal elements are all positive. πŸ₯°
  • (17) Same as (9), but diagonal elements are all positive.
  • (18) Same as (10), but diagonal elements are all positive.
  • (19) Same as (16), but multiplied by SQRT( overflow threshold )
  • (20) Same as (16), but multiplied by SQRT( underflow threshold )
  • (21) A diagonally dominant tridiagonal matrix with geometrically spaced diagonal entries 1, ..., ULP.

and that's the whole matrix menu, bestie β€” 21 flavors, all certified valid 🌈

Parameters

Okay bestie, buckle up β€” this is the big list of everything CCHKST2STG takes in. Every parameter gets its own little moment πŸ’…


NSIZES

NSIZES is INTEGER

The number of sizes of matrices we're testing. If it's zero, CCHKST2STG does nothing β€” literally nothing, it just sits there 😭 It must be at least zero.


NN

NN is INTEGER array, dimension (NSIZES)

An array holding the sizes used for the matrices. Zero values get skipped entirely (not invited to the party πŸ™ˆ). The values must be at least zero.


NTYPES

NTYPES is INTEGER

The number of elements in DOTYPE. If it's zero, CCHKST2STG does nothing β€” same deal as above. It must be at least zero.

And here's the spicy bit 🌢️ β€” if it's MAXTYP+1 and NSIZES is 1, then an extra type, MAXTYP+1, gets defined, and that type just uses whatever matrix is already sitting in A. This is only actually useful if DOTYPE(1:MAXTYP) is .FALSE. and DOTYPE(MAXTYP+1) is .TRUE..


DOTYPE

DOTYPE is LOGICAL array, dimension (NTYPES)

The to-do list, basically ✨ 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 just don't get generated. And if NTYPES is larger than MAXTYP, then DOTYPE(MAXTYP+1) through DOTYPE(NTYPES) get ignored. Sorry girl, you're not on the list πŸŽ€


ISEED

ISEED is INTEGER array, dimension (4)

The random number generator's vibe check, aka its seed 🌈 On entry, ISEED specifies the seed of the random number generator. The array elements should be between 0 and 4095 β€” if not, they get reduced mod 4096. Also, ISEED(4) must be odd (no cap, that's a hard requirement). 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 you can use them in the next call to CCHKST2STG to keep the same random number sequence going. Continuity! 🫢


THRESH

THRESH is REAL

A test will count as... if the..., computed as described above, exceeds THRESH. (Yes, the original page has gaps there β€” we're reporting what it says, not filling them in πŸ’€)

Note that the error is scaled to be O(1), so THRESH should be a reasonably small multiple of 1 β€” like, say, 10 or 100. In particular it should not depend on the precision (single vs. double) or the size of the matrix. And it must be at least zero.


NOUNIT

NOUNIT is INTEGER

The FORTRAN unit number for printing out error messages β€” like, if a routine returns IINFO not equal to 0. Your error-reporting channel, basically πŸ“’


A

A is COMPLEX array of

dimension ( LDA , max(NN) )

Used to hold the matrix whose eigenvalues are to be computed. On exit, A contains the last matrix actually used. She's been through a lot, but she's still standing πŸ‘‘


LDA

LDA is INTEGER

The leading dimension of A. It must be at least 1 and at least max( NN ).


AP

AP is COMPLEX array of

dimension( max(NN)*max(NN+1)/2 )

The matrix A stored in packed format. Compact queen πŸŽ€


SD

SD is REAL array of

dimension( max(NN) )

The diagonal of the tridiagonal matrix computed by CHETRD. On exit, SD and SE contain the tridiagonal form of the matrix in A.


SE

SE is REAL array of

dimension( max(NN) )

The off-diagonal of the tridiagonal matrix computed by CHETRD. On exit, SD and SE contain the tridiagonal form of the matrix in A. They're a matching set, iykyk πŸ’–


D1

D1 is REAL array of

dimension( max(NN) )

The eigenvalues of A, as computed by CSTEQR simultaneously with Z. On exit, the eigenvalues in D1 correspond with the matrix in A.


D2

D2 is REAL array of

dimension( max(NN) )

The eigenvalues of A, as computed by CSTEQR if Z is not computed. On exit, the eigenvalues in D2 correspond with the matrix in A.


D3

D3 is REAL array of

dimension( max(NN) )

The eigenvalues of A, as computed by SSTERF. On exit, the eigenvalues in D3 correspond with the matrix in A.


D4

D4 is REAL array of

dimension( max(NN) )

The eigenvalues of A, as computed by CPTEQR(V). CPTEQR factors S as Z4 D4 Z4*. On exit, the eigenvalues in D4 correspond with the matrix in A.


D5

D5 is REAL array of

dimension( max(NN) )

The eigenvalues of A, as computed by CPTEQR(N) when Z is not computed. On exit, the eigenvalues in D4 correspond with the matrix in A. (Yes, it says D4 β€” we're just quoting the page, bestie, don't come for me πŸ™ˆ)


WA1

WA1 is REAL array of

dimension( max(NN) )

All eigenvalues of A, computed to high absolute accuracy, with different range options β€” as computed by SSTEBZ.


WA2

WA2 is REAL array of

dimension( max(NN) )

Selected eigenvalues of A, computed to high absolute accuracy, with different range options β€” as computed by SSTEBZ. The move here: choose random values for IL and IU, and ask for the IL-th through IU-th eigenvalues 🎯


WA3

WA3 is REAL array of

dimension( max(NN) )

Selected eigenvalues of A, computed to high absolute accuracy, with different range options β€” as computed by SSTEBZ. The move here: determine the values VL and VU of the IL-th and IU-th eigenvalues, and ask for all eigenvalues in this range.


WR

WR is REAL array of

dimension( max(NN) )

All eigenvalues of A, computed to high absolute accuracy, with different options β€” as computed by SSTEBZ.


U

U is COMPLEX array of

dimension( LDU, max(NN) ).

The unitary matrix computed by CHETRD + CUNGTR. Iconic collab ✨


LDU

LDU is INTEGER

The leading dimension of U, Z, and V. It must be at least 1 and at least max( NN ).


V

V is COMPLEX array of

dimension( LDU, max(NN) ).

The Householder vectors computed by CHETRD in reducing A to tridiagonal form πŸŒ€ The vectors computed with UPLO='U' are in the upper triangle, and the vectors computed with UPLO='L' are in the lower triangle.

(As described in CHETRD, the sub- and superdiagonal are not set to 1, even though the true Householder vector has a 1 in that position. The routines that use V, such as CUNGTR, set those entries to 1 before using them, and then restore them later. Respectful. Considerate. We stan 🫢)


VP

VP is COMPLEX array of

dimension( max(NN)*max(NN+1)/2 )

The matrix V stored in packed format.


TAU

TAU is COMPLEX array of

dimension( max(NN) )

The Householder factors computed by CHETRD in reducing A to tridiagonal form.


Z

Z is COMPLEX array of

dimension( LDU, max(NN) ).

The unitary matrix of eigenvectors computed by CSTEQR, CPTEQR, and CSTEIN. Three routines, one legend πŸ’œ


WORK

WORK is COMPLEX array of

dimension( LWORK )

Workspace. That's it. That's the description πŸ’€


LWORK

LWORK is INTEGER

The number of entries in WORK. This must be at least:

1 + 4 * Nmax + 2 * Nmax * lg Nmax + 3 * Nmax**2

where Nmax = max( NN(j), 2 ) and lg = log base 2.


IWORK

IWORK is INTEGER array,

Workspace. Again. Short and sweet 😌


LIWORK

LIWORK is INTEGER

The number of entries in IWORK. This must be at least:

6 + 6*Nmax + 5 * Nmax * lg Nmax

where Nmax = max( NN(j), 2 ) and lg = log base 2.


RWORK

RWORK is REAL array

Real workspace. No dimension given, no notes, just vibes πŸ¦‹


LRWORK

LRWORK is INTEGER

The number of entries in LRWORK (dimension( ??? ) β€” and yes, the original page literally has question marks there πŸ˜­πŸ™ˆ)


RESULT

RESULT is REAL array, dimension (26)

The values computed by the tests described above. The values are currently limited to 1/ulp, to avoid overflow. Safety first, always πŸ”₯


INFO

The page just... names it. No description. INFO gets a name-drop and then the man page dips πŸ’€

okay so INFO is an INTEGER, and here’s the whole mood ring of return values, bestie 🫢 β€” memorize these or perish (emotionally):

  • 0 β€” everything ran OK, we love a clean slate ✨
  • -1 β€” NSIZES < 0, not it 😭
  • -2 β€” some NN(j) < 0, screaming
  • -3 β€” NTYPES < 0, pls
  • -5 β€” THRESH < 0, bestie no
  • -9 β€” LDA < 1 or LDA < NMAX, where NMAX is max( NN(j) ) πŸ’€
  • -23 β€” LDU < 1 or LDU < NMAX
  • -29 β€” LWORK too small, the classic

and if CLATMR, CLATMS, CHETRD, CUNGTR, CSTEQR, SSTERF, or CUNMC2 returns an error code, the absolute value of it is returned. no cap, that’s literally the rule πŸ”₯


πŸŽ€ Some Local Variables and Parameters πŸŽ€

bestie these are the little backstage crew, and yes they all matter:

  • ZERO, ONE β€” Real 0 and 1. iconic basics πŸ’…
  • MAXTYP β€” The number of types defined.
  • NTEST β€” The number of tests performed, or which can be performed so far, for the current matrix.
  • NTESTT β€” The total number of tests performed so far.
  • NBLOCK β€” Blocksize as returned by ENVIR.
  • NMAX β€” Largest value in NN.
  • NMATS β€” The number of matrices generated so far.
  • NERRS β€” The number of tests which have exceeded THRESH so far.
  • COND, 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 β€” Square roots of the previous 2 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) ) )

πŸ‘‘ Author πŸ‘‘

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

Definition at line 620 of file cchkst2stg.f.

🌸 Author 🌸

Generated automatically by Doxygen for LAPACK from the source code.


and that’s the whole page, fr fr πŸ’– β€” LAPACK Version 3.12.0, live from /home/abui...chkst2stg.f(3), and honestly the footer ate. periodt βœ¨πŸŽ€

πŸ“¦ where this page comes from