.TH "TESTING/EIG/cdrges.f" 3 "Version 3.12.0" "LAPACK" \" -*- nroff -*- .ad l .nh .SH NAME TESTING/EIG/cdrges.f .SH SYNOPSIS .br .PP .SS "Functions/Subroutines" .in +1c .ti -1c .RI "subroutine \fBcdrges\fP (nsizes, nn, ntypes, dotype, iseed, thresh, nounit, a, lda, b, s, t, q, ldq, z, alpha, beta, work, lwork, rwork, result, bwork, info)" .br .RI "\fBCDRGES\fP " .in -1c .SH "Function/Subroutine Documentation" .PP .SS "subroutine cdrges (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( lda, * ) b, complex, dimension( lda, * ) s, complex, dimension( lda, * ) t, complex, dimension( ldq, * ) q, integer ldq, complex, dimension( ldq, * ) z, complex, dimension( * ) alpha, complex, dimension( * ) beta, complex, dimension( * ) work, integer lwork, real, dimension( * ) rwork, real, dimension( 13 ) result, logical, dimension( * ) bwork, integer info)" .PP \fBCDRGES\fP .PP \fBPurpose:\fP .RS 4 .PP .nf CDRGES checks the nonsymmetric generalized eigenvalue (Schur form) problem driver CGGES\&. CGGES factors A and B as Q*S*Z' and Q*T*Z' , where ' means conjugate transpose, S and T are upper triangular (i\&.e\&., in generalized Schur form), and Q and Z are unitary\&. It also computes the generalized eigenvalues (alpha(j),beta(j)), j=1,\&.\&.\&.,n\&. Thus, w(j) = alpha(j)/beta(j) is a root of the characteristic equation det( A - w(j) B ) = 0 Optionally it also reorder the eigenvalues so that a selected cluster of eigenvalues appears in the leading diagonal block of the Schur forms\&. When CDRGES 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, a pair of matrices (A, B) will be generated and used for testing\&. For each matrix pair, the following 13 tests will be performed and compared with the threshold THRESH except the tests (5), (11) and (13)\&. (1) | A - Q S Z' | / ( |A| n ulp ) (no sorting of eigenvalues) (2) | B - Q T Z' | / ( |B| n ulp ) (no sorting of eigenvalues) (3) | I - QQ' | / ( n ulp ) (no sorting of eigenvalues) (4) | I - ZZ' | / ( n ulp ) (no sorting of eigenvalues) (5) if A is in Schur form (i\&.e\&. triangular form) (no sorting of eigenvalues) (6) if eigenvalues = diagonal elements of the Schur form (S, T), i\&.e\&., test the maximum over j of D(j) where: |alpha(j) - S(j,j)| |beta(j) - T(j,j)| D(j) = ------------------------ + ----------------------- max(|alpha(j)|,|S(j,j)|) max(|beta(j)|,|T(j,j)|) (no sorting of eigenvalues) (7) | (A,B) - Q (S,T) Z' | / ( |(A,B)| n ulp ) (with sorting of eigenvalues)\&. (8) | I - QQ' | / ( n ulp ) (with sorting of eigenvalues)\&. (9) | I - ZZ' | / ( n ulp ) (with sorting of eigenvalues)\&. (10) if A is in Schur form (i\&.e\&. quasi-triangular form) (with sorting of eigenvalues)\&. (11) if eigenvalues = diagonal elements of the Schur form (S, T), i\&.e\&. test the maximum over j of D(j) where: |alpha(j) - S(j,j)| |beta(j) - T(j,j)| D(j) = ------------------------ + ----------------------- max(|alpha(j)|,|S(j,j)|) max(|beta(j)|,|T(j,j)|) (with sorting of eigenvalues)\&. (12) if sorting worked and SDIM is the number of eigenvalues which were CELECTed\&. Test Matrices ============= The sizes of the test matrices 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) ( 0, 0 ) (a pair of zero matrices) (2) ( I, 0 ) (an identity and a zero matrix) (3) ( 0, I ) (an identity and a zero matrix) (4) ( I, I ) (a pair of identity matrices) t t (5) ( J , J ) (a pair of transposed Jordan blocks) t ( I 0 ) (6) ( X, Y ) where X = ( J 0 ) and Y = ( t ) ( 0 I ) ( 0 J ) and I is a k x k identity and J a (k+1)x(k+1) Jordan block; k=(N-1)/2 (7) ( D, I ) where D is diag( 0, 1,\&.\&.\&., N-1 ) (a diagonal matrix with those diagonal entries\&.) (8) ( I, D ) (9) ( big*D, small*I ) where 'big' is near overflow and small=1/big (10) ( small*D, big*I ) (11) ( big*I, small*D ) (12) ( small*I, big*D ) (13) ( big*D, big*I ) (14) ( small*D, small*I ) (15) ( D1, D2 ) where D1 is diag( 0, 0, 1, \&.\&.\&., N-3, 0 ) and D2 is diag( 0, N-3, N-4,\&.\&.\&., 1, 0, 0 ) t t (16) Q ( J , J ) Z where Q and Z are random orthogonal matrices\&. (17) Q ( T1, T2 ) Z where T1 and T2 are upper triangular matrices with random O(1) entries above the diagonal and diagonal entries diag(T1) = ( 0, 0, 1, \&.\&.\&., N-3, 0 ) and diag(T2) = ( 0, N-3, N-4,\&.\&.\&., 1, 0, 0 ) (18) Q ( T1, T2 ) Z diag(T1) = ( 0, 0, 1, 1, s, \&.\&.\&., s, 0 ) diag(T2) = ( 0, 1, 0, 1,\&.\&.\&., 1, 0 ) s = machine precision\&. (19) Q ( T1, T2 ) Z diag(T1)=( 0,0,1,1, 1-d, \&.\&.\&., 1-(N-5)*d=s, 0 ) diag(T2) = ( 0, 1, 0, 1, \&.\&.\&., 1, 0 ) N-5 (20) Q ( T1, T2 ) Z diag(T1)=( 0, 0, 1, 1, a, \&.\&.\&., a =s, 0 ) diag(T2) = ( 0, 1, 0, 1, \&.\&.\&., 1, 0, 0 ) (21) Q ( T1, T2 ) Z diag(T1)=( 0, 0, 1, r1, r2, \&.\&.\&., r(N-4), 0 ) diag(T2) = ( 0, 1, 0, 1, \&.\&.\&., 1, 0, 0 ) where r1,\&.\&.\&., r(N-4) are random\&. (22) Q ( big*T1, small*T2 ) Z diag(T1) = ( 0, 0, 1, \&.\&.\&., N-3, 0 ) diag(T2) = ( 0, 1, \&.\&.\&., 1, 0, 0 ) (23) Q ( small*T1, big*T2 ) Z diag(T1) = ( 0, 0, 1, \&.\&.\&., N-3, 0 ) diag(T2) = ( 0, 1, \&.\&.\&., 1, 0, 0 ) (24) Q ( small*T1, small*T2 ) Z diag(T1) = ( 0, 0, 1, \&.\&.\&., N-3, 0 ) diag(T2) = ( 0, 1, \&.\&.\&., 1, 0, 0 ) (25) Q ( big*T1, big*T2 ) Z diag(T1) = ( 0, 0, 1, \&.\&.\&., N-3, 0 ) diag(T2) = ( 0, 1, \&.\&.\&., 1, 0, 0 ) (26) Q ( T1, T2 ) Z where T1 and T2 are random upper-triangular matrices\&. .fi .PP .RE .PP \fBParameters\fP .RS 4 \fINSIZES\fP .PP .nf NSIZES is INTEGER The number of sizes of matrices to use\&. If it is zero, SDRGES does nothing\&. NSIZES >= 0\&. .fi .PP .br \fINN\fP .PP .nf NN is INTEGER array, dimension (NSIZES) An array containing the sizes to be used for the matrices\&. Zero values will be skipped\&. NN >= 0\&. .fi .PP .br \fINTYPES\fP .PP .nf NTYPES is INTEGER The number of elements in DOTYPE\&. If it is zero, SDRGES does nothing\&. It must be at least zero\&. 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 on input\&. This is only useful if DOTYPE(1:MAXTYP) is \&.FALSE\&. and DOTYPE(MAXTYP+1) is \&.TRUE\&. \&. .fi .PP .br \fIDOTYPE\fP .PP .nf 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\&. .fi .PP .br \fIISEED\fP .PP .nf 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 SDRGES to continue the same random number sequence\&. .fi .PP .br \fITHRESH\fP .PP .nf THRESH is REAL 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\&. THRESH >= 0\&. .fi .PP .br \fINOUNIT\fP .PP .nf NOUNIT is INTEGER The FORTRAN unit number for printing out error messages (e\&.g\&., if a routine returns IINFO not equal to 0\&.) .fi .PP .br \fIA\fP .PP .nf A is COMPLEX array, dimension(LDA, max(NN)) Used to hold the original A matrix\&. Used as input only if NTYPES=MAXTYP+1, DOTYPE(1:MAXTYP)=\&.FALSE\&., and DOTYPE(MAXTYP+1)=\&.TRUE\&. .fi .PP .br \fILDA\fP .PP .nf LDA is INTEGER The leading dimension of A, B, S, and T\&. It must be at least 1 and at least max( NN )\&. .fi .PP .br \fIB\fP .PP .nf B is COMPLEX array, dimension(LDA, max(NN)) Used to hold the original B matrix\&. Used as input only if NTYPES=MAXTYP+1, DOTYPE(1:MAXTYP)=\&.FALSE\&., and DOTYPE(MAXTYP+1)=\&.TRUE\&. .fi .PP .br \fIS\fP .PP .nf S is COMPLEX array, dimension (LDA, max(NN)) The Schur form matrix computed from A by CGGES\&. On exit, S contains the Schur form matrix corresponding to the matrix in A\&. .fi .PP .br \fIT\fP .PP .nf T is COMPLEX array, dimension (LDA, max(NN)) The upper triangular matrix computed from B by CGGES\&. .fi .PP .br \fIQ\fP .PP .nf Q is COMPLEX array, dimension (LDQ, max(NN)) The (left) orthogonal matrix computed by CGGES\&. .fi .PP .br \fILDQ\fP .PP .nf LDQ is INTEGER The leading dimension of Q and Z\&. It must be at least 1 and at least max( NN )\&. .fi .PP .br \fIZ\fP .PP .nf Z is COMPLEX array, dimension( LDQ, max(NN) ) The (right) orthogonal matrix computed by CGGES\&. .fi .PP .br \fIALPHA\fP .PP .nf ALPHA is COMPLEX array, dimension (max(NN)) .fi .PP .br \fIBETA\fP .PP .nf BETA is COMPLEX array, dimension (max(NN)) The generalized eigenvalues of (A,B) computed by CGGES\&. ALPHA(k) / BETA(k) is the k-th generalized eigenvalue of A and B\&. .fi .PP .br \fIWORK\fP .PP .nf WORK is COMPLEX array, dimension (LWORK) .fi .PP .br \fILWORK\fP .PP .nf LWORK is INTEGER The dimension of the array WORK\&. LWORK >= 3*N*N\&. .fi .PP .br \fIRWORK\fP .PP .nf RWORK is REAL array, dimension ( 8*N ) Real workspace\&. .fi .PP .br \fIRESULT\fP .PP .nf RESULT is REAL array, dimension (15) The values computed by the tests described above\&. The values are currently limited to 1/ulp, to avoid overflow\&. .fi .PP .br \fIBWORK\fP .PP .nf BWORK is LOGICAL array, dimension (N) .fi .PP .br \fIINFO\fP .PP .nf INFO is INTEGER = 0: successful exit < 0: if INFO = -i, the i-th argument had an illegal value\&. > 0: A routine returned an error code\&. INFO is the absolute value of the INFO value returned\&. .fi .PP .RE .PP \fBAuthor\fP .RS 4 Univ\&. of Tennessee .PP Univ\&. of California Berkeley .PP Univ\&. of Colorado Denver .PP NAG Ltd\&. .RE .PP .PP Definition at line \fB378\fP of file \fBcdrges\&.f\fP\&. .SH "Author" .PP Generated automatically by Doxygen for LAPACK from the source code\&.