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


swiftnav
Author(s):
autogenerated on Sat Jun 8 2019 18:55:40