TESTING/EIG/ddrvsx.f(3)
๐ NAME
ok so picture this: it's TESTING/EIG/ddrvsx.f, that's literally the whole name section, no notes ๐
it's a Fortran thing living in the EIG testing folder and it's about to be your new bestie.
๐ธ SYNOPSIS
โจ Functions/Subroutines
subroutine ddrvsx (nsizes, nn, ntypes, dotype, iseed, thresh, niunit, nounit, a, lda, h, ht, wr, wi, wrt, wit, wrtmp, witmp, vs, ldvs, vs1, result, work, lwork, iwork, bwork, info)โ the one and only, the main character herself,DDRVSX๐
subroutine ddrvsx (nsizes, nn, ntypes, dotype, iseed, thresh, niunit,
nounit, a, lda, h, ht, wr, wi, wrt, wit, wrtmp, witmp, vs, ldvs,
vs1, result, work, lwork, iwork, bwork, info)
๐ฆ Function/Subroutine Documentation
๐ subroutine ddrvsx
here's the full glow-up, every type and dimension, no cap:
subroutine ddrvsx (integer nsizes, integer, dimension( * ) nn, integer
ntypes, logical, dimension( * ) dotype, integer, dimension( 4 ) iseed,
double precision thresh, integer niunit, integer nounit, double
precision, dimension( lda, * ) a, integer lda, double precision,
dimension( lda, * ) h, double precision, dimension( lda, * ) ht, double
precision, dimension( * ) wr, double precision, dimension( * ) wi,
double precision, dimension( * ) wrt, double precision, dimension( * )
wit, double precision, dimension( * ) wrtmp, double precision,
dimension( * ) witmp, double precision, dimension( ldvs, * ) vs, integer
ldvs, double precision, dimension( ldvs, * ) vs1, double precision,
dimension( 17 ) result, double precision, dimension( * ) work, integer
lwork, integer, dimension( * ) iwork, logical, dimension( * ) bwork,
integer info)
DDRVSX
โจ Purpose
๐DDRVSXchecks the nonsymmetric eigenvalue (Schur form) problem expert driverDGEESX.
ok so like, DDRVSX is running a whole vibe check on DGEESX, that's the assignment ๐ซถ
DDRVSX uses both test matrices generated randomly depending on data supplied in the calling sequence, as well as on data read from an input file and including precomputed condition numbers to which it compares the ones it computes.
so it's giving two sources of truth: random matrices it whips up from what you passed in, and an input file with precomputed condition numbers that it compares against its own computed ones โจ
When DDRVSX 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, 15 tests will be performed ๐
- (1)
0if T is in Schur form,1/ulpotherwise (no sorting of eigenvalues) - (2)
| A - VS T VS' | / ( n |A| ulp )
Here VS is the matrix of Schur eigenvectors, and T is in Schur form (no sorting of eigenvalues).
- (3)
| I - VS VS' | / ( n ulp )(no sorting of eigenvalues). - (4)
0ifWR+sqrt(-1)*WIare eigenvalues of T1/ulpotherwise (no sorting of eigenvalues) - (5)
0if T(with VS) = T(without VS),1/ulpotherwise (no sorting of eigenvalues) - (6)
0if eigenvalues(with VS) = eigenvalues(without VS),1/ulpotherwise (no sorting of eigenvalues) - (7)
0if T is in Schur form,1/ulpotherwise (with sorting of eigenvalues) - (8)
| A - VS T VS' | / ( n |A| ulp )
Here VS is the matrix of Schur eigenvectors, and T is in Schur form (with sorting of eigenvalues).
- (9)
| I - VS VS' | / ( n ulp )(with sorting of eigenvalues). - (10)
0ifWR+sqrt(-1)*WIare eigenvalues of T1/ulpotherwise If workspace sufficient, also compare WR, WI with and without reciprocal condition numbers (with sorting of eigenvalues) - (11)
0if T(with VS) = T(without VS),1/ulpotherwise If workspace sufficient, also compare T with and without reciprocal condition numbers (with sorting of eigenvalues) - (12)
0if eigenvalues(with VS) = eigenvalues(without VS),1/ulpotherwise If workspace sufficient, also compare VS with and without reciprocal condition numbers (with sorting of eigenvalues) - (13) if sorting worked and SDIM is the number of eigenvalues which were SELECTed If workspace sufficient, also compare SDIM with and without reciprocal condition numbers
- (14) if RCONDE the same no matter if VS and/or RCONDV computed
- (15) if RCONDV the same no matter if VS and/or RCONDE computed
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, ..., ULPand random signs. (ULP = (first number larger than 1) - 1) - (5) A diagonal matrix with geometrically spaced entries
1, ..., ULPand random signs. - (6) A diagonal matrix with entries
1, ULP, ..., ULPand random signs. - (7) Same as (4), but multiplied by a constant near the overflow threshold
- (8) Same as (4), but multiplied by a constant near the underflow threshold
- (9) A matrix of the form
U' T U, where U is orthogonal and T has evenly spaced entries1, ..., ULPwith random signs on the diagonal and randomO(1)entries in the upper triangle. - (10) A matrix of the form
U' T U, where U is orthogonal and T has geometrically spaced entries1, ..., ULPwith random signs on the diagonal and randomO(1)entries in the upper triangle. - (11) A matrix of the form
U' T U, where U is orthogonal and T has entries1, ULP,..., ULPwith random signs on the diagonal and randomO(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 randomO(1)entries in the upper triangle. - (13) A matrix of the form
X' T X, where X has conditionSQRT( ULP )and T has evenly spaced entries1, ..., ULPwith random signs on the diagonal and randomO(1)entries in the upper triangle. - (14) A matrix of the form
X' T X, where X has conditionSQRT( ULP )and T has geometrically spaced entries1, ..., ULPwith random signs on the diagonal and randomO(1)entries in the upper triangle. - (15) A matrix of the form
X' T X, where X has conditionSQRT( ULP )and T has entries1, ULP,..., ULPwith random signs on the diagonal and randomO(1)entries in the upper triangle. - (16) A matrix of the form
X' T X, where X has conditionSQRT( ULP )and T has real or complex conjugate paired eigenvalues randomly chosen from( ULP, 1 )and randomO(1)entries in the upper triangle. - (17) Same as (16), but multiplied by a constant near the overflow threshold
- (18) Same as (16), but multiplied by a constant near the underflow threshold
- (19) Nonsymmetric matrix with random entries chosen from
(-1,1). If N is at least 4, all entries in first two rows and last row, and first column and last two columns are zero. - (20) Same as (19), but multiplied by a constant near the overflow threshold
- (21) Same as (19), but multiplied by a constant near the underflow threshold
In addition, an input file will be read from logical unit number NIUNIT. The file contains matrices along with precomputed eigenvalues and reciprocal condition numbers for the eigenvalue average and right invariant subspace. For these matrices, in addition to tests (1) to (15) we will compute the following two tests ๐ซถ:
- (16)
|RCONDE - RCDEIN| / cond(RCONDE)
RCONDE is the reciprocal average eigenvalue condition number computed by DGEESX and RCDEIN (the precomputed true value) is supplied as input. cond(RCONDE) is the condition number of RCONDE, and takes errors in computing RCONDE into account, so that the resulting quantity should be O(ULP). cond(RCONDE) is essentially given by norm(A)/RCONDV.
- (17)
|RCONDV - RCDVIN| / cond(RCONDV)
RCONDV is the reciprocal right invariant subspace condition number computed by DGEESX and RCDVIN (the precomputed true value) is supplied as input. cond(RCONDV) is the condition number of RCONDV, and takes errors in computing RCONDV into account, so that the resulting quantity should be O(ULP). cond(RCONDV) is essentially given by norm(A)/RCONDE.
๐ Parameters
๐ NSIZES
NSIZESisINTEGERThe number of sizes of matrices to use.NSIZESmust be at least zero. If it is zero, no randomly generated matrices are tested, but any test matrices read fromNIUNITwill be tested.
๐ NN
NNisINTEGERarray, dimension(NSIZES)An array containing the sizes to be used for the matrices. Zero values will be skipped. The values must be at least zero.
๐ NTYPES
The rest of the arguments are where the tea gets real โ these are the inputs/outputs that tell DDRVSX what to test and where to stash the results. ๐
NTYPESโINTEGER. It's the number of elements inDOTYPE.NTYPESmust be at least zero. If it's zero, no randomly generated test matrices get tested, but test matrices read fromNIUNITdo get tested. If it'sMAXTYP+1andNSIZESis1, then an additional type,MAXTYP+1, is defined โ that one means โuse whatever matrix is inA.โ This is only useful ifDOTYPE(1:MAXTYP)is.FALSE.andDOTYPE(MAXTYP+1)is.TRUE.๐DOTYPEโLOGICALarray, dimension(NTYPES). IfDOTYPE(j)is.TRUE., then for each size inNNa matrix of that size and of typejwill be generated. IfNTYPESis smaller than the maximum number of types defined (PARAMETER MAXTYP), then typesNTYPES+1throughMAXTYPwill not be generated. IfNTYPESis larger thanMAXTYP,DOTYPE(MAXTYP+1)throughDOTYPE(NTYPES)will be ignored. โจISEEDโINTEGERarray, dimension(4). On entry,ISEEDspecifies the seed of the random number generator. The array elements should be between0and4095; if not, they will be reducedmod 4096. Also,ISEED(4)must be odd. The random number generator uses a linear congruential sequence limited to small integers, and so should produce machine independent random numbers. The values ofISEEDare changed on exit, and can be used in the next call toDDRVSXto continue the same random number sequence. ๐THRESHโDOUBLE PRECISION. A test will count as a fail if the error, computed as described above, exceedsTHRESH. Note that the error is scaled to beO(1), soTHRESHshould be a reasonably small multiple of1, e.g.,10or100. In particular, it should not depend on the precision (single vs. double) or the size of the matrix. It must be at least zero. ๐ซถNIUNITโINTEGER. The FORTRAN unit number for reading in the data file of problems to solve. ๐NOUNITโINTEGER. The FORTRAN unit number for printing out error messages (e.g., if a routine returnsINFOnot equal to0). ๐จAโDOUBLE PRECISIONarray, dimension(LDA, max(NN)). Used to hold the matrix whose eigenvalues are to be computed. On exit,Acontains the last matrix actually used. ๐LDAโINTEGER. The leading dimension ofA, andH.LDAmust be at least1and at leastmax( NN ). ๐HโDOUBLE PRECISIONarray, dimension(LDA, max(NN)). Another copy of the test matrixA, modified byDGEESX. ๐HTโDOUBLE PRECISIONarray, dimension(LDA, max(NN)). Yet another copy of the test matrixA, modified byDGEESX. ๐ช๏ธWRโDOUBLE PRECISIONarray, dimension(max(NN)). ๐WIโDOUBLE PRECISIONarray, dimension(max(NN)). The real and imaginary parts of the eigenvalues ofA. On exit,WR + WI*iare the eigenvalues of the matrix inA. ๐ธWRTโDOUBLE PRECISIONarray, dimension(max(NN)). ๐ฆWITโDOUBLE PRECISIONarray, dimension(max(NN)). LikeWR,WI, these arrays contain the eigenvalues ofA, but those computed whenDGEESXonly computes a partial eigendecomposition, i.e. not Schur vectors. ๐WRTMPโDOUBLE PRECISIONarray, dimension(max(NN)). ๐งWITMPโDOUBLE PRECISIONarray, dimension(max(NN)). More temporary storage for eigenvalues. ๐VSโDOUBLE PRECISIONarray, dimension(LDVS, max(NN)).VSholds the computed Schur vectors. ๐LDVSโINTEGER. Leading dimension ofVS. Must be at leastmax(1,max(NN)). ๐VS1โDOUBLE PRECISIONarray, dimension(LDVS, max(NN)).VS1holds another copy of the computed Schur vectors. โจRESULTโDOUBLE PRECISIONarray, dimension(17). The values computed by the17tests described above. The values are currently limited to1/ulp, to avoid overflow. ๐ฅWORKโDOUBLE PRECISIONarray, dimension(LWORK). ๐ ๏ธLWORKโINTEGER. The number of entries inWORK. This must be at leastmax(3*NN(j),2*NN(j)**2)for allj. ๐งฎIWORKโINTEGERarray, dimension(max(NN)*max(NN)). ๐๏ธBWORKโLOGICALarray, dimension(max(NN)). โINFOโINTEGER. If0, successful exit.<0, input parameter-INFOis incorrect.>0,DLATMR,SLATMS,SLATMEorDGET24returned an error code andINFOis its absolute value. ๐ฆ
๐ง Some Local Variables and Parameters ๐ง
The original underlines it with ---- ----- --------- --- ----------. Cute. Here's the decode:
ZERO,ONEโ real0and1.MAXTYPโ the number of types defined.NMAXโ largest value inNN.NERRSโ the number of tests which have exceededTHRESH.COND,CONDS,IMODEโ values to be passed to the matrix generators.ANORMโ norm ofA; passed to matrix generators.OVFL,UNFLโ overflow and underflow thresholds.ULP,ULPINVโ finest relative precision and its inverse.RTULP,RTULPIโ square roots of the previous4values.
The following four arrays decode JTYPE:
KTYPE(j)โ the general type (1-10) for typej.KMODE(j)โ theMODEvalue to be passed to the matrix generator for typej.KMAGN(j)โ the order of magnitude (O(1),O(overflow^(1/2) ),O(underflow^(1/2) )).KCONDS(j)โ Selectw whetherCONDSis to be1or1/sqrt(ulp). (0means irrelevant.) ๐
๐ Author ๐
- Univ. of Tennessee
- Univ. of California Berkeley
- Univ. of Colorado Denver
- NAG Ltd.
Definition at line450of fileddrvsx.f.
๐ Author (the auto-generated one) ๐
Generated automatically by Doxygen for LAPACK from the source code.
So that's the whole read from TESTING/EIG/ddrvsx.f(3) โ source/version: LAPACK Version 3.12.0; date: not listed on this page. Mwah! ๐๐๐ซถ
๐ฆ where this page comes from
- arch rolling: lapack-doc 3.12.1-2 ยท custom
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms