CDRVST(3)
๐ CDRVST(3) ๐
okay so this is cdrvst.f(3) from the Library Functions Manual, and it is lowkey iconic. The header line is a whole mood, but we're folding the manual name in right here like a responsible bestie. ๐ซถ
โจ NAME โจ
/home/abuild/rpmbuild/BUILD/lapack-static-3.12.0-build/lapack-3.12.0/TESTING/EIG/cdrvst.f
that's the file path, character for character, no cap. ๐
๐ SYNOPSIS ๐
๐ซถ Functions/Subroutines ๐ซถ
okay so here's the synopsis, bestie โ it's a subroutine with a whole group chat of arguments:
subroutine CDRVST (nsizes, nn, ntypes, dotype, iseed, thresh, nounit, a,
lda, d1, d2, d3, wa1, wa2, wa3, u, ldu, v, tau, z, work, lwork,
rwork, lrwork, iwork, liwork, result, info)
CDRVST
and yes, the subroutine is literally CDRVST. periodt. ๐
๐ธ Function/Subroutine Documentation ๐ธ
here's the full signature with every type and dimension, exactly as the source says โ I am not touching a single character of this, bestie:
subroutine CDRVST (integer nsizes, integer, dimension( * ) nn, integer
ntypes, logical, dimension( * ) dotype, integer, dimension( 4 ) iseed,
real thresh, integer nounit, complex, dimension( lda, * ) a, integer
lda, real, dimension( * ) d1, real, dimension( * ) d2, real, dimension(
* ) d3, real, dimension( * ) wa1, real, dimension( * ) wa2, real,
dimension( * ) wa3, complex, dimension( ldu, * ) u, integer ldu,
complex, dimension( ldu, * ) v, 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)
CDRVST
and it's CDRVST again, because consistency is cute. ๐
๐ Purpose ๐
okay so the purpose is literally this: CDRVST checks the Hermitian eigenvalue problem drivers. no cap. ๐ฆ
the drivers it checks are:
CHEEVDโ computes all eigenvalues and, optionally, eigenvectors of a complex Hermitian matrix, using a divide-and-conquer algorithm. โจCHEEVXโ computes selected eigenvalues and, optionally, eigenvectors of a complex Hermitian matrix. ๐CHEEVRโ computes selected eigenvalues and, optionally, eigenvectors of a complex Hermitian matrix using the Relatively Robust Representation where it can. ๐ฅCHPEVDโ computes all eigenvalues and, optionally, eigenvectors of a complex Hermitian matrix in packed storage, using a divide-and-conquer algorithm. ๐CHPEVXโ computes selected eigenvalues and, optionally, eigenvectors of a complex Hermitian matrix in packed storage. ๐ธCHBEVDโ computes all eigenvalues and, optionally, eigenvectors of a complex Hermitian band matrix, using a divide-and-conquer algorithm. ๐CHBEVXโ computes selected eigenvalues and, optionally, eigenvectors of a complex Hermitian band matrix. ๐ฆCHEEVโ computes all eigenvalues and, optionally, eigenvectors of a complex Hermitian matrix. โญCHPEVโ computes all eigenvalues and, optionally, eigenvectors of a complex Hermitian matrix in packed storage. ๐CHBEVโ computes all eigenvalues and, optionally, eigenvectors of a complex Hermitian band matrix. ๐
when CDRVST 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 appropriate drivers. and for each matrix and each driver routine called, these tests get performed, bestie:
(1) | A - Z D Z' | / ( |A| n ulp )
(2) | I - Z Z' | / ( n ulp )
(3) | D1 - D2 | / ( |D1| ulp )
where Z is the matrix of eigenvectors returned when the eigenvector option is given, and D1 and D2 are the eigenvalues returned with and without the eigenvector option. slay. ๐
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 diagonal matrix with evenly spaced entries1, ..., ULPand random signs. (ULP = (first number larger than 1) - 1) ๐(4)โ A diagonal matrix with geometrically spaced entries1, ..., ULPand random signs. ๐ธ(5)โ A diagonal matrix withentries 1, ULP, ..., ULPand random signs. ๐ฆ(6)โ Same as(4), but multiplied bySQRT( overflow threshold ). ๐ฅ(7)โ Same as(4), but multiplied bySQRT( underflow threshold ). ๐(8)โ A matrix of the formU* D U, whereUis unitary andDhas evenly spaced entries1, ..., ULPwith random signs on the diagonal. ๐(9)โ A matrix of the formU* D U, whereUis unitary andDhas geometrically spaced entries1, ..., ULPwith random signs on the diagonal. ๐(10)โ A matrix of the formU* D U, whereUis unitary andDhasentries 1, ULP,..., ULPwith random signs on the diagonal. โญ(11)โ Same as(8), but multiplied bySQRT( overflow threshold ). ๐(12)โ Same as(8), but multiplied bySQRT( underflow threshold ). ๐ง(13)โ Symmetric matrix with random entries chosen from(-1,1). ๐(14)โ Same as(13), but multiplied bySQRT( overflow threshold ). โจ(15)โ Same as(13), but multiplied bySQRT( underflow threshold ). ๐(16)โ A band matrix with half bandwidth randomly chosen between0andN-1, with evenly spaced eigenvalues1, ..., ULPwith random signs. ๐ธ(17)โ Same as(16), but multiplied bySQRT( overflow threshold ). ๐ฆ(18)โ Same as(16), but multiplied bySQRT( underflow threshold ). ๐
okay bestie, picking up right where we left off with the arguments ๐ no cap, we're still in the parameter era and every single detail is staying.
NSIZESโINTEGER. The number of sizes of matrices to use. If it's zero,CDRVSTdoes literally nothing. It must be at least zero. Not modified. ๐NNโINTEGERarray, 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 inDOTYPE. If it's zero,CDRVSTdoes nothing (again, iconic minimalism). It must be at least zero. If it isMAXTYP+1andNSIZESis 1, then an additional type,MAXTYP+1, is defined, which is to use whatever matrix is inA. This is only useful ifDOTYPE(1:MAXTYP)is.FALSE.andDOTYPE(MAXTYP+1)is.TRUE.. Not modified. ๐ซถ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. Not modified. ๐ธISEEDโINTEGERarray, dimension (4). On entryISEEDspecifies the seed of the random number generator. The array elements should be between 0 and 4095; if not they will be reduced mod 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 toCDRVSTto continue the same random number sequence. Modified. ๐ฒTHRESHโREAL. A test will count as [blank in the original] if the [blank], computed as described above, exceedsTHRESH. Note that the error is scaled to beO(1), soTHRESHshould 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. ๐ญ (the original text is a little glitched here, but the cutoff vibe is clear)NOUNITโINTEGER. TheFORTRANunit number for printing out error messages (e.g., if a routine returnsIINFOnot equal to 0.) Not modified. ๐จ๏ธAโCOMPLEXarray, dimension (LDA , max(NN)). Used to hold the matrix whose eigenvalues are to be computed. On exit,Acontains the last matrix actually used. Modified. ๐LDAโINTEGER. The leading dimension ofA. It must be at least 1 and at leastmax( NN ). Not modified. ๐D1โREALarray, dimension (max(NN)). The eigenvalues ofA, as computed byCSTEQRsimultaneously withZ. On exit, the eigenvalues inD1correspond with the matrix inA. Modified. ๐D2โREALarray, dimension (max(NN)). The eigenvalues ofA, as computed byCSTEQRifZis not computed. On exit, the eigenvalues inD2correspond with the matrix inA. Modified. ๐ฆD3โREALarray, dimension (max(NN)). The eigenvalues ofA, as computed bySSTERF. On exit, the eigenvalues inD3correspond with the matrix inA. Modified. โญWA1โREALarray, dimension (the original just says โdimensionโ and then nothing โ a mysterious icon, honestly). ๐ต๏ธโโ๏ธWA2โREALarray, dimension (same mystery vibe asWA1). ๐ต๏ธโโ๏ธWA3โREALarray, dimension (again, unspecified in the source โ we love an enigma). ๐ต๏ธโโ๏ธUโCOMPLEXarray, dimension (LDU, max(NN)). The unitary matrix computed byCHETRD + CUNGC3. Modified. ๐LDUโINTEGER. The leading dimension ofU,Z, andV. It must be at least 1 and at leastmax( NN ). Not modified. ๐VโCOMPLEXarray, dimension (LDU, max(NN)). The Housholder vectors computed byCHETRDin reducingAto tridiagonal form. Modified. (yes, โHousholderโ is exactly how it's spelled in the source โ periodt) ๐TAUโCOMPLEXarray, dimension (max(NN)). The Householder factors computed byCHETRDin reducingAto tridiagonal form. Modified. ๐ZโCOMPLEXarray, dimension (LDU, max(NN)). The unitary matrix of eigenvectors computed byCHEEVD,CHEEVX,CHPEVD,CHPEVX,CHBEVD, andCHBEVX. Modified. ๐ฅWORKโCOMPLEXarray of dimension (LWORK). Workspace. Modified. ๐งฐLWORKโINTEGER. The number of entries inWORK. This must be at least2*max( NN(j), 2 )**2. Not modified. ๐ฆRWORKโREALarray, dimension (3*max(NN)). Workspace. Modified. ๐งบLRWORKโINTEGER. The number of entries inRWORK. ๐ขIWORKโINTEGERarray, dimension (6*max(NN)). Workspace. Modified. ๐๏ธLIWORKโINTEGER. The number of entries inIWORK. ๐ขRESULTโREALarray, dimension (??). The values computed by the tests described above. The values are currently limited to1/ulp, to avoid overflow. Modified. ๐ฎโ๐จINFOโINTEGER. If 0, then everything ran OK. Here's the error code lore:-1:NSIZES < 0-2: SomeNN(j) < 0-3:NTYPES < 0-5:THRESH < 0-9:LDA < 1orLDA < NMAX, whereNMAXismax( NN(j) ).-16:LDU < 1orLDU < NMAX.-21:LWORKtoo small.
If SLATMR, SLATMS, CHETRD, SORGC3, CSTEQR, SSTERF, or SORMC2 returns an error code, the absolute value of it is returned. Modified. ๐
๐ง Some Local Variables and Parameters ๐ง
Some local variables and parameters (yes, the original calls them out like this, and we're keeping the whole crew):
ZERO,ONEโ Real 0 and 1. โชโซ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.NMAXโ Largest value inNN.NMATSโ The number of matrices generated so far.NERRSโ The number of tests which have exceededTHRESHso far (computed bySLAFTS).COND,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.RTOVFL,RTUNFLโ Square roots of the previous 2 values.
The following four arrays decode JTYPE:
KTYPE(j)โ The general type (1-10) for type [blank in the original]. ๐ท๏ธKMODE(j)โ TheMODEvalue to be passed to the matrix generator for type [blank in the original].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 334 of file cdrvst.f.
๐ฅ๏ธ Author ๐ฅ๏ธ
Generated automatically by Doxygen for LAPACK from the source code.
๐
that's the whole vibe check, bestie โ this page came from LAPACK Version 3.12.0, source file /home/abui...IG/cdrvst.f(3). Stay iconic, and may your eigenvalues always be real and your workspace always be big enough. periodt. ๐โจ
๐ฆ where this page comes from
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 ยท BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 ยท BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 ยท BSD-3-Clause
- opensuse-leap 16.0: lapack-man 3.12.0-160000.2.2 ยท BSD-3-Clause
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms