diff options
author | julie <julielangou@users.noreply.github.com> | 2011-10-06 06:53:11 +0000 |
---|---|---|
committer | julie <julielangou@users.noreply.github.com> | 2011-10-06 06:53:11 +0000 |
commit | e1d39294aee16fa6db9ba079b14442358217db71 (patch) | |
tree | 30e5aa04c1f6596991fda5334f63dfb9b8027849 /TESTING/EIG/zdrvsx.f | |
parent | 5fe0466a14e395641f4f8a300ecc9dcb8058081b (diff) | |
download | lapack-e1d39294aee16fa6db9ba079b14442358217db71.tar.gz lapack-e1d39294aee16fa6db9ba079b14442358217db71.tar.bz2 lapack-e1d39294aee16fa6db9ba079b14442358217db71.zip |
Integrating Doxygen in comments
Diffstat (limited to 'TESTING/EIG/zdrvsx.f')
-rw-r--r-- | TESTING/EIG/zdrvsx.f | 756 |
1 files changed, 440 insertions, 316 deletions
diff --git a/TESTING/EIG/zdrvsx.f b/TESTING/EIG/zdrvsx.f index cd8b5fa6..4b8f5578 100644 --- a/TESTING/EIG/zdrvsx.f +++ b/TESTING/EIG/zdrvsx.f @@ -1,11 +1,449 @@ +*> \brief \b ZDRVSX +* +* =========== DOCUMENTATION =========== +* +* Online html documentation available at +* http://www.netlib.org/lapack/explore-html/ +* +* Definition +* ========== +* +* SUBROUTINE ZDRVSX( NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH, +* NIUNIT, NOUNIT, A, LDA, H, HT, W, WT, WTMP, VS, +* LDVS, VS1, RESULT, WORK, LWORK, RWORK, BWORK, +* INFO ) +* +* .. Scalar Arguments .. +* INTEGER INFO, LDA, LDVS, LWORK, NIUNIT, NOUNIT, NSIZES, +* $ NTYPES +* DOUBLE PRECISION THRESH +* .. +* .. Array Arguments .. +* LOGICAL BWORK( * ), DOTYPE( * ) +* INTEGER ISEED( 4 ), NN( * ) +* DOUBLE PRECISION RESULT( 17 ), RWORK( * ) +* COMPLEX*16 A( LDA, * ), H( LDA, * ), HT( LDA, * ), +* $ VS( LDVS, * ), VS1( LDVS, * ), W( * ), +* $ WORK( * ), WT( * ), WTMP( * ) +* .. +* +* Purpose +* ======= +* +*>\details \b Purpose: +*>\verbatim +*> +*> ZDRVSX checks the nonsymmetric eigenvalue (Schur form) problem +*> expert driver ZGEESX. +*> +*> ZDRVSX 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. +*> +*> When ZDRVSX is called, a number of matrix "sizes" ("n's") and a +*> number of matrix "types" are specified. For each size ("n") +*> 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) 0 if T is in Schur form, 1/ulp otherwise +*> (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) 0 if W are eigenvalues of T +*> 1/ulp otherwise +*> (no sorting of eigenvalues) +*> +*> (5) 0 if T(with VS) = T(without VS), +*> 1/ulp otherwise +*> (no sorting of eigenvalues) +*> +*> (6) 0 if eigenvalues(with VS) = eigenvalues(without VS), +*> 1/ulp otherwise +*> (no sorting of eigenvalues) +*> +*> (7) 0 if T is in Schur form, 1/ulp otherwise +*> (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) 0 if W are eigenvalues of T +*> 1/ulp otherwise +*> If workspace sufficient, also compare W with and +*> without reciprocal condition numbers +*> (with sorting of eigenvalues) +*> +*> (11) 0 if T(with VS) = T(without VS), +*> 1/ulp otherwise +*> If workspace sufficient, also compare T with and without +*> reciprocal condition numbers +*> (with sorting of eigenvalues) +*> +*> (12) 0 if eigenvalues(with VS) = eigenvalues(without VS), +*> 1/ulp otherwise +*> 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, ..., 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 "clustered" entries 1, ULP, ..., ULP +*> and random complex angles. +*> +*> (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 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 orthogonal and +*> T has "clustered" 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 "clustered" 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 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 ZGEESX 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 ZGEESX 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. +*> +*>\endverbatim +* +* Arguments +* ========= +* +*> \param[in] NSIZES +*> \verbatim +*> NSIZES is INTEGER +*> The number of sizes of matrices to use. NSIZES must be at +*> least zero. If it is zero, no randomly generated matrices +*> are tested, but any test matrices read from NIUNIT will be +*> tested. +*> \endverbatim +*> +*> \param[in] NN +*> \verbatim +*> NN is INTEGER array, 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. +*> \endverbatim +*> +*> \param[in] NTYPES +*> \verbatim +*> NTYPES is INTEGER +*> The number of elements in DOTYPE. NTYPES must be at least +*> zero. If it is zero, no randomly generated test matrices +*> are tested, but and test matrices read from NIUNIT will be +*> tested. If it is MAXTYP+1 and NSIZES is 1, then an +*> additional type, MAXTYP+1 is defined, which is to use +*> whatever matrix is in A. This is only useful if +*> DOTYPE(1:MAXTYP) is .FALSE. and DOTYPE(MAXTYP+1) is .TRUE. . +*> \endverbatim +*> +*> \param[in] DOTYPE +*> \verbatim +*> DOTYPE is LOGICAL array, dimension (NTYPES) +*> If DOTYPE(j) is .TRUE., then for each size in NN a +*> matrix of that size and of type j will be 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, DOTYPE(MAXTYP+1) through DOTYPE(NTYPES) +*> will be ignored. +*> \endverbatim +*> +*> \param[in,out] ISEED +*> \verbatim +*> ISEED is 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 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 of ISEED are changed on exit, and can be used in the +*> next call to ZDRVSX to continue the same random number +*> sequence. +*> \endverbatim +*> +*> \param[in] THRESH +*> \verbatim +*> THRESH is DOUBLE PRECISION +*> A test will count 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. +*> \endverbatim +*> +*> \param[in] NIUNIT +*> \verbatim +*> NIUNIT is INTEGER +*> The FORTRAN unit number for reading in the data file of +*> problems to solve. +*> \endverbatim +*> +*> \param[in] NOUNIT +*> \verbatim +*> NOUNIT is INTEGER +*> The FORTRAN unit number for printing out error messages +*> (e.g., if a routine returns INFO not equal to 0.) +*> \endverbatim +*> +*> \param[out] A +*> \verbatim +*> A is COMPLEX*16 array, dimension (LDA, max(NN)) +*> Used to hold the matrix whose eigenvalues are to be +*> computed. On exit, A contains the last matrix actually used. +*> \endverbatim +*> +*> \param[in] LDA +*> \verbatim +*> LDA is INTEGER +*> The leading dimension of A, and H. LDA must be at +*> least 1 and at least max( NN ). +*> \endverbatim +*> +*> \param[out] H +*> \verbatim +*> H is COMPLEX*16 array, dimension (LDA, max(NN)) +*> Another copy of the test matrix A, modified by ZGEESX. +*> \endverbatim +*> +*> \param[out] HT +*> \verbatim +*> HT is COMPLEX*16 array, dimension (LDA, max(NN)) +*> Yet another copy of the test matrix A, modified by ZGEESX. +*> \endverbatim +*> +*> \param[out] W +*> \verbatim +*> W is COMPLEX*16 array, dimension (max(NN)) +*> The computed eigenvalues of A. +*> \endverbatim +*> +*> \param[out] WT +*> \verbatim +*> WT is COMPLEX*16 array, dimension (max(NN)) +*> Like W, this array contains the eigenvalues of A, +*> but those computed when ZGEESX only computes a partial +*> eigendecomposition, i.e. not Schur vectors +*> \endverbatim +*> +*> \param[out] WTMP +*> \verbatim +*> WTMP is COMPLEX*16 array, dimension (max(NN)) +*> More temporary storage for eigenvalues. +*> \endverbatim +*> +*> \param[out] VS +*> \verbatim +*> VS is COMPLEX*16 array, dimension (LDVS, max(NN)) +*> VS holds the computed Schur vectors. +*> \endverbatim +*> +*> \param[in] LDVS +*> \verbatim +*> LDVS is INTEGER +*> Leading dimension of VS. Must be at least max(1,max(NN)). +*> \endverbatim +*> +*> \param[out] VS1 +*> \verbatim +*> VS1 is COMPLEX*16 array, dimension (LDVS, max(NN)) +*> VS1 holds another copy of the computed Schur vectors. +*> \endverbatim +*> +*> \param[out] RESULT +*> \verbatim +*> RESULT is DOUBLE PRECISION array, dimension (17) +*> The values computed by the 17 tests described above. +*> The values are currently limited to 1/ulp, to avoid overflow. +*> \endverbatim +*> +*> \param[out] WORK +*> \verbatim +*> WORK is COMPLEX*16 array, dimension (LWORK) +*> \endverbatim +*> +*> \param[in] LWORK +*> \verbatim +*> LWORK is INTEGER +*> The number of entries in WORK. This must be at least +*> max(1,2*NN(j)**2) for all j. +*> \endverbatim +*> +*> \param[out] RWORK +*> \verbatim +*> RWORK is DOUBLE PRECISION array, dimension (max(NN)) +*> \endverbatim +*> +*> \param[out] BWORK +*> \verbatim +*> BWORK is LOGICAL array, dimension (max(NN)) +*> \endverbatim +*> +*> \param[out] INFO +*> \verbatim +*> INFO is INTEGER +*> If 0, successful exit. +*> <0, input parameter -INFO is incorrect +*> >0, ZLATMR, CLATMS, CLATME or ZGET24 returned an error +*> code and INFO is its absolute value +*> \endverbatim +*> \verbatim +*>----------------------------------------------------------------------- +*> \endverbatim +*> \verbatim +*> Some Local Variables and Parameters: +*> ---- ----- --------- --- ---------- +*> ZERO, ONE Real 0 and 1. +*> MAXTYP The number of types defined. +*> NMAX Largest value in NN. +*> NERRS The number of tests which have exceeded THRESH +*> COND, CONDS, +*> IMODE Values to be passed to the matrix generators. +*> ANORM Norm of A; passed to matrix generators. +*> \endverbatim +*> \verbatim +*> OVFL, UNFL Overflow and underflow thresholds. +*> ULP, ULPINV Finest relative precision and its inverse. +*> RTULP, RTULPI Square roots of the previous 4 values. +*> The following four arrays decode JTYPE: +*> KTYPE(j) The general type (1-10) for type "j". +*> KMODE(j) The MODE value to be passed to the matrix +*> generator for type "j". +*> KMAGN(j) The order of magnitude ( O(1), +*> O(overflow^(1/2) ), O(underflow^(1/2) ) +*> KCONDS(j) Selectw whether CONDS is to be 1 or +*> 1/sqrt(ulp). (0 means irrelevant.) +*> \endverbatim +*> +* +* Authors +* ======= +* +*> \author Univ. of Tennessee +*> \author Univ. of California Berkeley +*> \author Univ. of Colorado Denver +*> \author NAG Ltd. +* +*> \date November 2011 +* +*> \ingroup complex16_eig +* +* ===================================================================== SUBROUTINE ZDRVSX( NSIZES, NN, NTYPES, DOTYPE, ISEED, THRESH, $ NIUNIT, NOUNIT, A, LDA, H, HT, W, WT, WTMP, VS, $ LDVS, VS1, RESULT, WORK, LWORK, RWORK, BWORK, $ INFO ) * * -- LAPACK test routine (version 3.1) -- -* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. -* November 2006 +* -- LAPACK is a software package provided by Univ. of Tennessee, -- +* -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- +* November 2011 * * .. Scalar Arguments .. INTEGER INFO, LDA, LDVS, LWORK, NIUNIT, NOUNIT, NSIZES, @@ -21,320 +459,6 @@ $ WORK( * ), WT( * ), WTMP( * ) * .. * -* Purpose -* ======= -* -* ZDRVSX checks the nonsymmetric eigenvalue (Schur form) problem -* expert driver ZGEESX. -* -* ZDRVSX 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. -* -* When ZDRVSX is called, a number of matrix "sizes" ("n's") and a -* number of matrix "types" are specified. For each size ("n") -* 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) 0 if T is in Schur form, 1/ulp otherwise -* (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) 0 if W are eigenvalues of T -* 1/ulp otherwise -* (no sorting of eigenvalues) -* -* (5) 0 if T(with VS) = T(without VS), -* 1/ulp otherwise -* (no sorting of eigenvalues) -* -* (6) 0 if eigenvalues(with VS) = eigenvalues(without VS), -* 1/ulp otherwise -* (no sorting of eigenvalues) -* -* (7) 0 if T is in Schur form, 1/ulp otherwise -* (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) 0 if W are eigenvalues of T -* 1/ulp otherwise -* If workspace sufficient, also compare W with and -* without reciprocal condition numbers -* (with sorting of eigenvalues) -* -* (11) 0 if T(with VS) = T(without VS), -* 1/ulp otherwise -* If workspace sufficient, also compare T with and without -* reciprocal condition numbers -* (with sorting of eigenvalues) -* -* (12) 0 if eigenvalues(with VS) = eigenvalues(without VS), -* 1/ulp otherwise -* 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, ..., 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 "clustered" entries 1, ULP, ..., ULP -* and random complex angles. -* -* (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 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 orthogonal and -* T has "clustered" 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 "clustered" 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 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 ZGEESX 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 ZGEESX 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. -* -* Arguments -* ========= -* -* NSIZES (input) INTEGER -* The number of sizes of matrices to use. NSIZES must be at -* least zero. If it is zero, no randomly generated matrices -* are tested, but any test matrices read from NIUNIT will be -* tested. -* -* NN (input) INTEGER array, 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 (input) INTEGER -* The number of elements in DOTYPE. NTYPES must be at least -* zero. If it is zero, no randomly generated test matrices -* are tested, but and test matrices read from NIUNIT will be -* tested. If it is MAXTYP+1 and NSIZES is 1, then an -* additional type, MAXTYP+1 is defined, which is to use -* whatever matrix is in A. This is only useful if -* DOTYPE(1:MAXTYP) is .FALSE. and DOTYPE(MAXTYP+1) is .TRUE. . -* -* DOTYPE (input) LOGICAL array, dimension (NTYPES) -* If DOTYPE(j) is .TRUE., then for each size in NN a -* matrix of that size and of type j will be 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, DOTYPE(MAXTYP+1) through DOTYPE(NTYPES) -* will be ignored. -* -* ISEED (input/output) 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 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 of ISEED are changed on exit, and can be used in the -* next call to ZDRVSX to continue the same random number -* sequence. -* -* THRESH (input) DOUBLE PRECISION -* A test will count 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. -* -* NIUNIT (input) INTEGER -* The FORTRAN unit number for reading in the data file of -* problems to solve. -* -* NOUNIT (input) INTEGER -* The FORTRAN unit number for printing out error messages -* (e.g., if a routine returns INFO not equal to 0.) -* -* A (workspace) COMPLEX*16 array, dimension (LDA, max(NN)) -* Used to hold the matrix whose eigenvalues are to be -* computed. On exit, A contains the last matrix actually used. -* -* LDA (input) INTEGER -* The leading dimension of A, and H. LDA must be at -* least 1 and at least max( NN ). -* -* H (workspace) COMPLEX*16 array, dimension (LDA, max(NN)) -* Another copy of the test matrix A, modified by ZGEESX. -* -* HT (workspace) COMPLEX*16 array, dimension (LDA, max(NN)) -* Yet another copy of the test matrix A, modified by ZGEESX. -* -* W (workspace) COMPLEX*16 array, dimension (max(NN)) -* The computed eigenvalues of A. -* -* WT (workspace) COMPLEX*16 array, dimension (max(NN)) -* Like W, this array contains the eigenvalues of A, -* but those computed when ZGEESX only computes a partial -* eigendecomposition, i.e. not Schur vectors -* -* WTMP (workspace) COMPLEX*16 array, dimension (max(NN)) -* More temporary storage for eigenvalues. -* -* VS (workspace) COMPLEX*16 array, dimension (LDVS, max(NN)) -* VS holds the computed Schur vectors. -* -* LDVS (input) INTEGER -* Leading dimension of VS. Must be at least max(1,max(NN)). -* -* VS1 (workspace) COMPLEX*16 array, dimension (LDVS, max(NN)) -* VS1 holds another copy of the computed Schur vectors. -* -* RESULT (output) DOUBLE PRECISION array, dimension (17) -* The values computed by the 17 tests described above. -* The values are currently limited to 1/ulp, to avoid overflow. -* -* WORK (workspace) COMPLEX*16 array, dimension (LWORK) -* -* LWORK (input) INTEGER -* The number of entries in WORK. This must be at least -* max(1,2*NN(j)**2) for all j. -* -* RWORK (workspace) DOUBLE PRECISION array, dimension (max(NN)) -* -* BWORK (workspace) LOGICAL array, dimension (max(NN)) -* -* INFO (output) INTEGER -* If 0, successful exit. -* <0, input parameter -INFO is incorrect -* >0, ZLATMR, CLATMS, CLATME or ZGET24 returned an error -* code and INFO is its absolute value -* -*----------------------------------------------------------------------- -* -* Some Local Variables and Parameters: -* ---- ----- --------- --- ---------- -* ZERO, ONE Real 0 and 1. -* MAXTYP The number of types defined. -* NMAX Largest value in NN. -* NERRS The number of tests which have exceeded THRESH -* 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. -* RTULP, RTULPI Square roots of the previous 4 values. -* The following four arrays decode JTYPE: -* KTYPE(j) The general type (1-10) for type "j". -* KMODE(j) The MODE value to be passed to the matrix -* generator for type "j". -* KMAGN(j) The order of magnitude ( O(1), -* O(overflow^(1/2) ), O(underflow^(1/2) ) -* KCONDS(j) Selectw whether CONDS is to be 1 or -* 1/sqrt(ulp). (0 means irrelevant.) -* * ===================================================================== * * .. Parameters .. |