00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "f2c.h"
00014 #include "blaswrap.h"
00015
00016
00017
00018 static integer c__8 = 8;
00019 static integer c__1 = 1;
00020 static integer c__0 = 0;
00021
00022 int zcklse_(integer *nn, integer *mval, integer *pval,
00023 integer *nval, integer *nmats, integer *iseed, doublereal *thresh,
00024 integer *nmax, doublecomplex *a, doublecomplex *af, doublecomplex *b,
00025 doublecomplex *bf, doublecomplex *x, doublecomplex *work, doublereal *
00026 rwork, integer *nin, integer *nout, integer *info)
00027 {
00028
00029 static char fmt_9997[] = "(\002 *** Invalid input for LSE: M = \002,"
00030 "i6,\002, P = \002,i6,\002, N = \002,i6,\002;\002,/\002 must "
00031 "satisfy P <= N <= P+M \002,\002(this set of values will be skip"
00032 "ped)\002)";
00033 static char fmt_9999[] = "(\002 ZLATMS in ZCKLSE INFO = \002,i5)";
00034 static char fmt_9998[] = "(\002 M=\002,i4,\002 P=\002,i4,\002, N=\002,"
00035 "i4,\002, type \002,i2,\002, test \002,i2,\002, ratio=\002,g13.6)";
00036
00037
00038 integer i__1, i__2, i__3, i__4, i__5, i__6, i__7;
00039
00040
00041 int s_copy(char *, char *, ftnlen, ftnlen);
00042 integer s_wsle(cilist *), e_wsle(void), s_wsfe(cilist *), do_fio(integer *
00043 , char *, ftnlen), e_wsfe(void);
00044
00045
00046 integer i__, m, n, p, ik, nt, lda, ldb, kla, klb, kua, kub, imat;
00047 char path[3], type__[1];
00048 integer nrun, modea, modeb, nfail;
00049 char dista[1], distb[1];
00050 integer iinfo;
00051 doublereal anorm, bnorm;
00052 integer lwork;
00053 extern int dlatb9_(char *, integer *, integer *, integer
00054 *, integer *, char *, integer *, integer *, integer *, integer *,
00055 doublereal *, doublereal *, integer *, integer *, doublereal *,
00056 doublereal *, char *, char *),
00057 alahdg_(integer *, char *);
00058 doublereal cndnma, cndnmb;
00059 extern int alareq_(char *, integer *, logical *, integer
00060 *, integer *, integer *), alasum_(char *, integer *,
00061 integer *, integer *, integer *), zlarhs_(char *, char *,
00062 char *, char *, integer *, integer *, integer *, integer *,
00063 integer *, doublecomplex *, integer *, doublecomplex *, integer *,
00064 doublecomplex *, integer *, integer *, integer *);
00065 logical dotype[8];
00066 extern int zlatms_(integer *, integer *, char *, integer
00067 *, char *, doublereal *, integer *, doublereal *, doublereal *,
00068 integer *, integer *, char *, doublecomplex *, integer *,
00069 doublecomplex *, integer *);
00070 logical firstt;
00071 doublereal result[7];
00072 extern int zlsets_(integer *, integer *, integer *,
00073 doublecomplex *, doublecomplex *, integer *, doublecomplex *,
00074 doublecomplex *, integer *, doublecomplex *, doublecomplex *,
00075 doublecomplex *, doublecomplex *, doublecomplex *, doublecomplex *
00076 , integer *, doublereal *, doublereal *);
00077
00078
00079 static cilist io___13 = { 0, 0, 0, 0, 0 };
00080 static cilist io___14 = { 0, 0, 0, fmt_9997, 0 };
00081 static cilist io___30 = { 0, 0, 0, fmt_9999, 0 };
00082 static cilist io___31 = { 0, 0, 0, fmt_9999, 0 };
00083 static cilist io___35 = { 0, 0, 0, fmt_9998, 0 };
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183 --rwork;
00184 --work;
00185 --x;
00186 --bf;
00187 --b;
00188 --af;
00189 --a;
00190 --iseed;
00191 --nval;
00192 --pval;
00193 --mval;
00194
00195
00196 s_copy(path, "LSE", (ftnlen)3, (ftnlen)3);
00197 *info = 0;
00198 nrun = 0;
00199 nfail = 0;
00200 firstt = TRUE_;
00201 alareq_(path, nmats, dotype, &c__8, nin, nout);
00202 lda = *nmax;
00203 ldb = *nmax;
00204 lwork = *nmax * *nmax;
00205
00206
00207
00208 i__1 = *nn;
00209 for (ik = 1; ik <= i__1; ++ik) {
00210 m = mval[ik];
00211 p = pval[ik];
00212 n = nval[ik];
00213 if (p > n || n > m + p) {
00214 if (firstt) {
00215 io___13.ciunit = *nout;
00216 s_wsle(&io___13);
00217 e_wsle();
00218 firstt = FALSE_;
00219 }
00220 io___14.ciunit = *nout;
00221 s_wsfe(&io___14);
00222 do_fio(&c__1, (char *)&m, (ftnlen)sizeof(integer));
00223 do_fio(&c__1, (char *)&p, (ftnlen)sizeof(integer));
00224 do_fio(&c__1, (char *)&n, (ftnlen)sizeof(integer));
00225 e_wsfe();
00226 }
00227
00228 }
00229 firstt = TRUE_;
00230
00231
00232
00233 i__1 = *nn;
00234 for (ik = 1; ik <= i__1; ++ik) {
00235 m = mval[ik];
00236 p = pval[ik];
00237 n = nval[ik];
00238 if (p > n || n > m + p) {
00239 goto L40;
00240 }
00241
00242 for (imat = 1; imat <= 8; ++imat) {
00243
00244
00245
00246 if (! dotype[imat - 1]) {
00247 goto L30;
00248 }
00249
00250
00251
00252
00253 dlatb9_(path, &imat, &m, &p, &n, type__, &kla, &kua, &klb, &kub, &
00254 anorm, &bnorm, &modea, &modeb, &cndnma, &cndnmb, dista,
00255 distb);
00256
00257 zlatms_(&m, &n, dista, &iseed[1], type__, &rwork[1], &modea, &
00258 cndnma, &anorm, &kla, &kua, "No packing", &a[1], &lda, &
00259 work[1], &iinfo);
00260 if (iinfo != 0) {
00261 io___30.ciunit = *nout;
00262 s_wsfe(&io___30);
00263 do_fio(&c__1, (char *)&iinfo, (ftnlen)sizeof(integer));
00264 e_wsfe();
00265 *info = abs(iinfo);
00266 goto L30;
00267 }
00268
00269 zlatms_(&p, &n, distb, &iseed[1], type__, &rwork[1], &modeb, &
00270 cndnmb, &bnorm, &klb, &kub, "No packing", &b[1], &ldb, &
00271 work[1], &iinfo);
00272 if (iinfo != 0) {
00273 io___31.ciunit = *nout;
00274 s_wsfe(&io___31);
00275 do_fio(&c__1, (char *)&iinfo, (ftnlen)sizeof(integer));
00276 e_wsfe();
00277 *info = abs(iinfo);
00278 goto L30;
00279 }
00280
00281
00282
00283
00284 i__3 = m - 1;
00285 i__2 = max(i__3,0);
00286
00287 i__5 = n - 1;
00288 i__4 = max(i__5,0);
00289 i__6 = max(n,1);
00290 i__7 = max(m,1);
00291 zlarhs_("ZGE", "New solution", "Upper", "N", &m, &n, &i__2, &i__4,
00292 &c__1, &a[1], &lda, &x[(*nmax << 2) + 1], &i__6, &x[1], &
00293 i__7, &iseed[1], &iinfo);
00294
00295
00296 i__3 = p - 1;
00297 i__2 = max(i__3,0);
00298
00299 i__5 = n - 1;
00300 i__4 = max(i__5,0);
00301 i__6 = max(n,1);
00302 i__7 = max(p,1);
00303 zlarhs_("ZGE", "Computed", "Upper", "N", &p, &n, &i__2, &i__4, &
00304 c__1, &b[1], &ldb, &x[(*nmax << 2) + 1], &i__6, &x[(*nmax
00305 << 1) + 1], &i__7, &iseed[1], &iinfo);
00306
00307 nt = 2;
00308
00309 zlsets_(&m, &p, &n, &a[1], &af[1], &lda, &b[1], &bf[1], &ldb, &x[
00310 1], &x[*nmax + 1], &x[(*nmax << 1) + 1], &x[*nmax * 3 + 1]
00311 , &x[(*nmax << 2) + 1], &work[1], &lwork, &rwork[1],
00312 result);
00313
00314
00315
00316
00317 i__2 = nt;
00318 for (i__ = 1; i__ <= i__2; ++i__) {
00319 if (result[i__ - 1] >= *thresh) {
00320 if (nfail == 0 && firstt) {
00321 firstt = FALSE_;
00322 alahdg_(nout, path);
00323 }
00324 io___35.ciunit = *nout;
00325 s_wsfe(&io___35);
00326 do_fio(&c__1, (char *)&m, (ftnlen)sizeof(integer));
00327 do_fio(&c__1, (char *)&p, (ftnlen)sizeof(integer));
00328 do_fio(&c__1, (char *)&n, (ftnlen)sizeof(integer));
00329 do_fio(&c__1, (char *)&imat, (ftnlen)sizeof(integer));
00330 do_fio(&c__1, (char *)&i__, (ftnlen)sizeof(integer));
00331 do_fio(&c__1, (char *)&result[i__ - 1], (ftnlen)sizeof(
00332 doublereal));
00333 e_wsfe();
00334 ++nfail;
00335 }
00336
00337 }
00338 nrun += nt;
00339
00340 L30:
00341 ;
00342 }
00343 L40:
00344 ;
00345 }
00346
00347
00348
00349 alasum_(path, nout, &nfail, &nrun, &c__0);
00350
00351 return 0;
00352
00353
00354
00355 }