LAPACK 3.12.1
LAPACK: Linear Algebra PACKage
|
subroutine cdrvvx | ( | integer | nsizes, |
integer, dimension( * ) | nn, | ||
integer | ntypes, | ||
logical, dimension( * ) | dotype, | ||
integer, dimension( 4 ) | iseed, | ||
real | thresh, | ||
integer | niunit, | ||
integer | nounit, | ||
complex, dimension( lda, * ) | a, | ||
integer | lda, | ||
complex, dimension( lda, * ) | h, | ||
complex, dimension( * ) | w, | ||
complex, dimension( * ) | w1, | ||
complex, dimension( ldvl, * ) | vl, | ||
integer | ldvl, | ||
complex, dimension( ldvr, * ) | vr, | ||
integer | ldvr, | ||
complex, dimension( ldlre, * ) | lre, | ||
integer | ldlre, | ||
real, dimension( * ) | rcondv, | ||
real, dimension( * ) | rcndv1, | ||
real, dimension( * ) | rcdvin, | ||
real, dimension( * ) | rconde, | ||
real, dimension( * ) | rcnde1, | ||
real, dimension( * ) | rcdein, | ||
real, dimension( * ) | scale, | ||
real, dimension( * ) | scale1, | ||
real, dimension( 11 ) | result, | ||
complex, dimension( * ) | work, | ||
integer | nwork, | ||
real, dimension( * ) | rwork, | ||
integer | info ) |
CDRVVX
!> !> CDRVVX checks the nonsymmetric eigenvalue problem expert driver !> CGEEVX. !> !> CDRVVX 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 CDRVVX is called, a number of matrix () and a !> number of matrix are specified in the calling sequence. !> For each size () and each type of matrix, one matrix will be !> generated and used to test the nonsymmetric eigenroutines. For !> each matrix, 9 tests will be performed: !> !> (1) | A * VR - VR * W | / ( n |A| ulp ) !> !> Here VR is the matrix of unit right eigenvectors. !> W is a diagonal matrix with diagonal entries W(j). !> !> (2) | A**H * VL - VL * W**H | / ( n |A| ulp ) !> !> Here VL is the matrix of unit left eigenvectors, A**H is the !> conjugate transpose of A, and W is as above. !> !> (3) | |VR(i)| - 1 | / ulp and largest component real !> !> VR(i) denotes the i-th column of VR. !> !> (4) | |VL(i)| - 1 | / ulp and largest component real !> !> VL(i) denotes the i-th column of VL. !> !> (5) W(full) = W(partial) !> !> W(full) denotes the eigenvalues computed when VR, VL, RCONDV !> and RCONDE are also computed, and W(partial) denotes the !> eigenvalues computed when only some of VR, VL, RCONDV, and !> RCONDE are computed. !> !> (6) VR(full) = VR(partial) !> !> VR(full) denotes the right eigenvectors computed when VL, RCONDV !> and RCONDE are computed, and VR(partial) denotes the result !> when only some of VL and RCONDV are computed. !> !> (7) VL(full) = VL(partial) !> !> VL(full) denotes the left eigenvectors computed when VR, RCONDV !> and RCONDE are computed, and VL(partial) denotes the result !> when only some of VR and RCONDV are computed. !> !> (8) 0 if SCALE, ILO, IHI, ABNRM (full) = !> SCALE, ILO, IHI, ABNRM (partial) !> 1/ulp otherwise !> !> SCALE, ILO, IHI and ABNRM describe how the matrix is balanced. !> (full) is when VR, VL, RCONDE and RCONDV are also computed, and !> (partial) is when some are not computed. !> !> (9) RCONDV(full) = RCONDV(partial) !> !> RCONDV(full) denotes the reciprocal condition numbers of the !> right eigenvectors computed when VR, VL and RCONDE are also !> computed. RCONDV(partial) denotes the reciprocal condition !> numbers when only some of VR, VL and RCONDE are computed. !> !> 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 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 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 unitary and !> T has 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 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 |z| < 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 eigenvalues !> and right eigenvectors. For these matrices, in addition to tests !> (1) to (9) we will compute the following two tests: !> !> (10) |RCONDV - RCDVIN| / cond(RCONDV) !> !> RCONDV is the reciprocal right eigenvector condition number !> computed by CGEEVX 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. !> !> (11) |RCONDE - RCDEIN| / cond(RCONDE) !> !> RCONDE is the reciprocal eigenvalue condition number !> computed by CGEEVX 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. !>
[in] | NSIZES | !> 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. !> |
[in] | NN | !> 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. !> |
[in] | NTYPES | !> 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. . !> |
[in] | DOTYPE | !> 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. !> |
[in,out] | ISEED | !> 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 CDRVVX to continue the same random number !> sequence. !> |
[in] | THRESH | !> THRESH is REAL !> A test will count as if the , 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. !> |
[in] | NIUNIT | !> NIUNIT is INTEGER !> The FORTRAN unit number for reading in the data file of !> problems to solve. !> |
[in] | NOUNIT | !> NOUNIT is INTEGER !> The FORTRAN unit number for printing out error messages !> (e.g., if a routine returns INFO not equal to 0.) !> |
[out] | A | !> A is COMPLEX array, dimension (LDA, max(NN,12)) !> Used to hold the matrix whose eigenvalues are to be !> computed. On exit, A contains the last matrix actually used. !> |
[in] | LDA | !> LDA is INTEGER !> The leading dimension of A, and H. LDA must be at !> least 1 and at least max( NN, 12 ). (12 is the !> dimension of the largest matrix on the precomputed !> input file.) !> |
[out] | H | !> H is COMPLEX array, dimension (LDA, max(NN,12)) !> Another copy of the test matrix A, modified by CGEEVX. !> |
[out] | W | !> W is COMPLEX array, dimension (max(NN,12)) !> Contains the eigenvalues of A. !> |
[out] | W1 | !> W1 is COMPLEX array, dimension (max(NN,12)) !> Like W, this array contains the eigenvalues of A, !> but those computed when CGEEVX only computes a partial !> eigendecomposition, i.e. not the eigenvalues and left !> and right eigenvectors. !> |
[out] | VL | !> VL is COMPLEX array, dimension (LDVL, max(NN,12)) !> VL holds the computed left eigenvectors. !> |
[in] | LDVL | !> LDVL is INTEGER !> Leading dimension of VL. Must be at least max(1,max(NN,12)). !> |
[out] | VR | !> VR is COMPLEX array, dimension (LDVR, max(NN,12)) !> VR holds the computed right eigenvectors. !> |
[in] | LDVR | !> LDVR is INTEGER !> Leading dimension of VR. Must be at least max(1,max(NN,12)). !> |
[out] | LRE | !> LRE is COMPLEX array, dimension (LDLRE, max(NN,12)) !> LRE holds the computed right or left eigenvectors. !> |
[in] | LDLRE | !> LDLRE is INTEGER !> Leading dimension of LRE. Must be at least max(1,max(NN,12)) !> |
[out] | RCONDV | !> RCONDV is REAL array, dimension (N) !> RCONDV holds the computed reciprocal condition numbers !> for eigenvectors. !> |
[out] | RCNDV1 | !> RCNDV1 is REAL array, dimension (N) !> RCNDV1 holds more computed reciprocal condition numbers !> for eigenvectors. !> |
[in] | RCDVIN | !> RCDVIN is REAL array, dimension (N) !> When COMP = .TRUE. RCDVIN holds the precomputed reciprocal !> condition numbers for eigenvectors to be compared with !> RCONDV. !> |
[out] | RCONDE | !> RCONDE is REAL array, dimension (N) !> RCONDE holds the computed reciprocal condition numbers !> for eigenvalues. !> |
[out] | RCNDE1 | !> RCNDE1 is REAL array, dimension (N) !> RCNDE1 holds more computed reciprocal condition numbers !> for eigenvalues. !> |
[in] | RCDEIN | !> RCDEIN is REAL array, dimension (N) !> When COMP = .TRUE. RCDEIN holds the precomputed reciprocal !> condition numbers for eigenvalues to be compared with !> RCONDE. !> |
[out] | SCALE | !> SCALE is REAL array, dimension (N) !> Holds information describing balancing of matrix. !> |
[out] | SCALE1 | !> SCALE1 is REAL array, dimension (N) !> Holds information describing balancing of matrix. !> |
[out] | RESULT | !> RESULT is REAL array, dimension (11) !> The values computed by the seven tests described above. !> The values are currently limited to 1/ulp, to avoid !> overflow. !> |
[out] | WORK | !> WORK is COMPLEX array, dimension (NWORK) !> |
[in] | NWORK | !> NWORK is INTEGER !> The number of entries in WORK. This must be at least !> max(6*12+2*12**2,6*NN(j)+2*NN(j)**2) = !> max( 360 ,6*NN(j)+2*NN(j)**2) for all j. !> |
[out] | RWORK | !> RWORK is REAL array, dimension (2*max(NN,12)) !> |
[out] | INFO | !> INFO is INTEGER !> If 0, then successful exit. !> If <0, then input parameter -INFO is incorrect. !> If >0, CLATMR, CLATMS, CLATME or CGET23 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 or 12. !> 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 . !> 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) Selectw whether CONDS is to be 1 or !> 1/sqrt(ulp). (0 means irrelevant.) !> |
Definition at line 491 of file cdrvvx.f.