zdrvvx.c
Go to the documentation of this file.
00001 /* zdrvvx.f -- translated by f2c (version 20061008).
00002    You must link the resulting object file with libf2c:
00003         on Microsoft Windows system, link with libf2c.lib;
00004         on Linux or Unix systems, link with .../path/to/libf2c.a -lm
00005         or, if you install libf2c.a in a standard place, with -lf2c -lm
00006         -- in that order, at the end of the command line, as in
00007                 cc *.o -lf2c -lm
00008         Source for libf2c is in /netlib/f2c/libf2c.zip, e.g.,
00009 
00010                 http://www.netlib.org/f2c/libf2c.zip
00011 */
00012 
00013 #include "f2c.h"
00014 #include "blaswrap.h"
00015 
00016 /* Table of constant values */
00017 
00018 static doublecomplex c_b1 = {0.,0.};
00019 static doublecomplex c_b2 = {1.,0.};
00020 static integer c__0 = 0;
00021 static integer c__4 = 4;
00022 static integer c__6 = 6;
00023 static doublereal c_b39 = 1.;
00024 static integer c__1 = 1;
00025 static doublereal c_b49 = 0.;
00026 static integer c__2 = 2;
00027 static logical c_false = FALSE_;
00028 static integer c__3 = 3;
00029 static integer c__7 = 7;
00030 static integer c__5 = 5;
00031 static logical c_true = TRUE_;
00032 static integer c__22 = 22;
00033 
00034 /* Subroutine */ int zdrvvx_(integer *nsizes, integer *nn, integer *ntypes, 
00035         logical *dotype, integer *iseed, doublereal *thresh, integer *niunit, 
00036         integer *nounit, doublecomplex *a, integer *lda, doublecomplex *h__, 
00037         doublecomplex *w, doublecomplex *w1, doublecomplex *vl, integer *ldvl, 
00038          doublecomplex *vr, integer *ldvr, doublecomplex *lre, integer *ldlre, 
00039          doublereal *rcondv, doublereal *rcndv1, doublereal *rcdvin, 
00040         doublereal *rconde, doublereal *rcnde1, doublereal *rcdein, 
00041         doublereal *scale, doublereal *scale1, doublereal *result, 
00042         doublecomplex *work, integer *nwork, doublereal *rwork, integer *info)
00043 {
00044     /* Initialized data */
00045 
00046     static integer ktype[21] = { 1,2,3,4,4,4,4,4,6,6,6,6,6,6,6,6,6,6,9,9,9 };
00047     static integer kmagn[21] = { 1,1,1,1,1,1,2,3,1,1,1,1,1,1,1,1,2,3,1,2,3 };
00048     static integer kmode[21] = { 0,0,0,4,3,1,4,4,4,3,1,5,4,3,1,5,5,5,4,3,1 };
00049     static integer kconds[21] = { 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,2,2,0,0,0 };
00050     static char bal[1*4] = "N" "P" "S" "B";
00051 
00052     /* Format strings */
00053     static char fmt_9992[] = "(\002 ZDRVVX: \002,a,\002 returned INFO=\002,i"
00054             "6,\002.\002,/9x,\002N=\002,i6,\002, JTYPE=\002,i6,\002, ISEED="
00055             "(\002,3(i5,\002,\002),i5,\002)\002)";
00056     static char fmt_9999[] = "(/1x,a3,\002 -- Complex Eigenvalue-Eigenvect"
00057             "or \002,\002Decomposition Expert Driver\002,/\002 Matrix types ("
00058             "see ZDRVVX for details): \002)";
00059     static char fmt_9998[] = "(/\002 Special Matrices:\002,/\002  1=Zero mat"
00060             "rix.             \002,\002           \002,\002  5=Diagonal: geom"
00061             "etr. spaced entries.\002,/\002  2=Identity matrix.              "
00062             "      \002,\002  6=Diagona\002,\002l: clustered entries.\002,"
00063             "/\002  3=Transposed Jordan block.  \002,\002          \002,\002 "
00064             " 7=Diagonal: large, evenly spaced.\002,/\002  \002,\0024=Diagona"
00065             "l: evenly spaced entries.    \002,\002  8=Diagonal: s\002,\002ma"
00066             "ll, evenly spaced.\002)";
00067     static char fmt_9997[] = "(\002 Dense, Non-Symmetric Matrices:\002,/\002"
00068             "  9=Well-cond., ev\002,\002enly spaced eigenvals.\002,\002 14=Il"
00069             "l-cond., geomet. spaced e\002,\002igenals.\002,/\002 10=Well-con"
00070             "d., geom. spaced eigenvals. \002,\002 15=Ill-conditioned, cluste"
00071             "red e.vals.\002,/\002 11=Well-cond\002,\002itioned, clustered e."
00072             "vals. \002,\002 16=Ill-cond., random comp\002,\002lex \002,/\002"
00073             " 12=Well-cond., random complex \002,\002         \002,\002 17=Il"
00074             "l-cond., large rand. complx \002,/\002 13=Ill-condi\002,\002tion"
00075             "ed, evenly spaced.     \002,\002 18=Ill-cond., small rand.\002"
00076             ",\002 complx \002)";
00077     static char fmt_9996[] = "(\002 19=Matrix with random O(1) entries.   "
00078             " \002,\002 21=Matrix \002,\002with small random entries.\002,"
00079             "/\002 20=Matrix with large ran\002,\002dom entries.   \002,\002 "
00080             "22=Matrix read from input file\002,/)";
00081     static char fmt_9995[] = "(\002 Tests performed with test threshold ="
00082             "\002,f8.2,//\002 1 = | A VR - VR W | / ( n |A| ulp ) \002,/\002 "
00083             "2 = | transpose(A) VL - VL W | / ( n |A| ulp ) \002,/\002 3 = | "
00084             "|VR(i)| - 1 | / ulp \002,/\002 4 = | |VL(i)| - 1 | / ulp \002,"
00085             "/\002 5 = 0 if W same no matter if VR or VL computed,\002,\002 1"
00086             "/ulp otherwise\002,/\002 6 = 0 if VR same no matter what else co"
00087             "mputed,\002,\002  1/ulp otherwise\002,/\002 7 = 0 if VL same no "
00088             "matter what else computed,\002,\002  1/ulp otherwise\002,/\002 8"
00089             " = 0 if RCONDV same no matter what else computed,\002,\002  1/ul"
00090             "p otherwise\002,/\002 9 = 0 if SCALE, ILO, IHI, ABNRM same no ma"
00091             "tter what else\002,\002 computed,  1/ulp otherwise\002,/\002 10 "
00092             "= | RCONDV - RCONDV(precomputed) | / cond(RCONDV),\002,/\002 11 "
00093             "= | RCONDE - RCONDE(precomputed) | / cond(RCONDE),\002)";
00094     static char fmt_9994[] = "(\002 BALANC='\002,a1,\002',N=\002,i4,\002,I"
00095             "WK=\002,i1,\002, seed=\002,4(i4,\002,\002),\002 type \002,i2,"
00096             "\002, test(\002,i2,\002)=\002,g10.3)";
00097     static char fmt_9993[] = "(\002 N=\002,i5,\002, input example =\002,i3"
00098             ",\002,  test(\002,i2,\002)=\002,g10.3)";
00099 
00100     /* System generated locals */
00101     integer a_dim1, a_offset, h_dim1, h_offset, lre_dim1, lre_offset, vl_dim1,
00102              vl_offset, vr_dim1, vr_offset, i__1, i__2, i__3, i__4;
00103     doublecomplex z__1;
00104 
00105     /* Builtin functions */
00106     /* Subroutine */ int s_copy(char *, char *, ftnlen, ftnlen);
00107     double sqrt(doublereal);
00108     integer s_wsfe(cilist *), do_fio(integer *, char *, ftnlen), e_wsfe(void),
00109              s_rsle(cilist *), do_lio(integer *, integer *, char *, ftnlen), 
00110             e_rsle(void);
00111 
00112     /* Local variables */
00113     integer i__, j, n;
00114     doublereal wi, wr;
00115     integer iwk;
00116     doublereal ulp;
00117     integer ibal;
00118     doublereal cond;
00119     integer jcol;
00120     char path[3];
00121     integer nmax;
00122     doublereal unfl, ovfl;
00123     integer isrt;
00124     logical badnn;
00125     integer nfail, imode, iinfo;
00126     doublereal conds, anorm;
00127     extern /* Subroutine */ int zget23_(logical *, integer *, char *, integer 
00128             *, doublereal *, integer *, integer *, integer *, doublecomplex *, 
00129              integer *, doublecomplex *, doublecomplex *, doublecomplex *, 
00130             doublecomplex *, integer *, doublecomplex *, integer *, 
00131             doublecomplex *, integer *, doublereal *, doublereal *, 
00132             doublereal *, doublereal *, doublereal *, doublereal *, 
00133             doublereal *, doublereal *, doublereal *, doublecomplex *, 
00134             integer *, doublereal *, integer *);
00135     integer jsize, nerrs, itype, jtype, ntest;
00136     doublereal rtulp;
00137     extern /* Subroutine */ int dlabad_(doublereal *, doublereal *);
00138     char balanc[1];
00139     extern doublereal dlamch_(char *);
00140     integer idumma[1];
00141     extern /* Subroutine */ int xerbla_(char *, integer *);
00142     integer ioldsd[4];
00143     extern /* Subroutine */ int dlasum_(char *, integer *, integer *, integer 
00144             *), zlatme_(integer *, char *, integer *, doublecomplex *, 
00145              integer *, doublereal *, doublecomplex *, char *, char *, char *, 
00146              char *, doublereal *, integer *, doublereal *, integer *, 
00147             integer *, doublereal *, doublecomplex *, integer *, 
00148             doublecomplex *, integer *), zlaset_(char *, integer *, integer *, doublecomplex *, 
00149             doublecomplex *, doublecomplex *, integer *);
00150     integer ntestf;
00151     extern /* Subroutine */ int zlatmr_(integer *, integer *, char *, integer 
00152             *, char *, doublecomplex *, integer *, doublereal *, 
00153             doublecomplex *, char *, char *, doublecomplex *, integer *, 
00154             doublereal *, doublecomplex *, integer *, doublereal *, char *, 
00155             integer *, integer *, integer *, doublereal *, doublereal *, char 
00156             *, doublecomplex *, integer *, integer *, integer *), zlatms_(integer *, 
00157             integer *, char *, integer *, char *, doublereal *, integer *, 
00158             doublereal *, doublereal *, integer *, integer *, char *, 
00159             doublecomplex *, integer *, doublecomplex *, integer *);
00160     doublereal ulpinv;
00161     integer nnwork;
00162     doublereal rtulpi;
00163     integer mtypes, ntestt;
00164 
00165     /* Fortran I/O blocks */
00166     static cilist io___32 = { 0, 0, 0, fmt_9992, 0 };
00167     static cilist io___39 = { 0, 0, 0, fmt_9999, 0 };
00168     static cilist io___40 = { 0, 0, 0, fmt_9998, 0 };
00169     static cilist io___41 = { 0, 0, 0, fmt_9997, 0 };
00170     static cilist io___42 = { 0, 0, 0, fmt_9996, 0 };
00171     static cilist io___43 = { 0, 0, 0, fmt_9995, 0 };
00172     static cilist io___44 = { 0, 0, 0, fmt_9994, 0 };
00173     static cilist io___45 = { 0, 0, 1, 0, 0 };
00174     static cilist io___48 = { 0, 0, 0, 0, 0 };
00175     static cilist io___49 = { 0, 0, 0, 0, 0 };
00176     static cilist io___52 = { 0, 0, 0, fmt_9999, 0 };
00177     static cilist io___53 = { 0, 0, 0, fmt_9998, 0 };
00178     static cilist io___54 = { 0, 0, 0, fmt_9997, 0 };
00179     static cilist io___55 = { 0, 0, 0, fmt_9996, 0 };
00180     static cilist io___56 = { 0, 0, 0, fmt_9995, 0 };
00181     static cilist io___57 = { 0, 0, 0, fmt_9993, 0 };
00182 
00183 
00184 
00185 /*  -- LAPACK test routine (version 3.1) -- */
00186 /*     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. */
00187 /*     November 2006 */
00188 
00189 /*     .. Scalar Arguments .. */
00190 /*     .. */
00191 /*     .. Array Arguments .. */
00192 /*     .. */
00193 
00194 /*  Purpose */
00195 /*  ======= */
00196 
00197 /*     ZDRVVX  checks the nonsymmetric eigenvalue problem expert driver */
00198 /*     ZGEEVX. */
00199 
00200 /*     ZDRVVX uses both test matrices generated randomly depending on */
00201 /*     data supplied in the calling sequence, as well as on data */
00202 /*     read from an input file and including precomputed condition */
00203 /*     numbers to which it compares the ones it computes. */
00204 
00205 /*     When ZDRVVX is called, a number of matrix "sizes" ("n's") and a */
00206 /*     number of matrix "types" are specified in the calling sequence. */
00207 /*     For each size ("n") and each type of matrix, one matrix will be */
00208 /*     generated and used to test the nonsymmetric eigenroutines.  For */
00209 /*     each matrix, 9 tests will be performed: */
00210 
00211 /*     (1)     | A * VR - VR * W | / ( n |A| ulp ) */
00212 
00213 /*       Here VR is the matrix of unit right eigenvectors. */
00214 /*       W is a diagonal matrix with diagonal entries W(j). */
00215 
00216 /*     (2)     | A**H  * VL - VL * W**H | / ( n |A| ulp ) */
00217 
00218 /*       Here VL is the matrix of unit left eigenvectors, A**H is the */
00219 /*       conjugate transpose of A, and W is as above. */
00220 
00221 /*     (3)     | |VR(i)| - 1 | / ulp and largest component real */
00222 
00223 /*       VR(i) denotes the i-th column of VR. */
00224 
00225 /*     (4)     | |VL(i)| - 1 | / ulp and largest component real */
00226 
00227 /*       VL(i) denotes the i-th column of VL. */
00228 
00229 /*     (5)     W(full) = W(partial) */
00230 
00231 /*       W(full) denotes the eigenvalues computed when VR, VL, RCONDV */
00232 /*       and RCONDE are also computed, and W(partial) denotes the */
00233 /*       eigenvalues computed when only some of VR, VL, RCONDV, and */
00234 /*       RCONDE are computed. */
00235 
00236 /*     (6)     VR(full) = VR(partial) */
00237 
00238 /*       VR(full) denotes the right eigenvectors computed when VL, RCONDV */
00239 /*       and RCONDE are computed, and VR(partial) denotes the result */
00240 /*       when only some of VL and RCONDV are computed. */
00241 
00242 /*     (7)     VL(full) = VL(partial) */
00243 
00244 /*       VL(full) denotes the left eigenvectors computed when VR, RCONDV */
00245 /*       and RCONDE are computed, and VL(partial) denotes the result */
00246 /*       when only some of VR and RCONDV are computed. */
00247 
00248 /*     (8)     0 if SCALE, ILO, IHI, ABNRM (full) = */
00249 /*                  SCALE, ILO, IHI, ABNRM (partial) */
00250 /*             1/ulp otherwise */
00251 
00252 /*       SCALE, ILO, IHI and ABNRM describe how the matrix is balanced. */
00253 /*       (full) is when VR, VL, RCONDE and RCONDV are also computed, and */
00254 /*       (partial) is when some are not computed. */
00255 
00256 /*     (9)     RCONDV(full) = RCONDV(partial) */
00257 
00258 /*       RCONDV(full) denotes the reciprocal condition numbers of the */
00259 /*       right eigenvectors computed when VR, VL and RCONDE are also */
00260 /*       computed. RCONDV(partial) denotes the reciprocal condition */
00261 /*       numbers when only some of VR, VL and RCONDE are computed. */
00262 
00263 /*     The "sizes" are specified by an array NN(1:NSIZES); the value of */
00264 /*     each element NN(j) specifies one size. */
00265 /*     The "types" are specified by a logical array DOTYPE( 1:NTYPES ); */
00266 /*     if DOTYPE(j) is .TRUE., then matrix type "j" will be generated. */
00267 /*     Currently, the list of possible types is: */
00268 
00269 /*     (1)  The zero matrix. */
00270 /*     (2)  The identity matrix. */
00271 /*     (3)  A (transposed) Jordan block, with 1's on the diagonal. */
00272 
00273 /*     (4)  A diagonal matrix with evenly spaced entries */
00274 /*          1, ..., ULP  and random complex angles. */
00275 /*          (ULP = (first number larger than 1) - 1 ) */
00276 /*     (5)  A diagonal matrix with geometrically spaced entries */
00277 /*          1, ..., ULP  and random complex angles. */
00278 /*     (6)  A diagonal matrix with "clustered" entries 1, ULP, ..., ULP */
00279 /*          and random complex angles. */
00280 
00281 /*     (7)  Same as (4), but multiplied by a constant near */
00282 /*          the overflow threshold */
00283 /*     (8)  Same as (4), but multiplied by a constant near */
00284 /*          the underflow threshold */
00285 
00286 /*     (9)  A matrix of the form  U' T U, where U is unitary and */
00287 /*          T has evenly spaced entries 1, ..., ULP with random complex */
00288 /*          angles on the diagonal and random O(1) entries in the upper */
00289 /*          triangle. */
00290 
00291 /*     (10) A matrix of the form  U' T U, where U is unitary and */
00292 /*          T has geometrically spaced entries 1, ..., ULP with random */
00293 /*          complex angles on the diagonal and random O(1) entries in */
00294 /*          the upper triangle. */
00295 
00296 /*     (11) A matrix of the form  U' T U, where U is unitary and */
00297 /*          T has "clustered" entries 1, ULP,..., ULP with random */
00298 /*          complex angles on the diagonal and random O(1) entries in */
00299 /*          the upper triangle. */
00300 
00301 /*     (12) A matrix of the form  U' T U, where U is unitary and */
00302 /*          T has complex eigenvalues randomly chosen from */
00303 /*          ULP < |z| < 1   and random O(1) entries in the upper */
00304 /*          triangle. */
00305 
00306 /*     (13) A matrix of the form  X' T X, where X has condition */
00307 /*          SQRT( ULP ) and T has evenly spaced entries 1, ..., ULP */
00308 /*          with random complex angles on the diagonal and random O(1) */
00309 /*          entries in the upper triangle. */
00310 
00311 /*     (14) A matrix of the form  X' T X, where X has condition */
00312 /*          SQRT( ULP ) and T has geometrically spaced entries */
00313 /*          1, ..., ULP with random complex angles on the diagonal */
00314 /*          and random O(1) entries in the upper triangle. */
00315 
00316 /*     (15) A matrix of the form  X' T X, where X has condition */
00317 /*          SQRT( ULP ) and T has "clustered" entries 1, ULP,..., ULP */
00318 /*          with random complex angles on the diagonal and random O(1) */
00319 /*          entries in the upper triangle. */
00320 
00321 /*     (16) A matrix of the form  X' T X, where X has condition */
00322 /*          SQRT( ULP ) and T has complex eigenvalues randomly chosen */
00323 /*          from ULP < |z| < 1 and random O(1) entries in the upper */
00324 /*          triangle. */
00325 
00326 /*     (17) Same as (16), but multiplied by a constant */
00327 /*          near the overflow threshold */
00328 /*     (18) Same as (16), but multiplied by a constant */
00329 /*          near the underflow threshold */
00330 
00331 /*     (19) Nonsymmetric matrix with random entries chosen from |z| < 1 */
00332 /*          If N is at least 4, all entries in first two rows and last */
00333 /*          row, and first column and last two columns are zero. */
00334 /*     (20) Same as (19), but multiplied by a constant */
00335 /*          near the overflow threshold */
00336 /*     (21) Same as (19), but multiplied by a constant */
00337 /*          near the underflow threshold */
00338 
00339 /*     In addition, an input file will be read from logical unit number */
00340 /*     NIUNIT. The file contains matrices along with precomputed */
00341 /*     eigenvalues and reciprocal condition numbers for the eigenvalues */
00342 /*     and right eigenvectors. For these matrices, in addition to tests */
00343 /*     (1) to (9) we will compute the following two tests: */
00344 
00345 /*    (10)  |RCONDV - RCDVIN| / cond(RCONDV) */
00346 
00347 /*       RCONDV is the reciprocal right eigenvector condition number */
00348 /*       computed by ZGEEVX and RCDVIN (the precomputed true value) */
00349 /*       is supplied as input. cond(RCONDV) is the condition number of */
00350 /*       RCONDV, and takes errors in computing RCONDV into account, so */
00351 /*       that the resulting quantity should be O(ULP). cond(RCONDV) is */
00352 /*       essentially given by norm(A)/RCONDE. */
00353 
00354 /*    (11)  |RCONDE - RCDEIN| / cond(RCONDE) */
00355 
00356 /*       RCONDE is the reciprocal eigenvalue condition number */
00357 /*       computed by ZGEEVX and RCDEIN (the precomputed true value) */
00358 /*       is supplied as input.  cond(RCONDE) is the condition number */
00359 /*       of RCONDE, and takes errors in computing RCONDE into account, */
00360 /*       so that the resulting quantity should be O(ULP). cond(RCONDE) */
00361 /*       is essentially given by norm(A)/RCONDV. */
00362 
00363 /*  Arguments */
00364 /*  ========== */
00365 
00366 /*  NSIZES  (input) INTEGER */
00367 /*          The number of sizes of matrices to use.  NSIZES must be at */
00368 /*          least zero. If it is zero, no randomly generated matrices */
00369 /*          are tested, but any test matrices read from NIUNIT will be */
00370 /*          tested. */
00371 
00372 /*  NN      (input) INTEGER array, dimension (NSIZES) */
00373 /*          An array containing the sizes to be used for the matrices. */
00374 /*          Zero values will be skipped.  The values must be at least */
00375 /*          zero. */
00376 
00377 /*  NTYPES  (input) INTEGER */
00378 /*          The number of elements in DOTYPE. NTYPES must be at least */
00379 /*          zero. If it is zero, no randomly generated test matrices */
00380 /*          are tested, but and test matrices read from NIUNIT will be */
00381 /*          tested. If it is MAXTYP+1 and NSIZES is 1, then an */
00382 /*          additional type, MAXTYP+1 is defined, which is to use */
00383 /*          whatever matrix is in A.  This is only useful if */
00384 /*          DOTYPE(1:MAXTYP) is .FALSE. and DOTYPE(MAXTYP+1) is .TRUE. . */
00385 
00386 /*  DOTYPE  (input) LOGICAL array, dimension (NTYPES) */
00387 /*          If DOTYPE(j) is .TRUE., then for each size in NN a */
00388 /*          matrix of that size and of type j will be generated. */
00389 /*          If NTYPES is smaller than the maximum number of types */
00390 /*          defined (PARAMETER MAXTYP), then types NTYPES+1 through */
00391 /*          MAXTYP will not be generated.  If NTYPES is larger */
00392 /*          than MAXTYP, DOTYPE(MAXTYP+1) through DOTYPE(NTYPES) */
00393 /*          will be ignored. */
00394 
00395 /*  ISEED   (input/output) INTEGER array, dimension (4) */
00396 /*          On entry ISEED specifies the seed of the random number */
00397 /*          generator. The array elements should be between 0 and 4095; */
00398 /*          if not they will be reduced mod 4096.  Also, ISEED(4) must */
00399 /*          be odd.  The random number generator uses a linear */
00400 /*          congruential sequence limited to small integers, and so */
00401 /*          should produce machine independent random numbers. The */
00402 /*          values of ISEED are changed on exit, and can be used in the */
00403 /*          next call to ZDRVVX to continue the same random number */
00404 /*          sequence. */
00405 
00406 /*  THRESH  (input) DOUBLE PRECISION */
00407 /*          A test will count as "failed" if the "error", computed as */
00408 /*          described above, exceeds THRESH.  Note that the error */
00409 /*          is scaled to be O(1), so THRESH should be a reasonably */
00410 /*          small multiple of 1, e.g., 10 or 100.  In particular, */
00411 /*          it should not depend on the precision (single vs. double) */
00412 /*          or the size of the matrix.  It must be at least zero. */
00413 
00414 /*  NIUNIT  (input) INTEGER */
00415 /*          The FORTRAN unit number for reading in the data file of */
00416 /*          problems to solve. */
00417 
00418 /*  NOUNIT  (input) INTEGER */
00419 /*          The FORTRAN unit number for printing out error messages */
00420 /*          (e.g., if a routine returns INFO not equal to 0.) */
00421 
00422 /*  A       (workspace) COMPLEX*16 array, dimension (LDA, max(NN,12)) */
00423 /*          Used to hold the matrix whose eigenvalues are to be */
00424 /*          computed.  On exit, A contains the last matrix actually used. */
00425 
00426 /*  LDA     (input) INTEGER */
00427 /*          The leading dimension of A, and H. LDA must be at */
00428 /*          least 1 and at least max( NN, 12 ). (12 is the */
00429 /*          dimension of the largest matrix on the precomputed */
00430 /*          input file.) */
00431 
00432 /*  H       (workspace) COMPLEX*16 array, dimension (LDA, max(NN,12)) */
00433 /*          Another copy of the test matrix A, modified by ZGEEVX. */
00434 
00435 /*  W       (workspace) COMPLEX*16 array, dimension (max(NN,12)) */
00436 /*          Contains the eigenvalues of A. */
00437 
00438 /*  W1      (workspace) COMPLEX*16 array, dimension (max(NN,12)) */
00439 /*          Like W, this array contains the eigenvalues of A, */
00440 /*          but those computed when ZGEEVX only computes a partial */
00441 /*          eigendecomposition, i.e. not the eigenvalues and left */
00442 /*          and right eigenvectors. */
00443 
00444 /*  VL      (workspace) COMPLEX*16 array, dimension (LDVL, max(NN,12)) */
00445 /*          VL holds the computed left eigenvectors. */
00446 
00447 /*  LDVL    (input) INTEGER */
00448 /*          Leading dimension of VL. Must be at least max(1,max(NN,12)). */
00449 
00450 /*  VR      (workspace) COMPLEX*16 array, dimension (LDVR, max(NN,12)) */
00451 /*          VR holds the computed right eigenvectors. */
00452 
00453 /*  LDVR    (input) INTEGER */
00454 /*          Leading dimension of VR. Must be at least max(1,max(NN,12)). */
00455 
00456 /*  LRE     (workspace) COMPLEX*16 array, dimension (LDLRE, max(NN,12)) */
00457 /*          LRE holds the computed right or left eigenvectors. */
00458 
00459 /*  LDLRE   (input) INTEGER */
00460 /*          Leading dimension of LRE. Must be at least max(1,max(NN,12)) */
00461 
00462 /*  RESULT  (output) DOUBLE PRECISION array, dimension (11) */
00463 /*          The values computed by the seven tests described above. */
00464 /*          The values are currently limited to 1/ulp, to avoid */
00465 /*          overflow. */
00466 
00467 /*  WORK    (workspace) COMPLEX*16 array, dimension (NWORK) */
00468 
00469 /*  NWORK   (input) INTEGER */
00470 /*          The number of entries in WORK.  This must be at least */
00471 /*          max(6*12+2*12**2,6*NN(j)+2*NN(j)**2) = */
00472 /*          max(    360     ,6*NN(j)+2*NN(j)**2)    for all j. */
00473 
00474 /*  RWORK   (workspace) DOUBLE PRECISION array, dimension (2*max(NN,12)) */
00475 
00476 /*  INFO    (output) INTEGER */
00477 /*          If 0,  then successful exit. */
00478 /*          If <0, then input paramter -INFO is incorrect. */
00479 /*          If >0, ZLATMR, CLATMS, CLATME or ZGET23 returned an error */
00480 /*                 code, and INFO is its absolute value. */
00481 
00482 /* ----------------------------------------------------------------------- */
00483 
00484 /*     Some Local Variables and Parameters: */
00485 /*     ---- ----- --------- --- ---------- */
00486 
00487 /*     ZERO, ONE       Real 0 and 1. */
00488 /*     MAXTYP          The number of types defined. */
00489 /*     NMAX            Largest value in NN or 12. */
00490 /*     NERRS           The number of tests which have exceeded THRESH */
00491 /*     COND, CONDS, */
00492 /*     IMODE           Values to be passed to the matrix generators. */
00493 /*     ANORM           Norm of A; passed to matrix generators. */
00494 
00495 /*     OVFL, UNFL      Overflow and underflow thresholds. */
00496 /*     ULP, ULPINV     Finest relative precision and its inverse. */
00497 /*     RTULP, RTULPI   Square roots of the previous 4 values. */
00498 
00499 /*             The following four arrays decode JTYPE: */
00500 /*     KTYPE(j)        The general type (1-10) for type "j". */
00501 /*     KMODE(j)        The MODE value to be passed to the matrix */
00502 /*                     generator for type "j". */
00503 /*     KMAGN(j)        The order of magnitude ( O(1), */
00504 /*                     O(overflow^(1/2) ), O(underflow^(1/2) ) */
00505 /*     KCONDS(j)       Selectw whether CONDS is to be 1 or */
00506 /*                     1/sqrt(ulp).  (0 means irrelevant.) */
00507 
00508 /*  ===================================================================== */
00509 
00510 /*     .. Parameters .. */
00511 /*     .. */
00512 /*     .. Local Scalars .. */
00513 /*     .. */
00514 /*     .. Local Arrays .. */
00515 /*     .. */
00516 /*     .. External Functions .. */
00517 /*     .. */
00518 /*     .. External Subroutines .. */
00519 /*     .. */
00520 /*     .. Intrinsic Functions .. */
00521 /*     .. */
00522 /*     .. Data statements .. */
00523     /* Parameter adjustments */
00524     --nn;
00525     --dotype;
00526     --iseed;
00527     h_dim1 = *lda;
00528     h_offset = 1 + h_dim1;
00529     h__ -= h_offset;
00530     a_dim1 = *lda;
00531     a_offset = 1 + a_dim1;
00532     a -= a_offset;
00533     --w;
00534     --w1;
00535     vl_dim1 = *ldvl;
00536     vl_offset = 1 + vl_dim1;
00537     vl -= vl_offset;
00538     vr_dim1 = *ldvr;
00539     vr_offset = 1 + vr_dim1;
00540     vr -= vr_offset;
00541     lre_dim1 = *ldlre;
00542     lre_offset = 1 + lre_dim1;
00543     lre -= lre_offset;
00544     --rcondv;
00545     --rcndv1;
00546     --rcdvin;
00547     --rconde;
00548     --rcnde1;
00549     --rcdein;
00550     --scale;
00551     --scale1;
00552     --result;
00553     --work;
00554     --rwork;
00555 
00556     /* Function Body */
00557 /*     .. */
00558 /*     .. Executable Statements .. */
00559 
00560     s_copy(path, "Zomplex precision", (ftnlen)1, (ftnlen)17);
00561     s_copy(path + 1, "VX", (ftnlen)2, (ftnlen)2);
00562 
00563 /*     Check for errors */
00564 
00565     ntestt = 0;
00566     ntestf = 0;
00567     *info = 0;
00568 
00569 /*     Important constants */
00570 
00571     badnn = FALSE_;
00572 
00573 /*     7 is the largest dimension in the input file of precomputed */
00574 /*     problems */
00575 
00576     nmax = 7;
00577     i__1 = *nsizes;
00578     for (j = 1; j <= i__1; ++j) {
00579 /* Computing MAX */
00580         i__2 = nmax, i__3 = nn[j];
00581         nmax = max(i__2,i__3);
00582         if (nn[j] < 0) {
00583             badnn = TRUE_;
00584         }
00585 /* L10: */
00586     }
00587 
00588 /*     Check for errors */
00589 
00590     if (*nsizes < 0) {
00591         *info = -1;
00592     } else if (badnn) {
00593         *info = -2;
00594     } else if (*ntypes < 0) {
00595         *info = -3;
00596     } else if (*thresh < 0.) {
00597         *info = -6;
00598     } else if (*lda < 1 || *lda < nmax) {
00599         *info = -10;
00600     } else if (*ldvl < 1 || *ldvl < nmax) {
00601         *info = -15;
00602     } else if (*ldvr < 1 || *ldvr < nmax) {
00603         *info = -17;
00604     } else if (*ldlre < 1 || *ldlre < nmax) {
00605         *info = -19;
00606     } else /* if(complicated condition) */ {
00607 /* Computing 2nd power */
00608         i__1 = nmax;
00609         if (nmax * 6 + (i__1 * i__1 << 1) > *nwork) {
00610             *info = -30;
00611         }
00612     }
00613 
00614     if (*info != 0) {
00615         i__1 = -(*info);
00616         xerbla_("ZDRVVX", &i__1);
00617         return 0;
00618     }
00619 
00620 /*     If nothing to do check on NIUNIT */
00621 
00622     if (*nsizes == 0 || *ntypes == 0) {
00623         goto L160;
00624     }
00625 
00626 /*     More Important constants */
00627 
00628     unfl = dlamch_("Safe minimum");
00629     ovfl = 1. / unfl;
00630     dlabad_(&unfl, &ovfl);
00631     ulp = dlamch_("Precision");
00632     ulpinv = 1. / ulp;
00633     rtulp = sqrt(ulp);
00634     rtulpi = 1. / rtulp;
00635 
00636 /*     Loop over sizes, types */
00637 
00638     nerrs = 0;
00639 
00640     i__1 = *nsizes;
00641     for (jsize = 1; jsize <= i__1; ++jsize) {
00642         n = nn[jsize];
00643         if (*nsizes != 1) {
00644             mtypes = min(21,*ntypes);
00645         } else {
00646             mtypes = min(22,*ntypes);
00647         }
00648 
00649         i__2 = mtypes;
00650         for (jtype = 1; jtype <= i__2; ++jtype) {
00651             if (! dotype[jtype]) {
00652                 goto L140;
00653             }
00654 
00655 /*           Save ISEED in case of an error. */
00656 
00657             for (j = 1; j <= 4; ++j) {
00658                 ioldsd[j - 1] = iseed[j];
00659 /* L20: */
00660             }
00661 
00662 /*           Compute "A" */
00663 
00664 /*           Control parameters: */
00665 
00666 /*           KMAGN  KCONDS  KMODE        KTYPE */
00667 /*       =1  O(1)   1       clustered 1  zero */
00668 /*       =2  large  large   clustered 2  identity */
00669 /*       =3  small          exponential  Jordan */
00670 /*       =4                 arithmetic   diagonal, (w/ eigenvalues) */
00671 /*       =5                 random log   symmetric, w/ eigenvalues */
00672 /*       =6                 random       general, w/ eigenvalues */
00673 /*       =7                              random diagonal */
00674 /*       =8                              random symmetric */
00675 /*       =9                              random general */
00676 /*       =10                             random triangular */
00677 
00678             if (mtypes > 21) {
00679                 goto L90;
00680             }
00681 
00682             itype = ktype[jtype - 1];
00683             imode = kmode[jtype - 1];
00684 
00685 /*           Compute norm */
00686 
00687             switch (kmagn[jtype - 1]) {
00688                 case 1:  goto L30;
00689                 case 2:  goto L40;
00690                 case 3:  goto L50;
00691             }
00692 
00693 L30:
00694             anorm = 1.;
00695             goto L60;
00696 
00697 L40:
00698             anorm = ovfl * ulp;
00699             goto L60;
00700 
00701 L50:
00702             anorm = unfl * ulpinv;
00703             goto L60;
00704 
00705 L60:
00706 
00707             zlaset_("Full", lda, &n, &c_b1, &c_b1, &a[a_offset], lda);
00708             iinfo = 0;
00709             cond = ulpinv;
00710 
00711 /*           Special Matrices -- Identity & Jordan block */
00712 
00713 /*              Zero */
00714 
00715             if (itype == 1) {
00716                 iinfo = 0;
00717 
00718             } else if (itype == 2) {
00719 
00720 /*              Identity */
00721 
00722                 i__3 = n;
00723                 for (jcol = 1; jcol <= i__3; ++jcol) {
00724                     i__4 = jcol + jcol * a_dim1;
00725                     a[i__4].r = anorm, a[i__4].i = 0.;
00726 /* L70: */
00727                 }
00728 
00729             } else if (itype == 3) {
00730 
00731 /*              Jordan Block */
00732 
00733                 i__3 = n;
00734                 for (jcol = 1; jcol <= i__3; ++jcol) {
00735                     i__4 = jcol + jcol * a_dim1;
00736                     a[i__4].r = anorm, a[i__4].i = 0.;
00737                     if (jcol > 1) {
00738                         i__4 = jcol + (jcol - 1) * a_dim1;
00739                         a[i__4].r = 1., a[i__4].i = 0.;
00740                     }
00741 /* L80: */
00742                 }
00743 
00744             } else if (itype == 4) {
00745 
00746 /*              Diagonal Matrix, [Eigen]values Specified */
00747 
00748                 zlatms_(&n, &n, "S", &iseed[1], "H", &rwork[1], &imode, &cond, 
00749                          &anorm, &c__0, &c__0, "N", &a[a_offset], lda, &work[
00750                         n + 1], &iinfo);
00751 
00752             } else if (itype == 5) {
00753 
00754 /*              Symmetric, eigenvalues specified */
00755 
00756                 zlatms_(&n, &n, "S", &iseed[1], "H", &rwork[1], &imode, &cond, 
00757                          &anorm, &n, &n, "N", &a[a_offset], lda, &work[n + 1], 
00758                          &iinfo);
00759 
00760             } else if (itype == 6) {
00761 
00762 /*              General, eigenvalues specified */
00763 
00764                 if (kconds[jtype - 1] == 1) {
00765                     conds = 1.;
00766                 } else if (kconds[jtype - 1] == 2) {
00767                     conds = rtulpi;
00768                 } else {
00769                     conds = 0.;
00770                 }
00771 
00772                 zlatme_(&n, "D", &iseed[1], &work[1], &imode, &cond, &c_b2, 
00773                         " ", "T", "T", "T", &rwork[1], &c__4, &conds, &n, &n, 
00774                         &anorm, &a[a_offset], lda, &work[(n << 1) + 1], &
00775                         iinfo);
00776 
00777             } else if (itype == 7) {
00778 
00779 /*              Diagonal, random eigenvalues */
00780 
00781                 zlatmr_(&n, &n, "D", &iseed[1], "S", &work[1], &c__6, &c_b39, 
00782                         &c_b2, "T", "N", &work[n + 1], &c__1, &c_b39, &work[(
00783                         n << 1) + 1], &c__1, &c_b39, "N", idumma, &c__0, &
00784                         c__0, &c_b49, &anorm, "NO", &a[a_offset], lda, idumma, 
00785                          &iinfo);
00786 
00787             } else if (itype == 8) {
00788 
00789 /*              Symmetric, random eigenvalues */
00790 
00791                 zlatmr_(&n, &n, "D", &iseed[1], "H", &work[1], &c__6, &c_b39, 
00792                         &c_b2, "T", "N", &work[n + 1], &c__1, &c_b39, &work[(
00793                         n << 1) + 1], &c__1, &c_b39, "N", idumma, &n, &n, &
00794                         c_b49, &anorm, "NO", &a[a_offset], lda, idumma, &
00795                         iinfo);
00796 
00797             } else if (itype == 9) {
00798 
00799 /*              General, random eigenvalues */
00800 
00801                 zlatmr_(&n, &n, "D", &iseed[1], "N", &work[1], &c__6, &c_b39, 
00802                         &c_b2, "T", "N", &work[n + 1], &c__1, &c_b39, &work[(
00803                         n << 1) + 1], &c__1, &c_b39, "N", idumma, &n, &n, &
00804                         c_b49, &anorm, "NO", &a[a_offset], lda, idumma, &
00805                         iinfo);
00806                 if (n >= 4) {
00807                     zlaset_("Full", &c__2, &n, &c_b1, &c_b1, &a[a_offset], 
00808                             lda);
00809                     i__3 = n - 3;
00810                     zlaset_("Full", &i__3, &c__1, &c_b1, &c_b1, &a[a_dim1 + 3]
00811 , lda);
00812                     i__3 = n - 3;
00813                     zlaset_("Full", &i__3, &c__2, &c_b1, &c_b1, &a[(n - 1) * 
00814                             a_dim1 + 3], lda);
00815                     zlaset_("Full", &c__1, &n, &c_b1, &c_b1, &a[n + a_dim1], 
00816                             lda);
00817                 }
00818 
00819             } else if (itype == 10) {
00820 
00821 /*              Triangular, random eigenvalues */
00822 
00823                 zlatmr_(&n, &n, "D", &iseed[1], "N", &work[1], &c__6, &c_b39, 
00824                         &c_b2, "T", "N", &work[n + 1], &c__1, &c_b39, &work[(
00825                         n << 1) + 1], &c__1, &c_b39, "N", idumma, &n, &c__0, &
00826                         c_b49, &anorm, "NO", &a[a_offset], lda, idumma, &
00827                         iinfo);
00828 
00829             } else {
00830 
00831                 iinfo = 1;
00832             }
00833 
00834             if (iinfo != 0) {
00835                 io___32.ciunit = *nounit;
00836                 s_wsfe(&io___32);
00837                 do_fio(&c__1, "Generator", (ftnlen)9);
00838                 do_fio(&c__1, (char *)&iinfo, (ftnlen)sizeof(integer));
00839                 do_fio(&c__1, (char *)&n, (ftnlen)sizeof(integer));
00840                 do_fio(&c__1, (char *)&jtype, (ftnlen)sizeof(integer));
00841                 do_fio(&c__4, (char *)&ioldsd[0], (ftnlen)sizeof(integer));
00842                 e_wsfe();
00843                 *info = abs(iinfo);
00844                 return 0;
00845             }
00846 
00847 L90:
00848 
00849 /*           Test for minimal and generous workspace */
00850 
00851             for (iwk = 1; iwk <= 3; ++iwk) {
00852                 if (iwk == 1) {
00853                     nnwork = n << 1;
00854                 } else if (iwk == 2) {
00855 /* Computing 2nd power */
00856                     i__3 = n;
00857                     nnwork = (n << 1) + i__3 * i__3;
00858                 } else {
00859 /* Computing 2nd power */
00860                     i__3 = n;
00861                     nnwork = n * 6 + (i__3 * i__3 << 1);
00862                 }
00863                 nnwork = max(nnwork,1);
00864 
00865 /*              Test for all balancing options */
00866 
00867                 for (ibal = 1; ibal <= 4; ++ibal) {
00868                     *(unsigned char *)balanc = *(unsigned char *)&bal[ibal - 
00869                             1];
00870 
00871 /*                 Perform tests */
00872 
00873                     zget23_(&c_false, &c__0, balanc, &jtype, thresh, ioldsd, 
00874                             nounit, &n, &a[a_offset], lda, &h__[h_offset], &w[
00875                             1], &w1[1], &vl[vl_offset], ldvl, &vr[vr_offset], 
00876                             ldvr, &lre[lre_offset], ldlre, &rcondv[1], &
00877                             rcndv1[1], &rcdvin[1], &rconde[1], &rcnde1[1], &
00878                             rcdein[1], &scale[1], &scale1[1], &result[1], &
00879                             work[1], &nnwork, &rwork[1], info);
00880 
00881 /*                 Check for RESULT(j) > THRESH */
00882 
00883                     ntest = 0;
00884                     nfail = 0;
00885                     for (j = 1; j <= 9; ++j) {
00886                         if (result[j] >= 0.) {
00887                             ++ntest;
00888                         }
00889                         if (result[j] >= *thresh) {
00890                             ++nfail;
00891                         }
00892 /* L100: */
00893                     }
00894 
00895                     if (nfail > 0) {
00896                         ++ntestf;
00897                     }
00898                     if (ntestf == 1) {
00899                         io___39.ciunit = *nounit;
00900                         s_wsfe(&io___39);
00901                         do_fio(&c__1, path, (ftnlen)3);
00902                         e_wsfe();
00903                         io___40.ciunit = *nounit;
00904                         s_wsfe(&io___40);
00905                         e_wsfe();
00906                         io___41.ciunit = *nounit;
00907                         s_wsfe(&io___41);
00908                         e_wsfe();
00909                         io___42.ciunit = *nounit;
00910                         s_wsfe(&io___42);
00911                         e_wsfe();
00912                         io___43.ciunit = *nounit;
00913                         s_wsfe(&io___43);
00914                         do_fio(&c__1, (char *)&(*thresh), (ftnlen)sizeof(
00915                                 doublereal));
00916                         e_wsfe();
00917                         ntestf = 2;
00918                     }
00919 
00920                     for (j = 1; j <= 9; ++j) {
00921                         if (result[j] >= *thresh) {
00922                             io___44.ciunit = *nounit;
00923                             s_wsfe(&io___44);
00924                             do_fio(&c__1, balanc, (ftnlen)1);
00925                             do_fio(&c__1, (char *)&n, (ftnlen)sizeof(integer))
00926                                     ;
00927                             do_fio(&c__1, (char *)&iwk, (ftnlen)sizeof(
00928                                     integer));
00929                             do_fio(&c__4, (char *)&ioldsd[0], (ftnlen)sizeof(
00930                                     integer));
00931                             do_fio(&c__1, (char *)&jtype, (ftnlen)sizeof(
00932                                     integer));
00933                             do_fio(&c__1, (char *)&j, (ftnlen)sizeof(integer))
00934                                     ;
00935                             do_fio(&c__1, (char *)&result[j], (ftnlen)sizeof(
00936                                     doublereal));
00937                             e_wsfe();
00938                         }
00939 /* L110: */
00940                     }
00941 
00942                     nerrs += nfail;
00943                     ntestt += ntest;
00944 
00945 /* L120: */
00946                 }
00947 /* L130: */
00948             }
00949 L140:
00950             ;
00951         }
00952 /* L150: */
00953     }
00954 
00955 L160:
00956 
00957 /*     Read in data from file to check accuracy of condition estimation. */
00958 /*     Assume input eigenvalues are sorted lexicographically (increasing */
00959 /*     by real part, then decreasing by imaginary part) */
00960 
00961     jtype = 0;
00962 L170:
00963     io___45.ciunit = *niunit;
00964     i__1 = s_rsle(&io___45);
00965     if (i__1 != 0) {
00966         goto L220;
00967     }
00968     i__1 = do_lio(&c__3, &c__1, (char *)&n, (ftnlen)sizeof(integer));
00969     if (i__1 != 0) {
00970         goto L220;
00971     }
00972     i__1 = do_lio(&c__3, &c__1, (char *)&isrt, (ftnlen)sizeof(integer));
00973     if (i__1 != 0) {
00974         goto L220;
00975     }
00976     i__1 = e_rsle();
00977     if (i__1 != 0) {
00978         goto L220;
00979     }
00980 
00981 /*     Read input data until N=0 */
00982 
00983     if (n == 0) {
00984         goto L220;
00985     }
00986     ++jtype;
00987     iseed[1] = jtype;
00988     i__1 = n;
00989     for (i__ = 1; i__ <= i__1; ++i__) {
00990         io___48.ciunit = *niunit;
00991         s_rsle(&io___48);
00992         i__2 = n;
00993         for (j = 1; j <= i__2; ++j) {
00994             do_lio(&c__7, &c__1, (char *)&a[i__ + j * a_dim1], (ftnlen)sizeof(
00995                     doublecomplex));
00996         }
00997         e_rsle();
00998 /* L180: */
00999     }
01000     i__1 = n;
01001     for (i__ = 1; i__ <= i__1; ++i__) {
01002         io___49.ciunit = *niunit;
01003         s_rsle(&io___49);
01004         do_lio(&c__5, &c__1, (char *)&wr, (ftnlen)sizeof(doublereal));
01005         do_lio(&c__5, &c__1, (char *)&wi, (ftnlen)sizeof(doublereal));
01006         do_lio(&c__5, &c__1, (char *)&rcdein[i__], (ftnlen)sizeof(doublereal))
01007                 ;
01008         do_lio(&c__5, &c__1, (char *)&rcdvin[i__], (ftnlen)sizeof(doublereal))
01009                 ;
01010         e_rsle();
01011         i__2 = i__;
01012         z__1.r = wr, z__1.i = wi;
01013         w1[i__2].r = z__1.r, w1[i__2].i = z__1.i;
01014 /* L190: */
01015     }
01016 /* Computing 2nd power */
01017     i__2 = n;
01018     i__1 = n * 6 + (i__2 * i__2 << 1);
01019     zget23_(&c_true, &isrt, "N", &c__22, thresh, &iseed[1], nounit, &n, &a[
01020             a_offset], lda, &h__[h_offset], &w[1], &w1[1], &vl[vl_offset], 
01021             ldvl, &vr[vr_offset], ldvr, &lre[lre_offset], ldlre, &rcondv[1], &
01022             rcndv1[1], &rcdvin[1], &rconde[1], &rcnde1[1], &rcdein[1], &scale[
01023             1], &scale1[1], &result[1], &work[1], &i__1, &rwork[1], info);
01024 
01025 /*     Check for RESULT(j) > THRESH */
01026 
01027     ntest = 0;
01028     nfail = 0;
01029     for (j = 1; j <= 11; ++j) {
01030         if (result[j] >= 0.) {
01031             ++ntest;
01032         }
01033         if (result[j] >= *thresh) {
01034             ++nfail;
01035         }
01036 /* L200: */
01037     }
01038 
01039     if (nfail > 0) {
01040         ++ntestf;
01041     }
01042     if (ntestf == 1) {
01043         io___52.ciunit = *nounit;
01044         s_wsfe(&io___52);
01045         do_fio(&c__1, path, (ftnlen)3);
01046         e_wsfe();
01047         io___53.ciunit = *nounit;
01048         s_wsfe(&io___53);
01049         e_wsfe();
01050         io___54.ciunit = *nounit;
01051         s_wsfe(&io___54);
01052         e_wsfe();
01053         io___55.ciunit = *nounit;
01054         s_wsfe(&io___55);
01055         e_wsfe();
01056         io___56.ciunit = *nounit;
01057         s_wsfe(&io___56);
01058         do_fio(&c__1, (char *)&(*thresh), (ftnlen)sizeof(doublereal));
01059         e_wsfe();
01060         ntestf = 2;
01061     }
01062 
01063     for (j = 1; j <= 11; ++j) {
01064         if (result[j] >= *thresh) {
01065             io___57.ciunit = *nounit;
01066             s_wsfe(&io___57);
01067             do_fio(&c__1, (char *)&n, (ftnlen)sizeof(integer));
01068             do_fio(&c__1, (char *)&jtype, (ftnlen)sizeof(integer));
01069             do_fio(&c__1, (char *)&j, (ftnlen)sizeof(integer));
01070             do_fio(&c__1, (char *)&result[j], (ftnlen)sizeof(doublereal));
01071             e_wsfe();
01072         }
01073 /* L210: */
01074     }
01075 
01076     nerrs += nfail;
01077     ntestt += ntest;
01078     goto L170;
01079 L220:
01080 
01081 /*     Summary */
01082 
01083     dlasum_(path, nounit, &nerrs, &ntestt);
01084 
01085 
01086 
01087     return 0;
01088 
01089 /*     End of ZDRVVX */
01090 
01091 } /* zdrvvx_ */


swiftnav
Author(s):
autogenerated on Sat Jun 8 2019 18:56:23