.TH "TESTING/EIG/zdrvbd.f" 3 "Version 3.12.0" "LAPACK" \" -*- nroff -*- .ad l .nh .SH NAME TESTING/EIG/zdrvbd.f .SH SYNOPSIS .br .PP .SS "Functions/Subroutines" .in +1c .ti -1c .RI "subroutine \fBzdrvbd\fP (nsizes, mm, nn, ntypes, dotype, iseed, thresh, a, lda, u, ldu, vt, ldvt, asav, usav, vtsav, s, ssav, e, work, lwork, rwork, iwork, nounit, info)" .br .RI "\fBZDRVBD\fP " .in -1c .SH "Function/Subroutine Documentation" .PP .SS "subroutine zdrvbd (integer nsizes, integer, dimension( * ) mm, integer, dimension( * ) nn, integer ntypes, logical, dimension( * ) dotype, integer, dimension( 4 ) iseed, double precision thresh, complex*16, dimension( lda, * ) a, integer lda, complex*16, dimension( ldu, * ) u, integer ldu, complex*16, dimension( ldvt, * ) vt, integer ldvt, complex*16, dimension( lda, * ) asav, complex*16, dimension( ldu, * ) usav, complex*16, dimension( ldvt, * ) vtsav, double precision, dimension( * ) s, double precision, dimension( * ) ssav, double precision, dimension( * ) e, complex*16, dimension( * ) work, integer lwork, double precision, dimension( * ) rwork, integer, dimension( * ) iwork, integer nounit, integer info)" .PP \fBZDRVBD\fP .PP \fBPurpose:\fP .RS 4 .PP .nf ZDRVBD checks the singular value decomposition (SVD) driver ZGESVD, ZGESDD, ZGESVJ, ZGEJSV, ZGESVDX, and ZGESVDQ\&. ZGESVD and ZGESDD factors A = U diag(S) VT, where U and VT are unitary and diag(S) is diagonal with the entries of the array S on its diagonal\&. The entries of S are the singular values, nonnegative and stored in decreasing order\&. U and VT can be optionally not computed, overwritten on A, or computed partially\&. A is M by N\&. Let MNMIN = min( M, N )\&. S has dimension MNMIN\&. U can be M by M or M by MNMIN\&. VT can be N by N or MNMIN by N\&. When ZDRVBD is called, a number of matrix 'sizes' (M's and N's) and a number of matrix 'types' are specified\&. For each size (M,N) and each type of matrix, and for the minimal workspace as well as workspace adequate to permit blocking, an M x N matrix 'A' will be generated and used to test the SVD routines\&. For each matrix, A will be factored as A = U diag(S) VT and the following 12 tests computed: Test for ZGESVD: (1) | A - U diag(S) VT | / ( |A| max(M,N) ulp ) (2) | I - U'U | / ( M ulp ) (3) | I - VT VT' | / ( N ulp ) (4) S contains MNMIN nonnegative values in decreasing order\&. (Return 0 if true, 1/ULP if false\&.) (5) | U - Upartial | / ( M ulp ) where Upartial is a partially computed U\&. (6) | VT - VTpartial | / ( N ulp ) where VTpartial is a partially computed VT\&. (7) | S - Spartial | / ( MNMIN ulp |S| ) where Spartial is the vector of singular values from the partial SVD Test for ZGESDD: (8) | A - U diag(S) VT | / ( |A| max(M,N) ulp ) (9) | I - U'U | / ( M ulp ) (10) | I - VT VT' | / ( N ulp ) (11) S contains MNMIN nonnegative values in decreasing order\&. (Return 0 if true, 1/ULP if false\&.) (12) | U - Upartial | / ( M ulp ) where Upartial is a partially computed U\&. (13) | VT - VTpartial | / ( N ulp ) where VTpartial is a partially computed VT\&. (14) | S - Spartial | / ( MNMIN ulp |S| ) where Spartial is the vector of singular values from the partial SVD Test for ZGESVDQ: (36) | A - U diag(S) VT | / ( |A| max(M,N) ulp ) (37) | I - U'U | / ( M ulp ) (38) | I - VT VT' | / ( N ulp ) (39) S contains MNMIN nonnegative values in decreasing order\&. (Return 0 if true, 1/ULP if false\&.) Test for ZGESVJ: (15) | A - U diag(S) VT | / ( |A| max(M,N) ulp ) (16) | I - U'U | / ( M ulp ) (17) | I - VT VT' | / ( N ulp ) (18) S contains MNMIN nonnegative values in decreasing order\&. (Return 0 if true, 1/ULP if false\&.) Test for ZGEJSV: (19) | A - U diag(S) VT | / ( |A| max(M,N) ulp ) (20) | I - U'U | / ( M ulp ) (21) | I - VT VT' | / ( N ulp ) (22) S contains MNMIN nonnegative values in decreasing order\&. (Return 0 if true, 1/ULP if false\&.) Test for ZGESVDX( 'V', 'V', 'A' )/ZGESVDX( 'N', 'N', 'A' ) (23) | A - U diag(S) VT | / ( |A| max(M,N) ulp ) (24) | I - U'U | / ( M ulp ) (25) | I - VT VT' | / ( N ulp ) (26) S contains MNMIN nonnegative values in decreasing order\&. (Return 0 if true, 1/ULP if false\&.) (27) | U - Upartial | / ( M ulp ) where Upartial is a partially computed U\&. (28) | VT - VTpartial | / ( N ulp ) where VTpartial is a partially computed VT\&. (29) | S - Spartial | / ( MNMIN ulp |S| ) where Spartial is the vector of singular values from the partial SVD Test for ZGESVDX( 'V', 'V', 'I' ) (30) | U' A VT''' - diag(S) | / ( |A| max(M,N) ulp ) (31) | I - U'U | / ( M ulp ) (32) | I - VT VT' | / ( N ulp ) Test for ZGESVDX( 'V', 'V', 'V' ) (33) | U' A VT''' - diag(S) | / ( |A| max(M,N) ulp ) (34) | I - U'U | / ( M ulp ) (35) | I - VT VT' | / ( N ulp ) The 'sizes' are specified by the arrays MM(1:NSIZES) and NN(1:NSIZES); the value of each element pair (MM(j),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 matrix of the form U D V, where U and V are unitary and D has evenly spaced entries 1, \&.\&.\&., ULP with random signs on the diagonal\&. (4) Same as (3), but multiplied by the underflow-threshold / ULP\&. (5) Same as (3), but multiplied by the overflow-threshold * ULP\&. .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, ZDRVBD does nothing\&. It must be at least zero\&. .fi .PP .br \fIMM\fP .PP .nf MM is INTEGER array, dimension (NSIZES) An array containing the matrix 'heights' to be used\&. For each j=1,\&.\&.\&.,NSIZES, if MM(j) is zero, then MM(j) and NN(j) will be ignored\&. The MM(j) values must be at least zero\&. .fi .PP .br \fINN\fP .PP .nf NN is INTEGER array, dimension (NSIZES) An array containing the matrix 'widths' to be used\&. For each j=1,\&.\&.\&.,NSIZES, if NN(j) is zero, then MM(j) and NN(j) will be ignored\&. The NN(j) values must be at least zero\&. .fi .PP .br \fINTYPES\fP .PP .nf NTYPES is INTEGER The number of elements in DOTYPE\&. If it is zero, ZDRVBD 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 matrices are in A and B\&. 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 (m,n), a matrix 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 ZDRVBD to continue the same random number sequence\&. .fi .PP .br \fITHRESH\fP .PP .nf 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\&. .fi .PP .br \fIA\fP .PP .nf A is COMPLEX*16 array, dimension (LDA,max(NN)) Used to hold the matrix whose singular values are to be computed\&. On exit, A contains the last matrix actually used\&. .fi .PP .br \fILDA\fP .PP .nf LDA is INTEGER The leading dimension of A\&. It must be at least 1 and at least max( MM )\&. .fi .PP .br \fIU\fP .PP .nf U is COMPLEX*16 array, dimension (LDU,max(MM)) Used to hold the computed matrix of right singular vectors\&. On exit, U contains the last such vectors actually computed\&. .fi .PP .br \fILDU\fP .PP .nf LDU is INTEGER The leading dimension of U\&. It must be at least 1 and at least max( MM )\&. .fi .PP .br \fIVT\fP .PP .nf VT is COMPLEX*16 array, dimension (LDVT,max(NN)) Used to hold the computed matrix of left singular vectors\&. On exit, VT contains the last such vectors actually computed\&. .fi .PP .br \fILDVT\fP .PP .nf LDVT is INTEGER The leading dimension of VT\&. It must be at least 1 and at least max( NN )\&. .fi .PP .br \fIASAV\fP .PP .nf ASAV is COMPLEX*16 array, dimension (LDA,max(NN)) Used to hold a different copy of the matrix whose singular values are to be computed\&. On exit, A contains the last matrix actually used\&. .fi .PP .br \fIUSAV\fP .PP .nf USAV is COMPLEX*16 array, dimension (LDU,max(MM)) Used to hold a different copy of the computed matrix of right singular vectors\&. On exit, USAV contains the last such vectors actually computed\&. .fi .PP .br \fIVTSAV\fP .PP .nf VTSAV is COMPLEX*16 array, dimension (LDVT,max(NN)) Used to hold a different copy of the computed matrix of left singular vectors\&. On exit, VTSAV contains the last such vectors actually computed\&. .fi .PP .br \fIS\fP .PP .nf S is DOUBLE PRECISION array, dimension (max(min(MM,NN))) Contains the computed singular values\&. .fi .PP .br \fISSAV\fP .PP .nf SSAV is DOUBLE PRECISION array, dimension (max(min(MM,NN))) Contains another copy of the computed singular values\&. .fi .PP .br \fIE\fP .PP .nf E is DOUBLE PRECISION array, dimension (max(min(MM,NN))) Workspace for ZGESVD\&. .fi .PP .br \fIWORK\fP .PP .nf WORK is COMPLEX*16 array, dimension (LWORK) .fi .PP .br \fILWORK\fP .PP .nf LWORK is INTEGER The number of entries in WORK\&. This must be at least MAX(3*MIN(M,N)+MAX(M,N)**2,5*MIN(M,N),3*MAX(M,N)) for all pairs (M,N)=(MM(j),NN(j)) .fi .PP .br \fIRWORK\fP .PP .nf RWORK is DOUBLE PRECISION array, dimension ( 5*max(max(MM,NN)) ) .fi .PP .br \fIIWORK\fP .PP .nf IWORK is INTEGER array, dimension at least 8*min(M,N) .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 \fIINFO\fP .PP .nf INFO is INTEGER If 0, then everything ran OK\&. -1: NSIZES < 0 -2: Some MM(j) < 0 -3: Some NN(j) < 0 -4: NTYPES < 0 -7: THRESH < 0 -10: LDA < 1 or LDA < MMAX, where MMAX is max( MM(j) )\&. -12: LDU < 1 or LDU < MMAX\&. -14: LDVT < 1 or LDVT < NMAX, where NMAX is max( NN(j) )\&. -21: LWORK too small\&. If ZLATMS, or ZGESVD returns an error code, the absolute value of it is 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 \fB397\fP of file \fBzdrvbd\&.f\fP\&. .SH "Author" .PP Generated automatically by Doxygen for LAPACK from the source code\&.