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