00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "f2c.h"
00014 #include "memory_alloc.h"
00015
00016
00017
00018 struct {
00019 integer infot, nunit;
00020 logical ok, lerr;
00021 } infoc_;
00022
00023 #define infoc_1 infoc_
00024
00025 struct {
00026 char srnamt[32];
00027 } srnamc_;
00028
00029 #define srnamc_1 srnamc_
00030
00031
00032
00033 static integer c__1 = 1;
00034 static integer c__2 = 2;
00035 static integer c__0 = 0;
00036 static integer c_n1 = -1;
00037 static real c_b20 = 0.f;
00038 static logical c_true = TRUE_;
00039 static integer c__6 = 6;
00040 static integer c__7 = 7;
00041
00042 int sdrvge_(logical *dotype, integer *nn, integer *nval,
00043 integer *nrhs, real *thresh, logical *tsterr, integer *nmax, real *a,
00044 real *afac, real *asav, real *b, real *bsav, real *x, real *xact,
00045 real *s, real *work, real *rwork, integer *iwork, integer *nout)
00046 {
00047
00048
00049 static integer iseedy[4] = { 1988,1989,1990,1991 };
00050 static char transs[1*3] = "N" "T" "C";
00051 static char facts[1*3] = "F" "N" "E";
00052 static char equeds[1*4] = "N" "R" "C" "B";
00053
00054
00055 static char fmt_9999[] = "(1x,a,\002, N =\002,i5,\002, type \002,i2,\002"
00056 ", test(\002,i2,\002) =\002,g12.5)";
00057 static char fmt_9997[] = "(1x,a,\002, FACT='\002,a1,\002', TRANS='\002,a"
00058 "1,\002', N=\002,i5,\002, EQUED='\002,a1,\002', type \002,i2,\002"
00059 ", test(\002,i1,\002)=\002,g12.5)";
00060 static char fmt_9998[] = "(1x,a,\002, FACT='\002,a1,\002', TRANS='\002,a"
00061 "1,\002', N=\002,i5,\002, type \002,i2,\002, test(\002,i1,\002)"
00062 "=\002,g12.5)";
00063
00064
00065 address a__1[2];
00066 integer i__1, i__2, i__3, i__4, i__5[2];
00067 real r__1;
00068 char ch__1[2];
00069
00070
00071 int s_copy(char *, char *, ftnlen, ftnlen);
00072 integer s_wsfe(cilist *), do_fio(integer *, char *, ftnlen), e_wsfe(void);
00073 int s_cat(char *, char **, integer *, integer *, ftnlen);
00074
00075
00076 extern int sebchvxx_(real *, char *);
00077 integer i__, k, n;
00078 real *errbnds_c__, *errbnds_n__;
00079 integer k1, nb, in, kl, ku, nt, n_err_bnds__;
00080 extern doublereal sla_rpvgrw__(integer *, integer *, real *, integer *,
00081 real *, integer *);
00082 integer lda;
00083 char fact[1];
00084 integer ioff, mode;
00085 real amax;
00086 char path[3];
00087 integer imat, info;
00088 real *berr;
00089 char dist[1];
00090 real rpvgrw_svxx__;
00091 char type__[1];
00092 integer nrun, ifact, nfail, iseed[4], nfact;
00093 extern logical lsame_(char *, char *);
00094 char equed[1];
00095 integer nbmin;
00096 real rcond, roldc;
00097 extern int sget01_(integer *, integer *, real *, integer
00098 *, real *, integer *, integer *, real *, real *);
00099 integer nimat;
00100 real roldi;
00101 extern doublereal sget06_(real *, real *);
00102 extern int sget02_(char *, integer *, integer *, integer
00103 *, real *, integer *, real *, integer *, real *, integer *, real *
00104 , real *);
00105 real anorm;
00106 integer itran;
00107 extern int sget04_(integer *, integer *, real *, integer
00108 *, real *, integer *, real *, real *);
00109 logical equil;
00110 real roldo;
00111 extern int sget07_(char *, integer *, integer *, real *,
00112 integer *, real *, integer *, real *, integer *, real *, integer *
00113 , real *, logical *, real *, real *);
00114 char trans[1];
00115 integer izero, nerrs;
00116 extern int sgesv_(integer *, integer *, real *, integer *
00117 , integer *, real *, integer *, integer *);
00118 integer lwork;
00119 logical zerot;
00120 char xtype[1];
00121 extern int slatb4_(char *, integer *, integer *, integer
00122 *, char *, integer *, integer *, real *, integer *, real *, char *
00123 ), aladhd_(integer *, char *),
00124 alaerh_(char *, char *, integer *, integer *, char *, integer *,
00125 integer *, integer *, integer *, integer *, integer *, integer *,
00126 integer *, integer *);
00127 logical prefac;
00128 real colcnd;
00129 extern doublereal slamch_(char *);
00130 real rcondc;
00131 extern doublereal slange_(char *, integer *, integer *, real *, integer *,
00132 real *);
00133 logical nofact;
00134 integer iequed;
00135 extern int slaqge_(integer *, integer *, real *, integer
00136 *, real *, real *, real *, real *, real *, char *);
00137 real rcondi;
00138 extern int alasvm_(char *, integer *, integer *, integer
00139 *, integer *);
00140 real cndnum, anormi, rcondo, ainvnm;
00141 extern int sgeequ_(integer *, integer *, real *, integer
00142 *, real *, real *, real *, real *, real *, integer *);
00143 logical trfcon;
00144 real anormo, rowcnd;
00145 extern int sgetrf_(integer *, integer *, real *, integer
00146 *, integer *, integer *), sgetri_(integer *, real *, integer *,
00147 integer *, real *, integer *, integer *), slacpy_(char *, integer
00148 *, integer *, real *, integer *, real *, integer *),
00149 slarhs_(char *, char *, char *, char *, integer *, integer *,
00150 integer *, integer *, integer *, real *, integer *, real *,
00151 integer *, real *, integer *, integer *, integer *);
00152 extern doublereal slantr_(char *, char *, char *, integer *, integer *,
00153 real *, integer *, real *);
00154 extern int slaset_(char *, integer *, integer *, real *,
00155 real *, real *, integer *), slatms_(integer *, integer *,
00156 char *, integer *, char *, real *, integer *, real *, real *,
00157 integer *, integer *, char *, real *, integer *, real *, integer *
00158 ), xlaenv_(integer *, integer *);
00159 real result[7];
00160 extern int sgesvx_(char *, char *, integer *, integer *,
00161 real *, integer *, real *, integer *, integer *, char *, real *,
00162 real *, real *, integer *, real *, integer *, real *, real *,
00163 real *, real *, integer *, integer *);
00164 real rpvgrw;
00165 extern int serrvx_(char *, integer *), sgesvxx_(
00166 char *, char *, integer *, integer *, real *, integer *, real *,
00167 integer *, integer *, char *, real *, real *, real *, integer *,
00168 real *, integer *, real *, real *, real *, integer *, real *,
00169 real *, integer *, real *, real *, integer *, integer *);
00170
00171
00172 static cilist io___55 = { 0, 0, 0, fmt_9999, 0 };
00173 static cilist io___61 = { 0, 0, 0, fmt_9997, 0 };
00174 static cilist io___62 = { 0, 0, 0, fmt_9998, 0 };
00175 static cilist io___63 = { 0, 0, 0, fmt_9997, 0 };
00176 static cilist io___64 = { 0, 0, 0, fmt_9998, 0 };
00177 static cilist io___65 = { 0, 0, 0, fmt_9997, 0 };
00178 static cilist io___66 = { 0, 0, 0, fmt_9998, 0 };
00179 static cilist io___67 = { 0, 0, 0, fmt_9997, 0 };
00180 static cilist io___68 = { 0, 0, 0, fmt_9998, 0 };
00181 static cilist io___74 = { 0, 0, 0, fmt_9997, 0 };
00182 static cilist io___75 = { 0, 0, 0, fmt_9998, 0 };
00183 static cilist io___76 = { 0, 0, 0, fmt_9997, 0 };
00184 static cilist io___77 = { 0, 0, 0, fmt_9998, 0 };
00185 static cilist io___78 = { 0, 0, 0, fmt_9997, 0 };
00186 static cilist io___79 = { 0, 0, 0, fmt_9998, 0 };
00187 static cilist io___80 = { 0, 0, 0, fmt_9997, 0 };
00188 static cilist io___81 = { 0, 0, 0, fmt_9998, 0 };
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285 --iwork;
00286 --rwork;
00287 --work;
00288 --s;
00289 --xact;
00290 --x;
00291 --bsav;
00292 --b;
00293 --asav;
00294 --afac;
00295 --a;
00296 --nval;
00297 --dotype;
00298
00299
00300
00301
00302
00303
00304
00305 s_copy(path, "Single precision", (ftnlen)1, (ftnlen)16);
00306 s_copy(path + 1, "GE", (ftnlen)2, (ftnlen)2);
00307 nrun = 0;
00308 nfail = 0;
00309 nerrs = 0;
00310 for (i__ = 1; i__ <= 4; ++i__) {
00311 iseed[i__ - 1] = iseedy[i__ - 1];
00312
00313 }
00314
00315
00316
00317 if (*tsterr) {
00318 serrvx_(path, nout);
00319 }
00320 infoc_1.infot = 0;
00321
00322
00323
00324 nb = 1;
00325 nbmin = 2;
00326 xlaenv_(&c__1, &nb);
00327 xlaenv_(&c__2, &nbmin);
00328
00329
00330
00331 i__1 = *nn;
00332 for (in = 1; in <= i__1; ++in) {
00333 n = nval[in];
00334 lda = max(n,1);
00335 *(unsigned char *)xtype = 'N';
00336 nimat = 11;
00337 if (n <= 0) {
00338 nimat = 1;
00339 }
00340
00341 i__2 = nimat;
00342 for (imat = 1; imat <= i__2; ++imat) {
00343
00344
00345
00346 if (! dotype[imat]) {
00347 goto L80;
00348 }
00349
00350
00351
00352 zerot = imat >= 5 && imat <= 7;
00353 if (zerot && n < imat - 4) {
00354 goto L80;
00355 }
00356
00357
00358
00359
00360 slatb4_(path, &imat, &n, &n, type__, &kl, &ku, &anorm, &mode, &
00361 cndnum, dist);
00362 rcondc = 1.f / cndnum;
00363
00364 s_copy(srnamc_1.srnamt, "SLATMS", (ftnlen)32, (ftnlen)6);
00365 slatms_(&n, &n, dist, iseed, type__, &rwork[1], &mode, &cndnum, &
00366 anorm, &kl, &ku, "No packing", &a[1], &lda, &work[1], &
00367 info);
00368
00369
00370
00371 if (info != 0) {
00372 alaerh_(path, "SLATMS", &info, &c__0, " ", &n, &n, &c_n1, &
00373 c_n1, &c_n1, &imat, &nfail, &nerrs, nout);
00374 goto L80;
00375 }
00376
00377
00378
00379
00380 if (zerot) {
00381 if (imat == 5) {
00382 izero = 1;
00383 } else if (imat == 6) {
00384 izero = n;
00385 } else {
00386 izero = n / 2 + 1;
00387 }
00388 ioff = (izero - 1) * lda;
00389 if (imat < 7) {
00390 i__3 = n;
00391 for (i__ = 1; i__ <= i__3; ++i__) {
00392 a[ioff + i__] = 0.f;
00393
00394 }
00395 } else {
00396 i__3 = n - izero + 1;
00397 slaset_("Full", &n, &i__3, &c_b20, &c_b20, &a[ioff + 1], &
00398 lda);
00399 }
00400 } else {
00401 izero = 0;
00402 }
00403
00404
00405
00406 slacpy_("Full", &n, &n, &a[1], &lda, &asav[1], &lda);
00407
00408 for (iequed = 1; iequed <= 4; ++iequed) {
00409 *(unsigned char *)equed = *(unsigned char *)&equeds[iequed -
00410 1];
00411 if (iequed == 1) {
00412 nfact = 3;
00413 } else {
00414 nfact = 1;
00415 }
00416
00417 i__3 = nfact;
00418 for (ifact = 1; ifact <= i__3; ++ifact) {
00419 *(unsigned char *)fact = *(unsigned char *)&facts[ifact -
00420 1];
00421 prefac = lsame_(fact, "F");
00422 nofact = lsame_(fact, "N");
00423 equil = lsame_(fact, "E");
00424
00425 if (zerot) {
00426 if (prefac) {
00427 goto L60;
00428 }
00429 rcondo = 0.f;
00430 rcondi = 0.f;
00431
00432 } else if (! nofact) {
00433
00434
00435
00436
00437
00438
00439 slacpy_("Full", &n, &n, &asav[1], &lda, &afac[1], &
00440 lda);
00441 if (equil || iequed > 1) {
00442
00443
00444
00445
00446 sgeequ_(&n, &n, &afac[1], &lda, &s[1], &s[n + 1],
00447 &rowcnd, &colcnd, &amax, &info);
00448 if (info == 0 && n > 0) {
00449 if (lsame_(equed, "R"))
00450 {
00451 rowcnd = 0.f;
00452 colcnd = 1.f;
00453 } else if (lsame_(equed, "C")) {
00454 rowcnd = 1.f;
00455 colcnd = 0.f;
00456 } else if (lsame_(equed, "B")) {
00457 rowcnd = 0.f;
00458 colcnd = 0.f;
00459 }
00460
00461
00462
00463 slaqge_(&n, &n, &afac[1], &lda, &s[1], &s[n +
00464 1], &rowcnd, &colcnd, &amax, equed);
00465 }
00466 }
00467
00468
00469
00470
00471 if (equil) {
00472 roldo = rcondo;
00473 roldi = rcondi;
00474 }
00475
00476
00477
00478 anormo = slange_("1", &n, &n, &afac[1], &lda, &rwork[
00479 1]);
00480 anormi = slange_("I", &n, &n, &afac[1], &lda, &rwork[
00481 1]);
00482
00483
00484
00485 sgetrf_(&n, &n, &afac[1], &lda, &iwork[1], &info);
00486
00487
00488
00489 slacpy_("Full", &n, &n, &afac[1], &lda, &a[1], &lda);
00490 lwork = *nmax * max(3,*nrhs);
00491 sgetri_(&n, &a[1], &lda, &iwork[1], &work[1], &lwork,
00492 &info);
00493
00494
00495
00496 ainvnm = slange_("1", &n, &n, &a[1], &lda, &rwork[1]);
00497 if (anormo <= 0.f || ainvnm <= 0.f) {
00498 rcondo = 1.f;
00499 } else {
00500 rcondo = 1.f / anormo / ainvnm;
00501 }
00502
00503
00504
00505 ainvnm = slange_("I", &n, &n, &a[1], &lda, &rwork[1]);
00506 if (anormi <= 0.f || ainvnm <= 0.f) {
00507 rcondi = 1.f;
00508 } else {
00509 rcondi = 1.f / anormi / ainvnm;
00510 }
00511 }
00512
00513 for (itran = 1; itran <= 3; ++itran) {
00514 for (i__ = 1; i__ <= 7; ++i__) {
00515 result[i__ - 1] = 0.f;
00516 }
00517
00518
00519
00520 *(unsigned char *)trans = *(unsigned char *)&transs[
00521 itran - 1];
00522 if (itran == 1) {
00523 rcondc = rcondo;
00524 } else {
00525 rcondc = rcondi;
00526 }
00527
00528
00529
00530 slacpy_("Full", &n, &n, &asav[1], &lda, &a[1], &lda);
00531
00532
00533
00534 s_copy(srnamc_1.srnamt, "SLARHS", (ftnlen)32, (ftnlen)
00535 6);
00536 slarhs_(path, xtype, "Full", trans, &n, &n, &kl, &ku,
00537 nrhs, &a[1], &lda, &xact[1], &lda, &b[1], &
00538 lda, iseed, &info);
00539 *(unsigned char *)xtype = 'C';
00540 slacpy_("Full", &n, nrhs, &b[1], &lda, &bsav[1], &lda);
00541
00542 if (nofact && itran == 1) {
00543
00544
00545
00546
00547
00548
00549 slacpy_("Full", &n, &n, &a[1], &lda, &afac[1], &
00550 lda);
00551 slacpy_("Full", &n, nrhs, &b[1], &lda, &x[1], &
00552 lda);
00553
00554 s_copy(srnamc_1.srnamt, "SGESV ", (ftnlen)32, (
00555 ftnlen)6);
00556 sgesv_(&n, nrhs, &afac[1], &lda, &iwork[1], &x[1],
00557 &lda, &info);
00558
00559
00560
00561 if (info != izero) {
00562 alaerh_(path, "SGESV ", &info, &izero, " ", &
00563 n, &n, &c_n1, &c_n1, nrhs, &imat, &
00564 nfail, &nerrs, nout);
00565 goto L50;
00566 }
00567
00568
00569
00570
00571 sget01_(&n, &n, &a[1], &lda, &afac[1], &lda, &
00572 iwork[1], &rwork[1], result);
00573 nt = 1;
00574 if (izero == 0) {
00575
00576
00577
00578 slacpy_("Full", &n, nrhs, &b[1], &lda, &work[
00579 1], &lda);
00580 sget02_("No transpose", &n, &n, nrhs, &a[1], &
00581 lda, &x[1], &lda, &work[1], &lda, &
00582 rwork[1], &result[1]);
00583
00584
00585
00586 sget04_(&n, nrhs, &x[1], &lda, &xact[1], &lda,
00587 &rcondc, &result[2]);
00588 nt = 3;
00589 }
00590
00591
00592
00593
00594 i__4 = nt;
00595 for (k = 1; k <= i__4; ++k) {
00596 if (result[k - 1] >= *thresh) {
00597 if (nfail == 0 && nerrs == 0) {
00598 aladhd_(nout, path);
00599 }
00600 io___55.ciunit = *nout;
00601 s_wsfe(&io___55);
00602 do_fio(&c__1, "SGESV ", (ftnlen)6);
00603 do_fio(&c__1, (char *)&n, (ftnlen)sizeof(
00604 integer));
00605 do_fio(&c__1, (char *)&imat, (ftnlen)
00606 sizeof(integer));
00607 do_fio(&c__1, (char *)&k, (ftnlen)sizeof(
00608 integer));
00609 do_fio(&c__1, (char *)&result[k - 1], (
00610 ftnlen)sizeof(real));
00611 e_wsfe();
00612 ++nfail;
00613 }
00614
00615 }
00616 nrun += nt;
00617 }
00618
00619
00620
00621 if (! prefac) {
00622 slaset_("Full", &n, &n, &c_b20, &c_b20, &afac[1],
00623 &lda);
00624 }
00625 slaset_("Full", &n, nrhs, &c_b20, &c_b20, &x[1], &lda);
00626 if (iequed > 1 && n > 0) {
00627
00628
00629
00630
00631 slaqge_(&n, &n, &a[1], &lda, &s[1], &s[n + 1], &
00632 rowcnd, &colcnd, &amax, equed);
00633 }
00634
00635
00636
00637
00638 s_copy(srnamc_1.srnamt, "SGESVX", (ftnlen)32, (ftnlen)
00639 6);
00640 sgesvx_(fact, trans, &n, nrhs, &a[1], &lda, &afac[1],
00641 &lda, &iwork[1], equed, &s[1], &s[n + 1], &b[
00642 1], &lda, &x[1], &lda, &rcond, &rwork[1], &
00643 rwork[*nrhs + 1], &work[1], &iwork[n + 1], &
00644 info);
00645
00646
00647
00648 if (info == n + 1) {
00649 goto L50;
00650 }
00651 if (info != izero) {
00652
00653 i__5[0] = 1, a__1[0] = fact;
00654 i__5[1] = 1, a__1[1] = trans;
00655 s_cat(ch__1, a__1, i__5, &c__2, (ftnlen)2);
00656 alaerh_(path, "SGESVX", &info, &izero, ch__1, &n,
00657 &n, &c_n1, &c_n1, nrhs, &imat, &nfail, &
00658 nerrs, nout);
00659 goto L50;
00660 }
00661
00662
00663
00664
00665 if (info != 0) {
00666 rpvgrw = slantr_("M", "U", "N", &info, &info, &
00667 afac[1], &lda, &work[1]);
00668 if (rpvgrw == 0.f) {
00669 rpvgrw = 1.f;
00670 } else {
00671 rpvgrw = slange_("M", &n, &info, &a[1], &lda,
00672 &work[1]) / rpvgrw;
00673 }
00674 } else {
00675 rpvgrw = slantr_("M", "U", "N", &n, &n, &afac[1],
00676 &lda, &work[1]);
00677 if (rpvgrw == 0.f) {
00678 rpvgrw = 1.f;
00679 } else {
00680 rpvgrw = slange_("M", &n, &n, &a[1], &lda, &
00681 work[1]) / rpvgrw;
00682 }
00683 }
00684 result[6] = (r__1 = rpvgrw - work[1], dabs(r__1)) /
00685 dmax(work[1],rpvgrw) / slamch_("E")
00686 ;
00687
00688 if (! prefac) {
00689
00690
00691
00692
00693 sget01_(&n, &n, &a[1], &lda, &afac[1], &lda, &
00694 iwork[1], &rwork[(*nrhs << 1) + 1],
00695 result);
00696 k1 = 1;
00697 } else {
00698 k1 = 2;
00699 }
00700
00701 if (info == 0) {
00702 trfcon = FALSE_;
00703
00704
00705
00706 slacpy_("Full", &n, nrhs, &bsav[1], &lda, &work[1]
00707 , &lda);
00708 sget02_(trans, &n, &n, nrhs, &asav[1], &lda, &x[1]
00709 , &lda, &work[1], &lda, &rwork[(*nrhs <<
00710 1) + 1], &result[1]);
00711
00712
00713
00714 if (nofact || prefac && lsame_(equed, "N")) {
00715 sget04_(&n, nrhs, &x[1], &lda, &xact[1], &lda,
00716 &rcondc, &result[2]);
00717 } else {
00718 if (itran == 1) {
00719 roldc = roldo;
00720 } else {
00721 roldc = roldi;
00722 }
00723 sget04_(&n, nrhs, &x[1], &lda, &xact[1], &lda,
00724 &roldc, &result[2]);
00725 }
00726
00727
00728
00729
00730 sget07_(trans, &n, nrhs, &asav[1], &lda, &b[1], &
00731 lda, &x[1], &lda, &xact[1], &lda, &rwork[
00732 1], &c_true, &rwork[*nrhs + 1], &result[3]
00733 );
00734 } else {
00735 trfcon = TRUE_;
00736 }
00737
00738
00739
00740
00741 result[5] = sget06_(&rcond, &rcondc);
00742
00743
00744
00745
00746 if (! trfcon) {
00747 for (k = k1; k <= 7; ++k) {
00748 if (result[k - 1] >= *thresh) {
00749 if (nfail == 0 && nerrs == 0) {
00750 aladhd_(nout, path);
00751 }
00752 if (prefac) {
00753 io___61.ciunit = *nout;
00754 s_wsfe(&io___61);
00755 do_fio(&c__1, "SGESVX", (ftnlen)6);
00756 do_fio(&c__1, fact, (ftnlen)1);
00757 do_fio(&c__1, trans, (ftnlen)1);
00758 do_fio(&c__1, (char *)&n, (ftnlen)
00759 sizeof(integer));
00760 do_fio(&c__1, equed, (ftnlen)1);
00761 do_fio(&c__1, (char *)&imat, (ftnlen)
00762 sizeof(integer));
00763 do_fio(&c__1, (char *)&k, (ftnlen)
00764 sizeof(integer));
00765 do_fio(&c__1, (char *)&result[k - 1],
00766 (ftnlen)sizeof(real));
00767 e_wsfe();
00768 } else {
00769 io___62.ciunit = *nout;
00770 s_wsfe(&io___62);
00771 do_fio(&c__1, "SGESVX", (ftnlen)6);
00772 do_fio(&c__1, fact, (ftnlen)1);
00773 do_fio(&c__1, trans, (ftnlen)1);
00774 do_fio(&c__1, (char *)&n, (ftnlen)
00775 sizeof(integer));
00776 do_fio(&c__1, (char *)&imat, (ftnlen)
00777 sizeof(integer));
00778 do_fio(&c__1, (char *)&k, (ftnlen)
00779 sizeof(integer));
00780 do_fio(&c__1, (char *)&result[k - 1],
00781 (ftnlen)sizeof(real));
00782 e_wsfe();
00783 }
00784 ++nfail;
00785 }
00786
00787 }
00788 nrun = nrun + 7 - k1;
00789 } else {
00790 if (result[0] >= *thresh && ! prefac) {
00791 if (nfail == 0 && nerrs == 0) {
00792 aladhd_(nout, path);
00793 }
00794 if (prefac) {
00795 io___63.ciunit = *nout;
00796 s_wsfe(&io___63);
00797 do_fio(&c__1, "SGESVX", (ftnlen)6);
00798 do_fio(&c__1, fact, (ftnlen)1);
00799 do_fio(&c__1, trans, (ftnlen)1);
00800 do_fio(&c__1, (char *)&n, (ftnlen)sizeof(
00801 integer));
00802 do_fio(&c__1, equed, (ftnlen)1);
00803 do_fio(&c__1, (char *)&imat, (ftnlen)
00804 sizeof(integer));
00805 do_fio(&c__1, (char *)&c__1, (ftnlen)
00806 sizeof(integer));
00807 do_fio(&c__1, (char *)&result[0], (ftnlen)
00808 sizeof(real));
00809 e_wsfe();
00810 } else {
00811 io___64.ciunit = *nout;
00812 s_wsfe(&io___64);
00813 do_fio(&c__1, "SGESVX", (ftnlen)6);
00814 do_fio(&c__1, fact, (ftnlen)1);
00815 do_fio(&c__1, trans, (ftnlen)1);
00816 do_fio(&c__1, (char *)&n, (ftnlen)sizeof(
00817 integer));
00818 do_fio(&c__1, (char *)&imat, (ftnlen)
00819 sizeof(integer));
00820 do_fio(&c__1, (char *)&c__1, (ftnlen)
00821 sizeof(integer));
00822 do_fio(&c__1, (char *)&result[0], (ftnlen)
00823 sizeof(real));
00824 e_wsfe();
00825 }
00826 ++nfail;
00827 ++nrun;
00828 }
00829 if (result[5] >= *thresh) {
00830 if (nfail == 0 && nerrs == 0) {
00831 aladhd_(nout, path);
00832 }
00833 if (prefac) {
00834 io___65.ciunit = *nout;
00835 s_wsfe(&io___65);
00836 do_fio(&c__1, "SGESVX", (ftnlen)6);
00837 do_fio(&c__1, fact, (ftnlen)1);
00838 do_fio(&c__1, trans, (ftnlen)1);
00839 do_fio(&c__1, (char *)&n, (ftnlen)sizeof(
00840 integer));
00841 do_fio(&c__1, equed, (ftnlen)1);
00842 do_fio(&c__1, (char *)&imat, (ftnlen)
00843 sizeof(integer));
00844 do_fio(&c__1, (char *)&c__6, (ftnlen)
00845 sizeof(integer));
00846 do_fio(&c__1, (char *)&result[5], (ftnlen)
00847 sizeof(real));
00848 e_wsfe();
00849 } else {
00850 io___66.ciunit = *nout;
00851 s_wsfe(&io___66);
00852 do_fio(&c__1, "SGESVX", (ftnlen)6);
00853 do_fio(&c__1, fact, (ftnlen)1);
00854 do_fio(&c__1, trans, (ftnlen)1);
00855 do_fio(&c__1, (char *)&n, (ftnlen)sizeof(
00856 integer));
00857 do_fio(&c__1, (char *)&imat, (ftnlen)
00858 sizeof(integer));
00859 do_fio(&c__1, (char *)&c__6, (ftnlen)
00860 sizeof(integer));
00861 do_fio(&c__1, (char *)&result[5], (ftnlen)
00862 sizeof(real));
00863 e_wsfe();
00864 }
00865 ++nfail;
00866 ++nrun;
00867 }
00868 if (result[6] >= *thresh) {
00869 if (nfail == 0 && nerrs == 0) {
00870 aladhd_(nout, path);
00871 }
00872 if (prefac) {
00873 io___67.ciunit = *nout;
00874 s_wsfe(&io___67);
00875 do_fio(&c__1, "SGESVX", (ftnlen)6);
00876 do_fio(&c__1, fact, (ftnlen)1);
00877 do_fio(&c__1, trans, (ftnlen)1);
00878 do_fio(&c__1, (char *)&n, (ftnlen)sizeof(
00879 integer));
00880 do_fio(&c__1, equed, (ftnlen)1);
00881 do_fio(&c__1, (char *)&imat, (ftnlen)
00882 sizeof(integer));
00883 do_fio(&c__1, (char *)&c__7, (ftnlen)
00884 sizeof(integer));
00885 do_fio(&c__1, (char *)&result[6], (ftnlen)
00886 sizeof(real));
00887 e_wsfe();
00888 } else {
00889 io___68.ciunit = *nout;
00890 s_wsfe(&io___68);
00891 do_fio(&c__1, "SGESVX", (ftnlen)6);
00892 do_fio(&c__1, fact, (ftnlen)1);
00893 do_fio(&c__1, trans, (ftnlen)1);
00894 do_fio(&c__1, (char *)&n, (ftnlen)sizeof(
00895 integer));
00896 do_fio(&c__1, (char *)&imat, (ftnlen)
00897 sizeof(integer));
00898 do_fio(&c__1, (char *)&c__7, (ftnlen)
00899 sizeof(integer));
00900 do_fio(&c__1, (char *)&result[6], (ftnlen)
00901 sizeof(real));
00902 e_wsfe();
00903 }
00904 ++nfail;
00905 ++nrun;
00906 }
00907
00908 }
00909
00910
00911
00912
00913
00914 slacpy_("Full", &n, &n, &asav[1], &lda, &a[1], &lda);
00915 slacpy_("Full", &n, nrhs, &bsav[1], &lda, &b[1], &lda);
00916 if (! prefac) {
00917 slaset_("Full", &n, &n, &c_b20, &c_b20, &afac[1],
00918 &lda);
00919 }
00920 slaset_("Full", &n, nrhs, &c_b20, &c_b20, &x[1], &lda);
00921 if (iequed > 1 && n > 0) {
00922
00923
00924
00925
00926 slaqge_(&n, &n, &a[1], &lda, &s[1], &s[n + 1], &
00927 rowcnd, &colcnd, &amax, equed);
00928 }
00929
00930
00931
00932
00933 s_copy(srnamc_1.srnamt, "SGESVXX", (ftnlen)32, (
00934 ftnlen)7);
00935 n_err_bnds__ = 3;
00936
00937 salloc3();
00938
00939 sgesvxx_(fact, trans, &n, nrhs, &a[1], &lda, &afac[1],
00940 &lda, &iwork[1], equed, &s[1], &s[n + 1], &b[
00941 1], &lda, &x[1], &lda, &rcond, &rpvgrw_svxx__,
00942 berr, &n_err_bnds__, errbnds_n__,
00943 errbnds_c__, &c__0, &c_b20, &work[1], &iwork[
00944 n + 1], &info);
00945
00946 free3();
00947
00948
00949
00950 if (info == n + 1) {
00951 goto L50;
00952 }
00953 if (info != izero) {
00954
00955 i__5[0] = 1, a__1[0] = fact;
00956 i__5[1] = 1, a__1[1] = trans;
00957 s_cat(ch__1, a__1, i__5, &c__2, (ftnlen)2);
00958 alaerh_(path, "SGESVXX", &info, &izero, ch__1, &n,
00959 &n, &c_n1, &c_n1, nrhs, &imat, &nfail, &
00960 nerrs, nout);
00961 goto L50;
00962 }
00963
00964
00965
00966
00967 if (info > 0 && info < n + 1) {
00968 rpvgrw = sla_rpvgrw__(&n, &info, &a[1], &lda, &
00969 afac[1], &lda);
00970 } else {
00971 rpvgrw = sla_rpvgrw__(&n, &n, &a[1], &lda, &afac[
00972 1], &lda);
00973 }
00974 result[6] = (r__1 = rpvgrw - rpvgrw_svxx__, dabs(r__1)
00975 ) / dmax(rpvgrw_svxx__,rpvgrw) / slamch_(
00976 "E");
00977
00978 if (! prefac) {
00979
00980
00981
00982
00983 sget01_(&n, &n, &a[1], &lda, &afac[1], &lda, &
00984 iwork[1], &rwork[(*nrhs << 1) + 1],
00985 result);
00986 k1 = 1;
00987 } else {
00988 k1 = 2;
00989 }
00990
00991 if (info == 0) {
00992 trfcon = FALSE_;
00993
00994
00995
00996 slacpy_("Full", &n, nrhs, &bsav[1], &lda, &work[1]
00997 , &lda);
00998 sget02_(trans, &n, &n, nrhs, &asav[1], &lda, &x[1]
00999 , &lda, &work[1], &lda, &rwork[(*nrhs <<
01000 1) + 1], &result[1]);
01001
01002
01003
01004 if (nofact || prefac && lsame_(equed, "N")) {
01005 sget04_(&n, nrhs, &x[1], &lda, &xact[1], &lda,
01006 &rcondc, &result[2]);
01007 } else {
01008 if (itran == 1) {
01009 roldc = roldo;
01010 } else {
01011 roldc = roldi;
01012 }
01013 sget04_(&n, nrhs, &x[1], &lda, &xact[1], &lda,
01014 &roldc, &result[2]);
01015 }
01016 } else {
01017 trfcon = TRUE_;
01018 }
01019
01020
01021
01022
01023 result[5] = sget06_(&rcond, &rcondc);
01024
01025
01026
01027
01028 if (! trfcon) {
01029 for (k = k1; k <= 7; ++k) {
01030 if (result[k - 1] >= *thresh) {
01031 if (nfail == 0 && nerrs == 0) {
01032 aladhd_(nout, path);
01033 }
01034 if (prefac) {
01035 io___74.ciunit = *nout;
01036 s_wsfe(&io___74);
01037 do_fio(&c__1, "SGESVXX", (ftnlen)7);
01038 do_fio(&c__1, fact, (ftnlen)1);
01039 do_fio(&c__1, trans, (ftnlen)1);
01040 do_fio(&c__1, (char *)&n, (ftnlen)
01041 sizeof(integer));
01042 do_fio(&c__1, equed, (ftnlen)1);
01043 do_fio(&c__1, (char *)&imat, (ftnlen)
01044 sizeof(integer));
01045 do_fio(&c__1, (char *)&k, (ftnlen)
01046 sizeof(integer));
01047 do_fio(&c__1, (char *)&result[k - 1],
01048 (ftnlen)sizeof(real));
01049 e_wsfe();
01050 } else {
01051 io___75.ciunit = *nout;
01052 s_wsfe(&io___75);
01053 do_fio(&c__1, "SGESVXX", (ftnlen)7);
01054 do_fio(&c__1, fact, (ftnlen)1);
01055 do_fio(&c__1, trans, (ftnlen)1);
01056 do_fio(&c__1, (char *)&n, (ftnlen)
01057 sizeof(integer));
01058 do_fio(&c__1, (char *)&imat, (ftnlen)
01059 sizeof(integer));
01060 do_fio(&c__1, (char *)&k, (ftnlen)
01061 sizeof(integer));
01062 do_fio(&c__1, (char *)&result[k - 1],
01063 (ftnlen)sizeof(real));
01064 e_wsfe();
01065 }
01066 ++nfail;
01067 }
01068
01069 }
01070 nrun = nrun + 7 - k1;
01071 } else {
01072 if (result[0] >= *thresh && ! prefac) {
01073 if (nfail == 0 && nerrs == 0) {
01074 aladhd_(nout, path);
01075 }
01076 if (prefac) {
01077 io___76.ciunit = *nout;
01078 s_wsfe(&io___76);
01079 do_fio(&c__1, "SGESVXX", (ftnlen)7);
01080 do_fio(&c__1, fact, (ftnlen)1);
01081 do_fio(&c__1, trans, (ftnlen)1);
01082 do_fio(&c__1, (char *)&n, (ftnlen)sizeof(
01083 integer));
01084 do_fio(&c__1, equed, (ftnlen)1);
01085 do_fio(&c__1, (char *)&imat, (ftnlen)
01086 sizeof(integer));
01087 do_fio(&c__1, (char *)&c__1, (ftnlen)
01088 sizeof(integer));
01089 do_fio(&c__1, (char *)&result[0], (ftnlen)
01090 sizeof(real));
01091 e_wsfe();
01092 } else {
01093 io___77.ciunit = *nout;
01094 s_wsfe(&io___77);
01095 do_fio(&c__1, "SGESVXX", (ftnlen)7);
01096 do_fio(&c__1, fact, (ftnlen)1);
01097 do_fio(&c__1, trans, (ftnlen)1);
01098 do_fio(&c__1, (char *)&n, (ftnlen)sizeof(
01099 integer));
01100 do_fio(&c__1, (char *)&imat, (ftnlen)
01101 sizeof(integer));
01102 do_fio(&c__1, (char *)&c__1, (ftnlen)
01103 sizeof(integer));
01104 do_fio(&c__1, (char *)&result[0], (ftnlen)
01105 sizeof(real));
01106 e_wsfe();
01107 }
01108 ++nfail;
01109 ++nrun;
01110 }
01111 if (result[5] >= *thresh) {
01112 if (nfail == 0 && nerrs == 0) {
01113 aladhd_(nout, path);
01114 }
01115 if (prefac) {
01116 io___78.ciunit = *nout;
01117 s_wsfe(&io___78);
01118 do_fio(&c__1, "SGESVXX", (ftnlen)7);
01119 do_fio(&c__1, fact, (ftnlen)1);
01120 do_fio(&c__1, trans, (ftnlen)1);
01121 do_fio(&c__1, (char *)&n, (ftnlen)sizeof(
01122 integer));
01123 do_fio(&c__1, equed, (ftnlen)1);
01124 do_fio(&c__1, (char *)&imat, (ftnlen)
01125 sizeof(integer));
01126 do_fio(&c__1, (char *)&c__6, (ftnlen)
01127 sizeof(integer));
01128 do_fio(&c__1, (char *)&result[5], (ftnlen)
01129 sizeof(real));
01130 e_wsfe();
01131 } else {
01132 io___79.ciunit = *nout;
01133 s_wsfe(&io___79);
01134 do_fio(&c__1, "SGESVXX", (ftnlen)7);
01135 do_fio(&c__1, fact, (ftnlen)1);
01136 do_fio(&c__1, trans, (ftnlen)1);
01137 do_fio(&c__1, (char *)&n, (ftnlen)sizeof(
01138 integer));
01139 do_fio(&c__1, (char *)&imat, (ftnlen)
01140 sizeof(integer));
01141 do_fio(&c__1, (char *)&c__6, (ftnlen)
01142 sizeof(integer));
01143 do_fio(&c__1, (char *)&result[5], (ftnlen)
01144 sizeof(real));
01145 e_wsfe();
01146 }
01147 ++nfail;
01148 ++nrun;
01149 }
01150 if (result[6] >= *thresh) {
01151 if (nfail == 0 && nerrs == 0) {
01152 aladhd_(nout, path);
01153 }
01154 if (prefac) {
01155 io___80.ciunit = *nout;
01156 s_wsfe(&io___80);
01157 do_fio(&c__1, "SGESVXX", (ftnlen)7);
01158 do_fio(&c__1, fact, (ftnlen)1);
01159 do_fio(&c__1, trans, (ftnlen)1);
01160 do_fio(&c__1, (char *)&n, (ftnlen)sizeof(
01161 integer));
01162 do_fio(&c__1, equed, (ftnlen)1);
01163 do_fio(&c__1, (char *)&imat, (ftnlen)
01164 sizeof(integer));
01165 do_fio(&c__1, (char *)&c__7, (ftnlen)
01166 sizeof(integer));
01167 do_fio(&c__1, (char *)&result[6], (ftnlen)
01168 sizeof(real));
01169 e_wsfe();
01170 } else {
01171 io___81.ciunit = *nout;
01172 s_wsfe(&io___81);
01173 do_fio(&c__1, "SGESVXX", (ftnlen)7);
01174 do_fio(&c__1, fact, (ftnlen)1);
01175 do_fio(&c__1, trans, (ftnlen)1);
01176 do_fio(&c__1, (char *)&n, (ftnlen)sizeof(
01177 integer));
01178 do_fio(&c__1, (char *)&imat, (ftnlen)
01179 sizeof(integer));
01180 do_fio(&c__1, (char *)&c__7, (ftnlen)
01181 sizeof(integer));
01182 do_fio(&c__1, (char *)&result[6], (ftnlen)
01183 sizeof(real));
01184 e_wsfe();
01185 }
01186 ++nfail;
01187 ++nrun;
01188 }
01189
01190 }
01191
01192 L50:
01193 ;
01194 }
01195 L60:
01196 ;
01197 }
01198
01199 }
01200 L80:
01201 ;
01202 }
01203
01204 }
01205
01206
01207
01208 alasvm_(path, nout, &nfail, &nrun, &nerrs);
01209
01210
01211 sebchvxx_(thresh, path);
01212 return 0;
01213
01214
01215
01216 }