src/FFT/fftpack.cpp

Go to the documentation of this file.
00001 /* fftpack.F -- translated by f2c (version 19970805).
00002    You must link the resulting object file with the libraries:
00003         -lf2c -lm   (in that order)
00004 */
00005 
00006 
00007 /*     Visit http://people.web.psi.ch/adelmann/ for more details */
00008 
00009 /*========================================================================*/
00010 /* ======================================================================= */
00011 /* ============================fftpack.F================================== */
00012 /* =============contains routines rffti, rfftf, rfftf,==================== */
00013 /* ==========cffti, cfftf, cfftb, sinti, and sint (from Netlib)=========== */
00014 /* ======================================================================= */
00015 /* ---------------------------DOUBLE PRECISION---------------------------- */
00016 /* Subroutine */ int rffti_(integer *n, doublereal *wsave)
00017 {
00018     extern /* Subroutine */ int rffti1_(integer *, doublereal *, doublereal *)
00019             ;
00020 
00021 /* ----------------------------TJW */
00022 /* ----------------------------TJW */
00023     /* Parameter adjustments */
00024     --wsave;
00025 
00026     /* Function Body */
00027     if (*n == 1) {
00028         return 0;
00029     }
00030     rffti1_(n, &wsave[*n + 1], &wsave[(*n << 1) + 1]);
00031     return 0;
00032 } /* rffti_ */
00033 
00034 /* Subroutine */ int rffti1_(integer *n, doublereal *wa, integer *ifac)
00035 {
00036     /* Initialized data */
00037 
00038     static integer ntryh[4] = { 4,2,3,5 };
00039 
00040     /* System generated locals */
00041     integer i__1, i__2, i__3;
00042 
00043     /* Builtin functions */
00044     double cos(doublereal), sin(doublereal);
00045 
00046     /* Local variables */
00047     static doublereal argh;
00048     static integer ntry, i__, j;
00049     static doublereal argld;
00050     static integer k1, l1, l2, ib;
00051     static doublereal fi;
00052     static integer ld, ii, nf, ip, nl, is, nq, nr;
00053     static doublereal arg;
00054     static integer ido, ipm;
00055     static doublereal tpi;
00056     static integer nfm1;
00057 
00058 /* ----------------------------TJW */
00059 /* ----------------------------TJW */
00060     /* Parameter adjustments */
00061     --ifac;
00062     --wa;
00063 
00064     /* Function Body */
00065     nl = *n;
00066     nf = 0;
00067     j = 0;
00068 L101:
00069     ++j;
00070     if (j - 4 <= 0) {
00071         goto L102;
00072     } else {
00073         goto L103;
00074     }
00075 L102:
00076     ntry = ntryh[j - 1];
00077     goto L104;
00078 L103:
00079     ntry += 2;
00080 L104:
00081     nq = nl / ntry;
00082     nr = nl - ntry * nq;
00083     if (nr != 0) {
00084         goto L101;
00085     } else {
00086         goto L105;
00087     }
00088 L105:
00089     ++nf;
00090     ifac[nf + 2] = ntry;
00091     nl = nq;
00092     if (ntry != 2) {
00093         goto L107;
00094     }
00095     if (nf == 1) {
00096         goto L107;
00097     }
00098     i__1 = nf;
00099     for (i__ = 2; i__ <= i__1; ++i__) {
00100         ib = nf - i__ + 2;
00101         ifac[ib + 2] = ifac[ib + 1];
00102 /* L106: */
00103     }
00104     ifac[3] = 2;
00105 L107:
00106     if (nl != 1) {
00107         goto L104;
00108     }
00109     ifac[1] = *n;
00110     ifac[2] = nf;
00111     tpi = (float)6.28318530717959;
00112     argh = tpi / (real) (*n);
00113     is = 0;
00114     nfm1 = nf - 1;
00115     l1 = 1;
00116     if (nfm1 == 0) {
00117         return 0;
00118     }
00119     i__1 = nfm1;
00120     for (k1 = 1; k1 <= i__1; ++k1) {
00121         ip = ifac[k1 + 2];
00122         ld = 0;
00123         l2 = l1 * ip;
00124         ido = *n / l2;
00125         ipm = ip - 1;
00126         i__2 = ipm;
00127         for (j = 1; j <= i__2; ++j) {
00128             ld += l1;
00129             i__ = is;
00130             argld = (real) ld * argh;
00131             fi = (float)0.;
00132             i__3 = ido;
00133             for (ii = 3; ii <= i__3; ii += 2) {
00134                 i__ += 2;
00135                 fi += (float)1.;
00136                 arg = fi * argld;
00137                 wa[i__ - 1] = cos(arg);
00138                 wa[i__] = sin(arg);
00139 /* L108: */
00140             }
00141             is += ido;
00142 /* L109: */
00143         }
00144         l1 = l2;
00145 /* L110: */
00146     }
00147     return 0;
00148 } /* rffti1_ */
00149 
00150 /* Subroutine */ int rfftf_(integer *n, doublereal *r__, doublereal *wsave)
00151 {
00152     extern /* Subroutine */ int rfftf1_(integer *, doublereal *, doublereal *,
00153              doublereal *, doublereal *);
00154 
00155 /* ----------------------------TJW */
00156 /* ----------------------------TJW */
00157     /* Parameter adjustments */
00158     --wsave;
00159     --r__;
00160 
00161     /* Function Body */
00162     if (*n == 1) {
00163         return 0;
00164     }
00165     rfftf1_(n, &r__[1], &wsave[1], &wsave[*n + 1], &wsave[(*n << 1) + 1]);
00166     return 0;
00167 } /* rfftf_ */
00168 
00169 /* Subroutine */ int rfftf1_(integer *n, doublereal *c__, doublereal *ch, 
00170         doublereal *wa, integer *ifac)
00171 {
00172     /* System generated locals */
00173     integer i__1;
00174 
00175     /* Local variables */
00176     extern /* Subroutine */ int radf2_(integer *, integer *, doublereal *, 
00177             doublereal *, doublereal *), radf3_(integer *, integer *, 
00178             doublereal *, doublereal *, doublereal *, doublereal *), radf4_(
00179             integer *, integer *, doublereal *, doublereal *, doublereal *, 
00180             doublereal *, doublereal *), radf5_(integer *, integer *, 
00181             doublereal *, doublereal *, doublereal *, doublereal *, 
00182             doublereal *, doublereal *);
00183     static integer i__;
00184     extern /* Subroutine */ int radfg_(integer *, integer *, integer *, 
00185             integer *, doublereal *, doublereal *, doublereal *, doublereal *,
00186              doublereal *, doublereal *);
00187     static integer k1, l1, l2, na, kh, nf, ip, iw, ix2, ix3, ix4, ido, idl1;
00188 
00189 /* ----------------------------TJW */
00190 /* ----------------------------TJW */
00191     /* Parameter adjustments */
00192     --ifac;
00193     --wa;
00194     --ch;
00195     --c__;
00196 
00197     /* Function Body */
00198     nf = ifac[2];
00199     na = 1;
00200     l2 = *n;
00201     iw = *n;
00202     i__1 = nf;
00203     for (k1 = 1; k1 <= i__1; ++k1) {
00204         kh = nf - k1;
00205         ip = ifac[kh + 3];
00206         l1 = l2 / ip;
00207         ido = *n / l2;
00208         idl1 = ido * l1;
00209         iw -= (ip - 1) * ido;
00210         na = 1 - na;
00211         if (ip != 4) {
00212             goto L102;
00213         }
00214         ix2 = iw + ido;
00215         ix3 = ix2 + ido;
00216         if (na != 0) {
00217             goto L101;
00218         }
00219         radf4_(&ido, &l1, &c__[1], &ch[1], &wa[iw], &wa[ix2], &wa[ix3]);
00220         goto L110;
00221 L101:
00222         radf4_(&ido, &l1, &ch[1], &c__[1], &wa[iw], &wa[ix2], &wa[ix3]);
00223         goto L110;
00224 L102:
00225         if (ip != 2) {
00226             goto L104;
00227         }
00228         if (na != 0) {
00229             goto L103;
00230         }
00231         radf2_(&ido, &l1, &c__[1], &ch[1], &wa[iw]);
00232         goto L110;
00233 L103:
00234         radf2_(&ido, &l1, &ch[1], &c__[1], &wa[iw]);
00235         goto L110;
00236 L104:
00237         if (ip != 3) {
00238             goto L106;
00239         }
00240         ix2 = iw + ido;
00241         if (na != 0) {
00242             goto L105;
00243         }
00244         radf3_(&ido, &l1, &c__[1], &ch[1], &wa[iw], &wa[ix2]);
00245         goto L110;
00246 L105:
00247         radf3_(&ido, &l1, &ch[1], &c__[1], &wa[iw], &wa[ix2]);
00248         goto L110;
00249 L106:
00250         if (ip != 5) {
00251             goto L108;
00252         }
00253         ix2 = iw + ido;
00254         ix3 = ix2 + ido;
00255         ix4 = ix3 + ido;
00256         if (na != 0) {
00257             goto L107;
00258         }
00259         radf5_(&ido, &l1, &c__[1], &ch[1], &wa[iw], &wa[ix2], &wa[ix3], &wa[
00260                 ix4]);
00261         goto L110;
00262 L107:
00263         radf5_(&ido, &l1, &ch[1], &c__[1], &wa[iw], &wa[ix2], &wa[ix3], &wa[
00264                 ix4]);
00265         goto L110;
00266 L108:
00267         if (ido == 1) {
00268             na = 1 - na;
00269         }
00270         if (na != 0) {
00271             goto L109;
00272         }
00273         radfg_(&ido, &ip, &l1, &idl1, &c__[1], &c__[1], &c__[1], &ch[1], &ch[
00274                 1], &wa[iw]);
00275         na = 1;
00276         goto L110;
00277 L109:
00278         radfg_(&ido, &ip, &l1, &idl1, &ch[1], &ch[1], &ch[1], &c__[1], &c__[1]
00279                 , &wa[iw]);
00280         na = 0;
00281 L110:
00282         l2 = l1;
00283 /* L111: */
00284     }
00285     if (na == 1) {
00286         return 0;
00287     }
00288     i__1 = *n;
00289     for (i__ = 1; i__ <= i__1; ++i__) {
00290         c__[i__] = ch[i__];
00291 /* L112: */
00292     }
00293     return 0;
00294 } /* rfftf1_ */
00295 
00296 /* Subroutine */ int radfg_(integer *ido, integer *ip, integer *l1, integer *
00297         idl1, doublereal *cc, doublereal *c1, doublereal *c2, doublereal *ch, 
00298         doublereal *ch2, doublereal *wa)
00299 {
00300     /* Initialized data */
00301 
00302     static doublereal tpi = 6.28318530717959;
00303 
00304     /* System generated locals */
00305     integer ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1,
00306              c1_dim2, c1_offset, c2_dim1, c2_offset, ch2_dim1, ch2_offset, 
00307             i__1, i__2, i__3;
00308 
00309     /* Builtin functions */
00310     double cos(doublereal), sin(doublereal);
00311 
00312     /* Local variables */
00313     static integer idij, ipph, i__, j, k, l, j2, ic, jc, lc, ik, is;
00314     static doublereal dc2, ai1, ai2, ar1, ar2, ds2;
00315     static integer nbd;
00316     static doublereal dcp, arg, dsp, ar1h, ar2h;
00317     static integer idp2, ipp2;
00318 
00319 /* ----------------------------TJW */
00320 /* ----------------------------TJW */
00321     /* Parameter adjustments */
00322     ch_dim1 = *ido;
00323     ch_dim2 = *l1;
00324     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
00325     ch -= ch_offset;
00326     c1_dim1 = *ido;
00327     c1_dim2 = *l1;
00328     c1_offset = c1_dim1 * (c1_dim2 + 1) + 1;
00329     c1 -= c1_offset;
00330     cc_dim1 = *ido;
00331     cc_dim2 = *ip;
00332     cc_offset = cc_dim1 * (cc_dim2 + 1) + 1;
00333     cc -= cc_offset;
00334     ch2_dim1 = *idl1;
00335     ch2_offset = ch2_dim1 + 1;
00336     ch2 -= ch2_offset;
00337     c2_dim1 = *idl1;
00338     c2_offset = c2_dim1 + 1;
00339     c2 -= c2_offset;
00340     --wa;
00341 
00342     /* Function Body */
00343     arg = tpi / (real) (*ip);
00344     dcp = cos(arg);
00345     dsp = sin(arg);
00346     ipph = (*ip + 1) / 2;
00347     ipp2 = *ip + 2;
00348     idp2 = *ido + 2;
00349     nbd = (*ido - 1) / 2;
00350     if (*ido == 1) {
00351         goto L119;
00352     }
00353     i__1 = *idl1;
00354     for (ik = 1; ik <= i__1; ++ik) {
00355         ch2[ik + ch2_dim1] = c2[ik + c2_dim1];
00356 /* L101: */
00357     }
00358     i__1 = *ip;
00359     for (j = 2; j <= i__1; ++j) {
00360         i__2 = *l1;
00361         for (k = 1; k <= i__2; ++k) {
00362             ch[(k + j * ch_dim2) * ch_dim1 + 1] = c1[(k + j * c1_dim2) * 
00363                     c1_dim1 + 1];
00364 /* L102: */
00365         }
00366 /* L103: */
00367     }
00368     if (nbd > *l1) {
00369         goto L107;
00370     }
00371     is = -(*ido);
00372     i__1 = *ip;
00373     for (j = 2; j <= i__1; ++j) {
00374         is += *ido;
00375         idij = is;
00376         i__2 = *ido;
00377         for (i__ = 3; i__ <= i__2; i__ += 2) {
00378             idij += 2;
00379             i__3 = *l1;
00380             for (k = 1; k <= i__3; ++k) {
00381                 ch[i__ - 1 + (k + j * ch_dim2) * ch_dim1] = wa[idij - 1] * c1[
00382                         i__ - 1 + (k + j * c1_dim2) * c1_dim1] + wa[idij] * 
00383                         c1[i__ + (k + j * c1_dim2) * c1_dim1];
00384                 ch[i__ + (k + j * ch_dim2) * ch_dim1] = wa[idij - 1] * c1[i__ 
00385                         + (k + j * c1_dim2) * c1_dim1] - wa[idij] * c1[i__ - 
00386                         1 + (k + j * c1_dim2) * c1_dim1];
00387 /* L104: */
00388             }
00389 /* L105: */
00390         }
00391 /* L106: */
00392     }
00393     goto L111;
00394 L107:
00395     is = -(*ido);
00396     i__1 = *ip;
00397     for (j = 2; j <= i__1; ++j) {
00398         is += *ido;
00399         i__2 = *l1;
00400         for (k = 1; k <= i__2; ++k) {
00401             idij = is;
00402             i__3 = *ido;
00403             for (i__ = 3; i__ <= i__3; i__ += 2) {
00404                 idij += 2;
00405                 ch[i__ - 1 + (k + j * ch_dim2) * ch_dim1] = wa[idij - 1] * c1[
00406                         i__ - 1 + (k + j * c1_dim2) * c1_dim1] + wa[idij] * 
00407                         c1[i__ + (k + j * c1_dim2) * c1_dim1];
00408                 ch[i__ + (k + j * ch_dim2) * ch_dim1] = wa[idij - 1] * c1[i__ 
00409                         + (k + j * c1_dim2) * c1_dim1] - wa[idij] * c1[i__ - 
00410                         1 + (k + j * c1_dim2) * c1_dim1];
00411 /* L108: */
00412             }
00413 /* L109: */
00414         }
00415 /* L110: */
00416     }
00417 L111:
00418     if (nbd < *l1) {
00419         goto L115;
00420     }
00421     i__1 = ipph;
00422     for (j = 2; j <= i__1; ++j) {
00423         jc = ipp2 - j;
00424         i__2 = *l1;
00425         for (k = 1; k <= i__2; ++k) {
00426             i__3 = *ido;
00427             for (i__ = 3; i__ <= i__3; i__ += 2) {
00428                 c1[i__ - 1 + (k + j * c1_dim2) * c1_dim1] = ch[i__ - 1 + (k + 
00429                         j * ch_dim2) * ch_dim1] + ch[i__ - 1 + (k + jc * 
00430                         ch_dim2) * ch_dim1];
00431                 c1[i__ - 1 + (k + jc * c1_dim2) * c1_dim1] = ch[i__ + (k + j *
00432                          ch_dim2) * ch_dim1] - ch[i__ + (k + jc * ch_dim2) * 
00433                         ch_dim1];
00434                 c1[i__ + (k + j * c1_dim2) * c1_dim1] = ch[i__ + (k + j * 
00435                         ch_dim2) * ch_dim1] + ch[i__ + (k + jc * ch_dim2) * 
00436                         ch_dim1];
00437                 c1[i__ + (k + jc * c1_dim2) * c1_dim1] = ch[i__ - 1 + (k + jc 
00438                         * ch_dim2) * ch_dim1] - ch[i__ - 1 + (k + j * ch_dim2)
00439                          * ch_dim1];
00440 /* L112: */
00441             }
00442 /* L113: */
00443         }
00444 /* L114: */
00445     }
00446     goto L121;
00447 L115:
00448     i__1 = ipph;
00449     for (j = 2; j <= i__1; ++j) {
00450         jc = ipp2 - j;
00451         i__2 = *ido;
00452         for (i__ = 3; i__ <= i__2; i__ += 2) {
00453             i__3 = *l1;
00454             for (k = 1; k <= i__3; ++k) {
00455                 c1[i__ - 1 + (k + j * c1_dim2) * c1_dim1] = ch[i__ - 1 + (k + 
00456                         j * ch_dim2) * ch_dim1] + ch[i__ - 1 + (k + jc * 
00457                         ch_dim2) * ch_dim1];
00458                 c1[i__ - 1 + (k + jc * c1_dim2) * c1_dim1] = ch[i__ + (k + j *
00459                          ch_dim2) * ch_dim1] - ch[i__ + (k + jc * ch_dim2) * 
00460                         ch_dim1];
00461                 c1[i__ + (k + j * c1_dim2) * c1_dim1] = ch[i__ + (k + j * 
00462                         ch_dim2) * ch_dim1] + ch[i__ + (k + jc * ch_dim2) * 
00463                         ch_dim1];
00464                 c1[i__ + (k + jc * c1_dim2) * c1_dim1] = ch[i__ - 1 + (k + jc 
00465                         * ch_dim2) * ch_dim1] - ch[i__ - 1 + (k + j * ch_dim2)
00466                          * ch_dim1];
00467 /* L116: */
00468             }
00469 /* L117: */
00470         }
00471 /* L118: */
00472     }
00473     goto L121;
00474 L119:
00475     i__1 = *idl1;
00476     for (ik = 1; ik <= i__1; ++ik) {
00477         c2[ik + c2_dim1] = ch2[ik + ch2_dim1];
00478 /* L120: */
00479     }
00480 L121:
00481     i__1 = ipph;
00482     for (j = 2; j <= i__1; ++j) {
00483         jc = ipp2 - j;
00484         i__2 = *l1;
00485         for (k = 1; k <= i__2; ++k) {
00486             c1[(k + j * c1_dim2) * c1_dim1 + 1] = ch[(k + j * ch_dim2) * 
00487                     ch_dim1 + 1] + ch[(k + jc * ch_dim2) * ch_dim1 + 1];
00488             c1[(k + jc * c1_dim2) * c1_dim1 + 1] = ch[(k + jc * ch_dim2) * 
00489                     ch_dim1 + 1] - ch[(k + j * ch_dim2) * ch_dim1 + 1];
00490 /* L122: */
00491         }
00492 /* L123: */
00493     }
00494 
00495     ar1 = (float)1.;
00496     ai1 = (float)0.;
00497     i__1 = ipph;
00498     for (l = 2; l <= i__1; ++l) {
00499         lc = ipp2 - l;
00500         ar1h = dcp * ar1 - dsp * ai1;
00501         ai1 = dcp * ai1 + dsp * ar1;
00502         ar1 = ar1h;
00503         i__2 = *idl1;
00504         for (ik = 1; ik <= i__2; ++ik) {
00505             ch2[ik + l * ch2_dim1] = c2[ik + c2_dim1] + ar1 * c2[ik + (
00506                     c2_dim1 << 1)];
00507             ch2[ik + lc * ch2_dim1] = ai1 * c2[ik + *ip * c2_dim1];
00508 /* L124: */
00509         }
00510         dc2 = ar1;
00511         ds2 = ai1;
00512         ar2 = ar1;
00513         ai2 = ai1;
00514         i__2 = ipph;
00515         for (j = 3; j <= i__2; ++j) {
00516             jc = ipp2 - j;
00517             ar2h = dc2 * ar2 - ds2 * ai2;
00518             ai2 = dc2 * ai2 + ds2 * ar2;
00519             ar2 = ar2h;
00520             i__3 = *idl1;
00521             for (ik = 1; ik <= i__3; ++ik) {
00522                 ch2[ik + l * ch2_dim1] += ar2 * c2[ik + j * c2_dim1];
00523                 ch2[ik + lc * ch2_dim1] += ai2 * c2[ik + jc * c2_dim1];
00524 /* L125: */
00525             }
00526 /* L126: */
00527         }
00528 /* L127: */
00529     }
00530     i__1 = ipph;
00531     for (j = 2; j <= i__1; ++j) {
00532         i__2 = *idl1;
00533         for (ik = 1; ik <= i__2; ++ik) {
00534             ch2[ik + ch2_dim1] += c2[ik + j * c2_dim1];
00535 /* L128: */
00536         }
00537 /* L129: */
00538     }
00539 
00540     if (*ido < *l1) {
00541         goto L132;
00542     }
00543     i__1 = *l1;
00544     for (k = 1; k <= i__1; ++k) {
00545         i__2 = *ido;
00546         for (i__ = 1; i__ <= i__2; ++i__) {
00547             cc[i__ + (k * cc_dim2 + 1) * cc_dim1] = ch[i__ + (k + ch_dim2) * 
00548                     ch_dim1];
00549 /* L130: */
00550         }
00551 /* L131: */
00552     }
00553     goto L135;
00554 L132:
00555     i__1 = *ido;
00556     for (i__ = 1; i__ <= i__1; ++i__) {
00557         i__2 = *l1;
00558         for (k = 1; k <= i__2; ++k) {
00559             cc[i__ + (k * cc_dim2 + 1) * cc_dim1] = ch[i__ + (k + ch_dim2) * 
00560                     ch_dim1];
00561 /* L133: */
00562         }
00563 /* L134: */
00564     }
00565 L135:
00566     i__1 = ipph;
00567     for (j = 2; j <= i__1; ++j) {
00568         jc = ipp2 - j;
00569         j2 = j + j;
00570         i__2 = *l1;
00571         for (k = 1; k <= i__2; ++k) {
00572             cc[*ido + (j2 - 2 + k * cc_dim2) * cc_dim1] = ch[(k + j * ch_dim2)
00573                      * ch_dim1 + 1];
00574             cc[(j2 - 1 + k * cc_dim2) * cc_dim1 + 1] = ch[(k + jc * ch_dim2) *
00575                      ch_dim1 + 1];
00576 /* L136: */
00577         }
00578 /* L137: */
00579     }
00580     if (*ido == 1) {
00581         return 0;
00582     }
00583     if (nbd < *l1) {
00584         goto L141;
00585     }
00586     i__1 = ipph;
00587     for (j = 2; j <= i__1; ++j) {
00588         jc = ipp2 - j;
00589         j2 = j + j;
00590         i__2 = *l1;
00591         for (k = 1; k <= i__2; ++k) {
00592             i__3 = *ido;
00593             for (i__ = 3; i__ <= i__3; i__ += 2) {
00594                 ic = idp2 - i__;
00595                 cc[i__ - 1 + (j2 - 1 + k * cc_dim2) * cc_dim1] = ch[i__ - 1 + 
00596                         (k + j * ch_dim2) * ch_dim1] + ch[i__ - 1 + (k + jc * 
00597                         ch_dim2) * ch_dim1];
00598                 cc[ic - 1 + (j2 - 2 + k * cc_dim2) * cc_dim1] = ch[i__ - 1 + (
00599                         k + j * ch_dim2) * ch_dim1] - ch[i__ - 1 + (k + jc * 
00600                         ch_dim2) * ch_dim1];
00601                 cc[i__ + (j2 - 1 + k * cc_dim2) * cc_dim1] = ch[i__ + (k + j *
00602                          ch_dim2) * ch_dim1] + ch[i__ + (k + jc * ch_dim2) * 
00603                         ch_dim1];
00604                 cc[ic + (j2 - 2 + k * cc_dim2) * cc_dim1] = ch[i__ + (k + jc *
00605                          ch_dim2) * ch_dim1] - ch[i__ + (k + j * ch_dim2) * 
00606                         ch_dim1];
00607 /* L138: */
00608             }
00609 /* L139: */
00610         }
00611 /* L140: */
00612     }
00613     return 0;
00614 L141:
00615     i__1 = ipph;
00616     for (j = 2; j <= i__1; ++j) {
00617         jc = ipp2 - j;
00618         j2 = j + j;
00619         i__2 = *ido;
00620         for (i__ = 3; i__ <= i__2; i__ += 2) {
00621             ic = idp2 - i__;
00622             i__3 = *l1;
00623             for (k = 1; k <= i__3; ++k) {
00624                 cc[i__ - 1 + (j2 - 1 + k * cc_dim2) * cc_dim1] = ch[i__ - 1 + 
00625                         (k + j * ch_dim2) * ch_dim1] + ch[i__ - 1 + (k + jc * 
00626                         ch_dim2) * ch_dim1];
00627                 cc[ic - 1 + (j2 - 2 + k * cc_dim2) * cc_dim1] = ch[i__ - 1 + (
00628                         k + j * ch_dim2) * ch_dim1] - ch[i__ - 1 + (k + jc * 
00629                         ch_dim2) * ch_dim1];
00630                 cc[i__ + (j2 - 1 + k * cc_dim2) * cc_dim1] = ch[i__ + (k + j *
00631                          ch_dim2) * ch_dim1] + ch[i__ + (k + jc * ch_dim2) * 
00632                         ch_dim1];
00633                 cc[ic + (j2 - 2 + k * cc_dim2) * cc_dim1] = ch[i__ + (k + jc *
00634                          ch_dim2) * ch_dim1] - ch[i__ + (k + j * ch_dim2) * 
00635                         ch_dim1];
00636 /* L142: */
00637             }
00638 /* L143: */
00639         }
00640 /* L144: */
00641     }
00642     return 0;
00643 } /* radfg_ */
00644 
00645 /* Subroutine */ int radf5_(integer *ido, integer *l1, doublereal *cc, 
00646         doublereal *ch, doublereal *wa1, doublereal *wa2, doublereal *wa3, 
00647         doublereal *wa4)
00648 {
00649     /* Initialized data */
00650 
00651     static doublereal tr11 = .309016994374947;
00652     static doublereal ti11 = .951056516295154;
00653     static doublereal tr12 = -.809016994374947;
00654     static doublereal ti12 = .587785252292473;
00655 
00656     /* System generated locals */
00657     integer cc_dim1, cc_dim2, cc_offset, ch_dim1, ch_offset, i__1, i__2;
00658 
00659     /* Local variables */
00660     static integer i__, k, ic;
00661     static doublereal ci2, di2, ci4, ci5, di3, di4, di5, ci3, cr2, cr3, dr2, 
00662             dr3, dr4, dr5, cr5, cr4, ti2, ti3, ti5, ti4, tr2, tr3, tr4, tr5;
00663     static integer idp2;
00664 
00665 /* ----------------------------TJW */
00666 /* ----------------------------TJW */
00667     /* Parameter adjustments */
00668     ch_dim1 = *ido;
00669     ch_offset = ch_dim1 * 6 + 1;
00670     ch -= ch_offset;
00671     cc_dim1 = *ido;
00672     cc_dim2 = *l1;
00673     cc_offset = cc_dim1 * (cc_dim2 + 1) + 1;
00674     cc -= cc_offset;
00675     --wa1;
00676     --wa2;
00677     --wa3;
00678     --wa4;
00679 
00680     /* Function Body */
00681     i__1 = *l1;
00682     for (k = 1; k <= i__1; ++k) {
00683         cr2 = cc[(k + cc_dim2 * 5) * cc_dim1 + 1] + cc[(k + (cc_dim2 << 1)) * 
00684                 cc_dim1 + 1];
00685         ci5 = cc[(k + cc_dim2 * 5) * cc_dim1 + 1] - cc[(k + (cc_dim2 << 1)) * 
00686                 cc_dim1 + 1];
00687         cr3 = cc[(k + (cc_dim2 << 2)) * cc_dim1 + 1] + cc[(k + cc_dim2 * 3) * 
00688                 cc_dim1 + 1];
00689         ci4 = cc[(k + (cc_dim2 << 2)) * cc_dim1 + 1] - cc[(k + cc_dim2 * 3) * 
00690                 cc_dim1 + 1];
00691         ch[(k * 5 + 1) * ch_dim1 + 1] = cc[(k + cc_dim2) * cc_dim1 + 1] + cr2 
00692                 + cr3;
00693         ch[*ido + (k * 5 + 2) * ch_dim1] = cc[(k + cc_dim2) * cc_dim1 + 1] + 
00694                 tr11 * cr2 + tr12 * cr3;
00695         ch[(k * 5 + 3) * ch_dim1 + 1] = ti11 * ci5 + ti12 * ci4;
00696         ch[*ido + (k * 5 + 4) * ch_dim1] = cc[(k + cc_dim2) * cc_dim1 + 1] + 
00697                 tr12 * cr2 + tr11 * cr3;
00698         ch[(k * 5 + 5) * ch_dim1 + 1] = ti12 * ci5 - ti11 * ci4;
00699 /* L101: */
00700     }
00701     if (*ido == 1) {
00702         return 0;
00703     }
00704     idp2 = *ido + 2;
00705     i__1 = *l1;
00706     for (k = 1; k <= i__1; ++k) {
00707         i__2 = *ido;
00708         for (i__ = 3; i__ <= i__2; i__ += 2) {
00709             ic = idp2 - i__;
00710             dr2 = wa1[i__ - 2] * cc[i__ - 1 + (k + (cc_dim2 << 1)) * cc_dim1] 
00711                     + wa1[i__ - 1] * cc[i__ + (k + (cc_dim2 << 1)) * cc_dim1];
00712             di2 = wa1[i__ - 2] * cc[i__ + (k + (cc_dim2 << 1)) * cc_dim1] - 
00713                     wa1[i__ - 1] * cc[i__ - 1 + (k + (cc_dim2 << 1)) * 
00714                     cc_dim1];
00715             dr3 = wa2[i__ - 2] * cc[i__ - 1 + (k + cc_dim2 * 3) * cc_dim1] + 
00716                     wa2[i__ - 1] * cc[i__ + (k + cc_dim2 * 3) * cc_dim1];
00717             di3 = wa2[i__ - 2] * cc[i__ + (k + cc_dim2 * 3) * cc_dim1] - wa2[
00718                     i__ - 1] * cc[i__ - 1 + (k + cc_dim2 * 3) * cc_dim1];
00719             dr4 = wa3[i__ - 2] * cc[i__ - 1 + (k + (cc_dim2 << 2)) * cc_dim1] 
00720                     + wa3[i__ - 1] * cc[i__ + (k + (cc_dim2 << 2)) * cc_dim1];
00721             di4 = wa3[i__ - 2] * cc[i__ + (k + (cc_dim2 << 2)) * cc_dim1] - 
00722                     wa3[i__ - 1] * cc[i__ - 1 + (k + (cc_dim2 << 2)) * 
00723                     cc_dim1];
00724             dr5 = wa4[i__ - 2] * cc[i__ - 1 + (k + cc_dim2 * 5) * cc_dim1] + 
00725                     wa4[i__ - 1] * cc[i__ + (k + cc_dim2 * 5) * cc_dim1];
00726             di5 = wa4[i__ - 2] * cc[i__ + (k + cc_dim2 * 5) * cc_dim1] - wa4[
00727                     i__ - 1] * cc[i__ - 1 + (k + cc_dim2 * 5) * cc_dim1];
00728             cr2 = dr2 + dr5;
00729             ci5 = dr5 - dr2;
00730             cr5 = di2 - di5;
00731             ci2 = di2 + di5;
00732             cr3 = dr3 + dr4;
00733             ci4 = dr4 - dr3;
00734             cr4 = di3 - di4;
00735             ci3 = di3 + di4;
00736             ch[i__ - 1 + (k * 5 + 1) * ch_dim1] = cc[i__ - 1 + (k + cc_dim2) *
00737                      cc_dim1] + cr2 + cr3;
00738             ch[i__ + (k * 5 + 1) * ch_dim1] = cc[i__ + (k + cc_dim2) * 
00739                     cc_dim1] + ci2 + ci3;
00740             tr2 = cc[i__ - 1 + (k + cc_dim2) * cc_dim1] + tr11 * cr2 + tr12 * 
00741                     cr3;
00742             ti2 = cc[i__ + (k + cc_dim2) * cc_dim1] + tr11 * ci2 + tr12 * ci3;
00743             tr3 = cc[i__ - 1 + (k + cc_dim2) * cc_dim1] + tr12 * cr2 + tr11 * 
00744                     cr3;
00745             ti3 = cc[i__ + (k + cc_dim2) * cc_dim1] + tr12 * ci2 + tr11 * ci3;
00746             tr5 = ti11 * cr5 + ti12 * cr4;
00747             ti5 = ti11 * ci5 + ti12 * ci4;
00748             tr4 = ti12 * cr5 - ti11 * cr4;
00749             ti4 = ti12 * ci5 - ti11 * ci4;
00750             ch[i__ - 1 + (k * 5 + 3) * ch_dim1] = tr2 + tr5;
00751             ch[ic - 1 + (k * 5 + 2) * ch_dim1] = tr2 - tr5;
00752             ch[i__ + (k * 5 + 3) * ch_dim1] = ti2 + ti5;
00753             ch[ic + (k * 5 + 2) * ch_dim1] = ti5 - ti2;
00754             ch[i__ - 1 + (k * 5 + 5) * ch_dim1] = tr3 + tr4;
00755             ch[ic - 1 + (k * 5 + 4) * ch_dim1] = tr3 - tr4;
00756             ch[i__ + (k * 5 + 5) * ch_dim1] = ti3 + ti4;
00757             ch[ic + (k * 5 + 4) * ch_dim1] = ti4 - ti3;
00758 /* L102: */
00759         }
00760 /* L103: */
00761     }
00762     return 0;
00763 } /* radf5_ */
00764 
00765 /* Subroutine */ int radf3_(integer *ido, integer *l1, doublereal *cc, 
00766         doublereal *ch, doublereal *wa1, doublereal *wa2)
00767 {
00768     /* Initialized data */
00769 
00770     static doublereal taur = -.5;
00771     static doublereal taui = .866025403784439;
00772 
00773     /* System generated locals */
00774     integer ch_dim1, ch_offset, cc_dim1, cc_dim2, cc_offset, i__1, i__2;
00775 
00776     /* Local variables */
00777     static integer i__, k, ic;
00778     static doublereal ci2, di2, di3, cr2, dr2, dr3, ti2, ti3, tr2, tr3;
00779     static integer idp2;
00780 
00781 /* ----------------------------TJW */
00782 /* ----------------------------TJW */
00783     /* Parameter adjustments */
00784     ch_dim1 = *ido;
00785     ch_offset = (ch_dim1 << 2) + 1;
00786     ch -= ch_offset;
00787     cc_dim1 = *ido;
00788     cc_dim2 = *l1;
00789     cc_offset = cc_dim1 * (cc_dim2 + 1) + 1;
00790     cc -= cc_offset;
00791     --wa1;
00792     --wa2;
00793 
00794     /* Function Body */
00795     i__1 = *l1;
00796     for (k = 1; k <= i__1; ++k) {
00797         cr2 = cc[(k + (cc_dim2 << 1)) * cc_dim1 + 1] + cc[(k + cc_dim2 * 3) * 
00798                 cc_dim1 + 1];
00799         ch[(k * 3 + 1) * ch_dim1 + 1] = cc[(k + cc_dim2) * cc_dim1 + 1] + cr2;
00800         ch[(k * 3 + 3) * ch_dim1 + 1] = taui * (cc[(k + cc_dim2 * 3) * 
00801                 cc_dim1 + 1] - cc[(k + (cc_dim2 << 1)) * cc_dim1 + 1]);
00802         ch[*ido + (k * 3 + 2) * ch_dim1] = cc[(k + cc_dim2) * cc_dim1 + 1] + 
00803                 taur * cr2;
00804 /* L101: */
00805     }
00806     if (*ido == 1) {
00807         return 0;
00808     }
00809     idp2 = *ido + 2;
00810     i__1 = *l1;
00811     for (k = 1; k <= i__1; ++k) {
00812         i__2 = *ido;
00813         for (i__ = 3; i__ <= i__2; i__ += 2) {
00814             ic = idp2 - i__;
00815             dr2 = wa1[i__ - 2] * cc[i__ - 1 + (k + (cc_dim2 << 1)) * cc_dim1] 
00816                     + wa1[i__ - 1] * cc[i__ + (k + (cc_dim2 << 1)) * cc_dim1];
00817             di2 = wa1[i__ - 2] * cc[i__ + (k + (cc_dim2 << 1)) * cc_dim1] - 
00818                     wa1[i__ - 1] * cc[i__ - 1 + (k + (cc_dim2 << 1)) * 
00819                     cc_dim1];
00820             dr3 = wa2[i__ - 2] * cc[i__ - 1 + (k + cc_dim2 * 3) * cc_dim1] + 
00821                     wa2[i__ - 1] * cc[i__ + (k + cc_dim2 * 3) * cc_dim1];
00822             di3 = wa2[i__ - 2] * cc[i__ + (k + cc_dim2 * 3) * cc_dim1] - wa2[
00823                     i__ - 1] * cc[i__ - 1 + (k + cc_dim2 * 3) * cc_dim1];
00824             cr2 = dr2 + dr3;
00825             ci2 = di2 + di3;
00826             ch[i__ - 1 + (k * 3 + 1) * ch_dim1] = cc[i__ - 1 + (k + cc_dim2) *
00827                      cc_dim1] + cr2;
00828             ch[i__ + (k * 3 + 1) * ch_dim1] = cc[i__ + (k + cc_dim2) * 
00829                     cc_dim1] + ci2;
00830             tr2 = cc[i__ - 1 + (k + cc_dim2) * cc_dim1] + taur * cr2;
00831             ti2 = cc[i__ + (k + cc_dim2) * cc_dim1] + taur * ci2;
00832             tr3 = taui * (di2 - di3);
00833             ti3 = taui * (dr3 - dr2);
00834             ch[i__ - 1 + (k * 3 + 3) * ch_dim1] = tr2 + tr3;
00835             ch[ic - 1 + (k * 3 + 2) * ch_dim1] = tr2 - tr3;
00836             ch[i__ + (k * 3 + 3) * ch_dim1] = ti2 + ti3;
00837             ch[ic + (k * 3 + 2) * ch_dim1] = ti3 - ti2;
00838 /* L102: */
00839         }
00840 /* L103: */
00841     }
00842     return 0;
00843 } /* radf3_ */
00844 
00845 /* Subroutine */ int radf2_(integer *ido, integer *l1, doublereal *cc, 
00846         doublereal *ch, doublereal *wa1)
00847 {
00848     /* System generated locals */
00849     integer ch_dim1, ch_offset, cc_dim1, cc_dim2, cc_offset, i__1, i__2;
00850 
00851     /* Local variables */
00852     static integer i__, k, ic;
00853     static doublereal ti2, tr2;
00854     static integer idp2;
00855 
00856 /* ----------------------------TJW */
00857 /* ----------------------------TJW */
00858     /* Parameter adjustments */
00859     ch_dim1 = *ido;
00860     ch_offset = ch_dim1 * 3 + 1;
00861     ch -= ch_offset;
00862     cc_dim1 = *ido;
00863     cc_dim2 = *l1;
00864     cc_offset = cc_dim1 * (cc_dim2 + 1) + 1;
00865     cc -= cc_offset;
00866     --wa1;
00867 
00868     /* Function Body */
00869     i__1 = *l1;
00870     for (k = 1; k <= i__1; ++k) {
00871         ch[((k << 1) + 1) * ch_dim1 + 1] = cc[(k + cc_dim2) * cc_dim1 + 1] + 
00872                 cc[(k + (cc_dim2 << 1)) * cc_dim1 + 1];
00873         ch[*ido + ((k << 1) + 2) * ch_dim1] = cc[(k + cc_dim2) * cc_dim1 + 1] 
00874                 - cc[(k + (cc_dim2 << 1)) * cc_dim1 + 1];
00875 /* L101: */
00876     }
00877     if ((i__1 = *ido - 2) < 0) {
00878         goto L107;
00879     } else if (i__1 == 0) {
00880         goto L105;
00881     } else {
00882         goto L102;
00883     }
00884 L102:
00885     idp2 = *ido + 2;
00886     i__1 = *l1;
00887     for (k = 1; k <= i__1; ++k) {
00888         i__2 = *ido;
00889         for (i__ = 3; i__ <= i__2; i__ += 2) {
00890             ic = idp2 - i__;
00891             tr2 = wa1[i__ - 2] * cc[i__ - 1 + (k + (cc_dim2 << 1)) * cc_dim1] 
00892                     + wa1[i__ - 1] * cc[i__ + (k + (cc_dim2 << 1)) * cc_dim1];
00893             ti2 = wa1[i__ - 2] * cc[i__ + (k + (cc_dim2 << 1)) * cc_dim1] - 
00894                     wa1[i__ - 1] * cc[i__ - 1 + (k + (cc_dim2 << 1)) * 
00895                     cc_dim1];
00896             ch[i__ + ((k << 1) + 1) * ch_dim1] = cc[i__ + (k + cc_dim2) * 
00897                     cc_dim1] + ti2;
00898             ch[ic + ((k << 1) + 2) * ch_dim1] = ti2 - cc[i__ + (k + cc_dim2) *
00899                      cc_dim1];
00900             ch[i__ - 1 + ((k << 1) + 1) * ch_dim1] = cc[i__ - 1 + (k + 
00901                     cc_dim2) * cc_dim1] + tr2;
00902             ch[ic - 1 + ((k << 1) + 2) * ch_dim1] = cc[i__ - 1 + (k + cc_dim2)
00903                      * cc_dim1] - tr2;
00904 /* L103: */
00905         }
00906 /* L104: */
00907     }
00908     if (*ido % 2 == 1) {
00909         return 0;
00910     }
00911 L105:
00912     i__1 = *l1;
00913     for (k = 1; k <= i__1; ++k) {
00914         ch[((k << 1) + 2) * ch_dim1 + 1] = -cc[*ido + (k + (cc_dim2 << 1)) * 
00915                 cc_dim1];
00916         ch[*ido + ((k << 1) + 1) * ch_dim1] = cc[*ido + (k + cc_dim2) * 
00917                 cc_dim1];
00918 /* L106: */
00919     }
00920 L107:
00921     return 0;
00922 } /* radf2_ */
00923 
00924 /* Subroutine */ int radf4_(integer *ido, integer *l1, doublereal *cc, 
00925         doublereal *ch, doublereal *wa1, doublereal *wa2, doublereal *wa3)
00926 {
00927     /* Initialized data */
00928 
00929     static doublereal hsqt2 = .7071067811865475;
00930 
00931     /* System generated locals */
00932     integer cc_dim1, cc_dim2, cc_offset, ch_dim1, ch_offset, i__1, i__2;
00933 
00934     /* Local variables */
00935     static integer i__, k, ic;
00936     static doublereal ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, 
00937             tr2, tr3, tr4;
00938     static integer idp2;
00939 
00940 /* ----------------------------TJW */
00941 /* ----------------------------TJW */
00942     /* Parameter adjustments */
00943     ch_dim1 = *ido;
00944     ch_offset = ch_dim1 * 5 + 1;
00945     ch -= ch_offset;
00946     cc_dim1 = *ido;
00947     cc_dim2 = *l1;
00948     cc_offset = cc_dim1 * (cc_dim2 + 1) + 1;
00949     cc -= cc_offset;
00950     --wa1;
00951     --wa2;
00952     --wa3;
00953 
00954     /* Function Body */
00955     i__1 = *l1;
00956     for (k = 1; k <= i__1; ++k) {
00957         tr1 = cc[(k + (cc_dim2 << 1)) * cc_dim1 + 1] + cc[(k + (cc_dim2 << 2))
00958                  * cc_dim1 + 1];
00959         tr2 = cc[(k + cc_dim2) * cc_dim1 + 1] + cc[(k + cc_dim2 * 3) * 
00960                 cc_dim1 + 1];
00961         ch[((k << 2) + 1) * ch_dim1 + 1] = tr1 + tr2;
00962         ch[*ido + ((k << 2) + 4) * ch_dim1] = tr2 - tr1;
00963         ch[*ido + ((k << 2) + 2) * ch_dim1] = cc[(k + cc_dim2) * cc_dim1 + 1] 
00964                 - cc[(k + cc_dim2 * 3) * cc_dim1 + 1];
00965         ch[((k << 2) + 3) * ch_dim1 + 1] = cc[(k + (cc_dim2 << 2)) * cc_dim1 
00966                 + 1] - cc[(k + (cc_dim2 << 1)) * cc_dim1 + 1];
00967 /* L101: */
00968     }
00969     if ((i__1 = *ido - 2) < 0) {
00970         goto L107;
00971     } else if (i__1 == 0) {
00972         goto L105;
00973     } else {
00974         goto L102;
00975     }
00976 L102:
00977     idp2 = *ido + 2;
00978     i__1 = *l1;
00979     for (k = 1; k <= i__1; ++k) {
00980         i__2 = *ido;
00981         for (i__ = 3; i__ <= i__2; i__ += 2) {
00982             ic = idp2 - i__;
00983             cr2 = wa1[i__ - 2] * cc[i__ - 1 + (k + (cc_dim2 << 1)) * cc_dim1] 
00984                     + wa1[i__ - 1] * cc[i__ + (k + (cc_dim2 << 1)) * cc_dim1];
00985             ci2 = wa1[i__ - 2] * cc[i__ + (k + (cc_dim2 << 1)) * cc_dim1] - 
00986                     wa1[i__ - 1] * cc[i__ - 1 + (k + (cc_dim2 << 1)) * 
00987                     cc_dim1];
00988             cr3 = wa2[i__ - 2] * cc[i__ - 1 + (k + cc_dim2 * 3) * cc_dim1] + 
00989                     wa2[i__ - 1] * cc[i__ + (k + cc_dim2 * 3) * cc_dim1];
00990             ci3 = wa2[i__ - 2] * cc[i__ + (k + cc_dim2 * 3) * cc_dim1] - wa2[
00991                     i__ - 1] * cc[i__ - 1 + (k + cc_dim2 * 3) * cc_dim1];
00992             cr4 = wa3[i__ - 2] * cc[i__ - 1 + (k + (cc_dim2 << 2)) * cc_dim1] 
00993                     + wa3[i__ - 1] * cc[i__ + (k + (cc_dim2 << 2)) * cc_dim1];
00994             ci4 = wa3[i__ - 2] * cc[i__ + (k + (cc_dim2 << 2)) * cc_dim1] - 
00995                     wa3[i__ - 1] * cc[i__ - 1 + (k + (cc_dim2 << 2)) * 
00996                     cc_dim1];
00997             tr1 = cr2 + cr4;
00998             tr4 = cr4 - cr2;
00999             ti1 = ci2 + ci4;
01000             ti4 = ci2 - ci4;
01001             ti2 = cc[i__ + (k + cc_dim2) * cc_dim1] + ci3;
01002             ti3 = cc[i__ + (k + cc_dim2) * cc_dim1] - ci3;
01003             tr2 = cc[i__ - 1 + (k + cc_dim2) * cc_dim1] + cr3;
01004             tr3 = cc[i__ - 1 + (k + cc_dim2) * cc_dim1] - cr3;
01005             ch[i__ - 1 + ((k << 2) + 1) * ch_dim1] = tr1 + tr2;
01006             ch[ic - 1 + ((k << 2) + 4) * ch_dim1] = tr2 - tr1;
01007             ch[i__ + ((k << 2) + 1) * ch_dim1] = ti1 + ti2;
01008             ch[ic + ((k << 2) + 4) * ch_dim1] = ti1 - ti2;
01009             ch[i__ - 1 + ((k << 2) + 3) * ch_dim1] = ti4 + tr3;
01010             ch[ic - 1 + ((k << 2) + 2) * ch_dim1] = tr3 - ti4;
01011             ch[i__ + ((k << 2) + 3) * ch_dim1] = tr4 + ti3;
01012             ch[ic + ((k << 2) + 2) * ch_dim1] = tr4 - ti3;
01013 /* L103: */
01014         }
01015 /* L104: */
01016     }
01017     if (*ido % 2 == 1) {
01018         return 0;
01019     }
01020 L105:
01021     i__1 = *l1;
01022     for (k = 1; k <= i__1; ++k) {
01023         ti1 = -hsqt2 * (cc[*ido + (k + (cc_dim2 << 1)) * cc_dim1] + cc[*ido + 
01024                 (k + (cc_dim2 << 2)) * cc_dim1]);
01025         tr1 = hsqt2 * (cc[*ido + (k + (cc_dim2 << 1)) * cc_dim1] - cc[*ido + (
01026                 k + (cc_dim2 << 2)) * cc_dim1]);
01027         ch[*ido + ((k << 2) + 1) * ch_dim1] = tr1 + cc[*ido + (k + cc_dim2) * 
01028                 cc_dim1];
01029         ch[*ido + ((k << 2) + 3) * ch_dim1] = cc[*ido + (k + cc_dim2) * 
01030                 cc_dim1] - tr1;
01031         ch[((k << 2) + 2) * ch_dim1 + 1] = ti1 - cc[*ido + (k + cc_dim2 * 3) *
01032                  cc_dim1];
01033         ch[((k << 2) + 4) * ch_dim1 + 1] = ti1 + cc[*ido + (k + cc_dim2 * 3) *
01034                  cc_dim1];
01035 /* L106: */
01036     }
01037 L107:
01038     return 0;
01039 } /* radf4_ */
01040 
01041 /* Subroutine */ int rfftb_(integer *n, doublereal *r__, doublereal *wsave)
01042 {
01043     extern /* Subroutine */ int rfftb1_(integer *, doublereal *, doublereal *,
01044              doublereal *, doublereal *);
01045 
01046 /* ----------------------------TJW */
01047 /* ----------------------------TJW */
01048     /* Parameter adjustments */
01049     --wsave;
01050     --r__;
01051 
01052     /* Function Body */
01053     if (*n == 1) {
01054         return 0;
01055     }
01056     rfftb1_(n, &r__[1], &wsave[1], &wsave[*n + 1], &wsave[(*n << 1) + 1]);
01057     return 0;
01058 } /* rfftb_ */
01059 
01060 /* Subroutine */ int rfftb1_(integer *n, doublereal *c__, doublereal *ch, 
01061         doublereal *wa, integer *ifac)
01062 {
01063     /* System generated locals */
01064     integer i__1;
01065 
01066     /* Local variables */
01067     extern /* Subroutine */ int radb2_(integer *, integer *, doublereal *, 
01068             doublereal *, doublereal *), radb3_(integer *, integer *, 
01069             doublereal *, doublereal *, doublereal *, doublereal *), radb4_(
01070             integer *, integer *, doublereal *, doublereal *, doublereal *, 
01071             doublereal *, doublereal *), radb5_(integer *, integer *, 
01072             doublereal *, doublereal *, doublereal *, doublereal *, 
01073             doublereal *, doublereal *);
01074     static integer i__;
01075     extern /* Subroutine */ int radbg_(integer *, integer *, integer *, 
01076             integer *, doublereal *, doublereal *, doublereal *, doublereal *,
01077              doublereal *, doublereal *);
01078     static integer k1, l1, l2, na, nf, ip, iw, ix2, ix3, ix4, ido, idl1;
01079 
01080 /* ----------------------------TJW */
01081 /* ----------------------------TJW */
01082     /* Parameter adjustments */
01083     --ifac;
01084     --wa;
01085     --ch;
01086     --c__;
01087 
01088     /* Function Body */
01089     nf = ifac[2];
01090     na = 0;
01091     l1 = 1;
01092     iw = 1;
01093     i__1 = nf;
01094     for (k1 = 1; k1 <= i__1; ++k1) {
01095         ip = ifac[k1 + 2];
01096         l2 = ip * l1;
01097         ido = *n / l2;
01098         idl1 = ido * l1;
01099         if (ip != 4) {
01100             goto L103;
01101         }
01102         ix2 = iw + ido;
01103         ix3 = ix2 + ido;
01104         if (na != 0) {
01105             goto L101;
01106         }
01107         radb4_(&ido, &l1, &c__[1], &ch[1], &wa[iw], &wa[ix2], &wa[ix3]);
01108         goto L102;
01109 L101:
01110         radb4_(&ido, &l1, &ch[1], &c__[1], &wa[iw], &wa[ix2], &wa[ix3]);
01111 L102:
01112         na = 1 - na;
01113         goto L115;
01114 L103:
01115         if (ip != 2) {
01116             goto L106;
01117         }
01118         if (na != 0) {
01119             goto L104;
01120         }
01121         radb2_(&ido, &l1, &c__[1], &ch[1], &wa[iw]);
01122         goto L105;
01123 L104:
01124         radb2_(&ido, &l1, &ch[1], &c__[1], &wa[iw]);
01125 L105:
01126         na = 1 - na;
01127         goto L115;
01128 L106:
01129         if (ip != 3) {
01130             goto L109;
01131         }
01132         ix2 = iw + ido;
01133         if (na != 0) {
01134             goto L107;
01135         }
01136         radb3_(&ido, &l1, &c__[1], &ch[1], &wa[iw], &wa[ix2]);
01137         goto L108;
01138 L107:
01139         radb3_(&ido, &l1, &ch[1], &c__[1], &wa[iw], &wa[ix2]);
01140 L108:
01141         na = 1 - na;
01142         goto L115;
01143 L109:
01144         if (ip != 5) {
01145             goto L112;
01146         }
01147         ix2 = iw + ido;
01148         ix3 = ix2 + ido;
01149         ix4 = ix3 + ido;
01150         if (na != 0) {
01151             goto L110;
01152         }
01153         radb5_(&ido, &l1, &c__[1], &ch[1], &wa[iw], &wa[ix2], &wa[ix3], &wa[
01154                 ix4]);
01155         goto L111;
01156 L110:
01157         radb5_(&ido, &l1, &ch[1], &c__[1], &wa[iw], &wa[ix2], &wa[ix3], &wa[
01158                 ix4]);
01159 L111:
01160         na = 1 - na;
01161         goto L115;
01162 L112:
01163         if (na != 0) {
01164             goto L113;
01165         }
01166         radbg_(&ido, &ip, &l1, &idl1, &c__[1], &c__[1], &c__[1], &ch[1], &ch[
01167                 1], &wa[iw]);
01168         goto L114;
01169 L113:
01170         radbg_(&ido, &ip, &l1, &idl1, &ch[1], &ch[1], &ch[1], &c__[1], &c__[1]
01171                 , &wa[iw]);
01172 L114:
01173         if (ido == 1) {
01174             na = 1 - na;
01175         }
01176 L115:
01177         l1 = l2;
01178         iw += (ip - 1) * ido;
01179 /* L116: */
01180     }
01181     if (na == 0) {
01182         return 0;
01183     }
01184     i__1 = *n;
01185     for (i__ = 1; i__ <= i__1; ++i__) {
01186         c__[i__] = ch[i__];
01187 /* L117: */
01188     }
01189     return 0;
01190 } /* rfftb1_ */
01191 
01192 /* Subroutine */ int radbg_(integer *ido, integer *ip, integer *l1, integer *
01193         idl1, doublereal *cc, doublereal *c1, doublereal *c2, doublereal *ch, 
01194         doublereal *ch2, doublereal *wa)
01195 {
01196     /* Initialized data */
01197 
01198     static doublereal tpi = 6.28318530717959;
01199 
01200     /* System generated locals */
01201     integer ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1,
01202              c1_dim2, c1_offset, c2_dim1, c2_offset, ch2_dim1, ch2_offset, 
01203             i__1, i__2, i__3;
01204 
01205     /* Builtin functions */
01206     double cos(doublereal), sin(doublereal);
01207 
01208     /* Local variables */
01209     static integer idij, ipph, i__, j, k, l, j2, ic, jc, lc, ik, is;
01210     static doublereal dc2, ai1, ai2, ar1, ar2, ds2;
01211     static integer nbd;
01212     static doublereal dcp, arg, dsp, ar1h, ar2h;
01213     static integer idp2, ipp2;
01214 
01215 /* ----------------------------TJW */
01216 /* ----------------------------TJW */
01217     /* Parameter adjustments */
01218     ch_dim1 = *ido;
01219     ch_dim2 = *l1;
01220     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
01221     ch -= ch_offset;
01222     c1_dim1 = *ido;
01223     c1_dim2 = *l1;
01224     c1_offset = c1_dim1 * (c1_dim2 + 1) + 1;
01225     c1 -= c1_offset;
01226     cc_dim1 = *ido;
01227     cc_dim2 = *ip;
01228     cc_offset = cc_dim1 * (cc_dim2 + 1) + 1;
01229     cc -= cc_offset;
01230     ch2_dim1 = *idl1;
01231     ch2_offset = ch2_dim1 + 1;
01232     ch2 -= ch2_offset;
01233     c2_dim1 = *idl1;
01234     c2_offset = c2_dim1 + 1;
01235     c2 -= c2_offset;
01236     --wa;
01237 
01238     /* Function Body */
01239     arg = tpi / (real) (*ip);
01240     dcp = cos(arg);
01241     dsp = sin(arg);
01242     idp2 = *ido + 2;
01243     nbd = (*ido - 1) / 2;
01244     ipp2 = *ip + 2;
01245     ipph = (*ip + 1) / 2;
01246     if (*ido < *l1) {
01247         goto L103;
01248     }
01249     i__1 = *l1;
01250     for (k = 1; k <= i__1; ++k) {
01251         i__2 = *ido;
01252         for (i__ = 1; i__ <= i__2; ++i__) {
01253             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * cc_dim2 + 1) * 
01254                     cc_dim1];
01255 /* L101: */
01256         }
01257 /* L102: */
01258     }
01259     goto L106;
01260 L103:
01261     i__1 = *ido;
01262     for (i__ = 1; i__ <= i__1; ++i__) {
01263         i__2 = *l1;
01264         for (k = 1; k <= i__2; ++k) {
01265             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * cc_dim2 + 1) * 
01266                     cc_dim1];
01267 /* L104: */
01268         }
01269 /* L105: */
01270     }
01271 L106:
01272     i__1 = ipph;
01273     for (j = 2; j <= i__1; ++j) {
01274         jc = ipp2 - j;
01275         j2 = j + j;
01276         i__2 = *l1;
01277         for (k = 1; k <= i__2; ++k) {
01278             ch[(k + j * ch_dim2) * ch_dim1 + 1] = cc[*ido + (j2 - 2 + k * 
01279                     cc_dim2) * cc_dim1] + cc[*ido + (j2 - 2 + k * cc_dim2) * 
01280                     cc_dim1];
01281             ch[(k + jc * ch_dim2) * ch_dim1 + 1] = cc[(j2 - 1 + k * cc_dim2) *
01282                      cc_dim1 + 1] + cc[(j2 - 1 + k * cc_dim2) * cc_dim1 + 1];
01283 /* L107: */
01284         }
01285 /* L108: */
01286     }
01287     if (*ido == 1) {
01288         goto L116;
01289     }
01290     if (nbd < *l1) {
01291         goto L112;
01292     }
01293     i__1 = ipph;
01294     for (j = 2; j <= i__1; ++j) {
01295         jc = ipp2 - j;
01296         i__2 = *l1;
01297         for (k = 1; k <= i__2; ++k) {
01298             i__3 = *ido;
01299             for (i__ = 3; i__ <= i__3; i__ += 2) {
01300                 ic = idp2 - i__;
01301                 ch[i__ - 1 + (k + j * ch_dim2) * ch_dim1] = cc[i__ - 1 + ((j 
01302                         << 1) - 1 + k * cc_dim2) * cc_dim1] + cc[ic - 1 + ((j 
01303                         << 1) - 2 + k * cc_dim2) * cc_dim1];
01304                 ch[i__ - 1 + (k + jc * ch_dim2) * ch_dim1] = cc[i__ - 1 + ((j 
01305                         << 1) - 1 + k * cc_dim2) * cc_dim1] - cc[ic - 1 + ((j 
01306                         << 1) - 2 + k * cc_dim2) * cc_dim1];
01307                 ch[i__ + (k + j * ch_dim2) * ch_dim1] = cc[i__ + ((j << 1) - 
01308                         1 + k * cc_dim2) * cc_dim1] - cc[ic + ((j << 1) - 2 + 
01309                         k * cc_dim2) * cc_dim1];
01310                 ch[i__ + (k + jc * ch_dim2) * ch_dim1] = cc[i__ + ((j << 1) - 
01311                         1 + k * cc_dim2) * cc_dim1] + cc[ic + ((j << 1) - 2 + 
01312                         k * cc_dim2) * cc_dim1];
01313 /* L109: */
01314             }
01315 /* L110: */
01316         }
01317 /* L111: */
01318     }
01319     goto L116;
01320 L112:
01321     i__1 = ipph;
01322     for (j = 2; j <= i__1; ++j) {
01323         jc = ipp2 - j;
01324         i__2 = *ido;
01325         for (i__ = 3; i__ <= i__2; i__ += 2) {
01326             ic = idp2 - i__;
01327             i__3 = *l1;
01328             for (k = 1; k <= i__3; ++k) {
01329                 ch[i__ - 1 + (k + j * ch_dim2) * ch_dim1] = cc[i__ - 1 + ((j 
01330                         << 1) - 1 + k * cc_dim2) * cc_dim1] + cc[ic - 1 + ((j 
01331                         << 1) - 2 + k * cc_dim2) * cc_dim1];
01332                 ch[i__ - 1 + (k + jc * ch_dim2) * ch_dim1] = cc[i__ - 1 + ((j 
01333                         << 1) - 1 + k * cc_dim2) * cc_dim1] - cc[ic - 1 + ((j 
01334                         << 1) - 2 + k * cc_dim2) * cc_dim1];
01335                 ch[i__ + (k + j * ch_dim2) * ch_dim1] = cc[i__ + ((j << 1) - 
01336                         1 + k * cc_dim2) * cc_dim1] - cc[ic + ((j << 1) - 2 + 
01337                         k * cc_dim2) * cc_dim1];
01338                 ch[i__ + (k + jc * ch_dim2) * ch_dim1] = cc[i__ + ((j << 1) - 
01339                         1 + k * cc_dim2) * cc_dim1] + cc[ic + ((j << 1) - 2 + 
01340                         k * cc_dim2) * cc_dim1];
01341 /* L113: */
01342             }
01343 /* L114: */
01344         }
01345 /* L115: */
01346     }
01347 L116:
01348     ar1 = (float)1.;
01349     ai1 = (float)0.;
01350     i__1 = ipph;
01351     for (l = 2; l <= i__1; ++l) {
01352         lc = ipp2 - l;
01353         ar1h = dcp * ar1 - dsp * ai1;
01354         ai1 = dcp * ai1 + dsp * ar1;
01355         ar1 = ar1h;
01356         i__2 = *idl1;
01357         for (ik = 1; ik <= i__2; ++ik) {
01358             c2[ik + l * c2_dim1] = ch2[ik + ch2_dim1] + ar1 * ch2[ik + (
01359                     ch2_dim1 << 1)];
01360             c2[ik + lc * c2_dim1] = ai1 * ch2[ik + *ip * ch2_dim1];
01361 /* L117: */
01362         }
01363         dc2 = ar1;
01364         ds2 = ai1;
01365         ar2 = ar1;
01366         ai2 = ai1;
01367         i__2 = ipph;
01368         for (j = 3; j <= i__2; ++j) {
01369             jc = ipp2 - j;
01370             ar2h = dc2 * ar2 - ds2 * ai2;
01371             ai2 = dc2 * ai2 + ds2 * ar2;
01372             ar2 = ar2h;
01373             i__3 = *idl1;
01374             for (ik = 1; ik <= i__3; ++ik) {
01375                 c2[ik + l * c2_dim1] += ar2 * ch2[ik + j * ch2_dim1];
01376                 c2[ik + lc * c2_dim1] += ai2 * ch2[ik + jc * ch2_dim1];
01377 /* L118: */
01378             }
01379 /* L119: */
01380         }
01381 /* L120: */
01382     }
01383     i__1 = ipph;
01384     for (j = 2; j <= i__1; ++j) {
01385         i__2 = *idl1;
01386         for (ik = 1; ik <= i__2; ++ik) {
01387             ch2[ik + ch2_dim1] += ch2[ik + j * ch2_dim1];
01388 /* L121: */
01389         }
01390 /* L122: */
01391     }
01392     i__1 = ipph;
01393     for (j = 2; j <= i__1; ++j) {
01394         jc = ipp2 - j;
01395         i__2 = *l1;
01396         for (k = 1; k <= i__2; ++k) {
01397             ch[(k + j * ch_dim2) * ch_dim1 + 1] = c1[(k + j * c1_dim2) * 
01398                     c1_dim1 + 1] - c1[(k + jc * c1_dim2) * c1_dim1 + 1];
01399             ch[(k + jc * ch_dim2) * ch_dim1 + 1] = c1[(k + j * c1_dim2) * 
01400                     c1_dim1 + 1] + c1[(k + jc * c1_dim2) * c1_dim1 + 1];
01401 /* L123: */
01402         }
01403 /* L124: */
01404     }
01405     if (*ido == 1) {
01406         goto L132;
01407     }
01408     if (nbd < *l1) {
01409         goto L128;
01410     }
01411     i__1 = ipph;
01412     for (j = 2; j <= i__1; ++j) {
01413         jc = ipp2 - j;
01414         i__2 = *l1;
01415         for (k = 1; k <= i__2; ++k) {
01416             i__3 = *ido;
01417             for (i__ = 3; i__ <= i__3; i__ += 2) {
01418                 ch[i__ - 1 + (k + j * ch_dim2) * ch_dim1] = c1[i__ - 1 + (k + 
01419                         j * c1_dim2) * c1_dim1] - c1[i__ + (k + jc * c1_dim2) 
01420                         * c1_dim1];
01421                 ch[i__ - 1 + (k + jc * ch_dim2) * ch_dim1] = c1[i__ - 1 + (k 
01422                         + j * c1_dim2) * c1_dim1] + c1[i__ + (k + jc * 
01423                         c1_dim2) * c1_dim1];
01424                 ch[i__ + (k + j * ch_dim2) * ch_dim1] = c1[i__ + (k + j * 
01425                         c1_dim2) * c1_dim1] + c1[i__ - 1 + (k + jc * c1_dim2) 
01426                         * c1_dim1];
01427                 ch[i__ + (k + jc * ch_dim2) * ch_dim1] = c1[i__ + (k + j * 
01428                         c1_dim2) * c1_dim1] - c1[i__ - 1 + (k + jc * c1_dim2) 
01429                         * c1_dim1];
01430 /* L125: */
01431             }
01432 /* L126: */
01433         }
01434 /* L127: */
01435     }
01436     goto L132;
01437 L128:
01438     i__1 = ipph;
01439     for (j = 2; j <= i__1; ++j) {
01440         jc = ipp2 - j;
01441         i__2 = *ido;
01442         for (i__ = 3; i__ <= i__2; i__ += 2) {
01443             i__3 = *l1;
01444             for (k = 1; k <= i__3; ++k) {
01445                 ch[i__ - 1 + (k + j * ch_dim2) * ch_dim1] = c1[i__ - 1 + (k + 
01446                         j * c1_dim2) * c1_dim1] - c1[i__ + (k + jc * c1_dim2) 
01447                         * c1_dim1];
01448                 ch[i__ - 1 + (k + jc * ch_dim2) * ch_dim1] = c1[i__ - 1 + (k 
01449                         + j * c1_dim2) * c1_dim1] + c1[i__ + (k + jc * 
01450                         c1_dim2) * c1_dim1];
01451                 ch[i__ + (k + j * ch_dim2) * ch_dim1] = c1[i__ + (k + j * 
01452                         c1_dim2) * c1_dim1] + c1[i__ - 1 + (k + jc * c1_dim2) 
01453                         * c1_dim1];
01454                 ch[i__ + (k + jc * ch_dim2) * ch_dim1] = c1[i__ + (k + j * 
01455                         c1_dim2) * c1_dim1] - c1[i__ - 1 + (k + jc * c1_dim2) 
01456                         * c1_dim1];
01457 /* L129: */
01458             }
01459 /* L130: */
01460         }
01461 /* L131: */
01462     }
01463 L132:
01464     if (*ido == 1) {
01465         return 0;
01466     }
01467     i__1 = *idl1;
01468     for (ik = 1; ik <= i__1; ++ik) {
01469         c2[ik + c2_dim1] = ch2[ik + ch2_dim1];
01470 /* L133: */
01471     }
01472     i__1 = *ip;
01473     for (j = 2; j <= i__1; ++j) {
01474         i__2 = *l1;
01475         for (k = 1; k <= i__2; ++k) {
01476             c1[(k + j * c1_dim2) * c1_dim1 + 1] = ch[(k + j * ch_dim2) * 
01477                     ch_dim1 + 1];
01478 /* L134: */
01479         }
01480 /* L135: */
01481     }
01482     if (nbd > *l1) {
01483         goto L139;
01484     }
01485     is = -(*ido);
01486     i__1 = *ip;
01487     for (j = 2; j <= i__1; ++j) {
01488         is += *ido;
01489         idij = is;
01490         i__2 = *ido;
01491         for (i__ = 3; i__ <= i__2; i__ += 2) {
01492             idij += 2;
01493             i__3 = *l1;
01494             for (k = 1; k <= i__3; ++k) {
01495                 c1[i__ - 1 + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[
01496                         i__ - 1 + (k + j * ch_dim2) * ch_dim1] - wa[idij] * 
01497                         ch[i__ + (k + j * ch_dim2) * ch_dim1];
01498                 c1[i__ + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[i__ 
01499                         + (k + j * ch_dim2) * ch_dim1] + wa[idij] * ch[i__ - 
01500                         1 + (k + j * ch_dim2) * ch_dim1];
01501 /* L136: */
01502             }
01503 /* L137: */
01504         }
01505 /* L138: */
01506     }
01507     goto L143;
01508 L139:
01509     is = -(*ido);
01510     i__1 = *ip;
01511     for (j = 2; j <= i__1; ++j) {
01512         is += *ido;
01513         i__2 = *l1;
01514         for (k = 1; k <= i__2; ++k) {
01515             idij = is;
01516             i__3 = *ido;
01517             for (i__ = 3; i__ <= i__3; i__ += 2) {
01518                 idij += 2;
01519                 c1[i__ - 1 + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[
01520                         i__ - 1 + (k + j * ch_dim2) * ch_dim1] - wa[idij] * 
01521                         ch[i__ + (k + j * ch_dim2) * ch_dim1];
01522                 c1[i__ + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[i__ 
01523                         + (k + j * ch_dim2) * ch_dim1] + wa[idij] * ch[i__ - 
01524                         1 + (k + j * ch_dim2) * ch_dim1];
01525 /* L140: */
01526             }
01527 /* L141: */
01528         }
01529 /* L142: */
01530     }
01531 L143:
01532     return 0;
01533 } /* radbg_ */
01534 
01535 /* Subroutine */ int radb5_(integer *ido, integer *l1, doublereal *cc, 
01536         doublereal *ch, doublereal *wa1, doublereal *wa2, doublereal *wa3, 
01537         doublereal *wa4)
01538 {
01539     /* Initialized data */
01540 
01541     static doublereal tr11 = .309016994374947;
01542     static doublereal ti11 = .951056516295154;
01543     static doublereal tr12 = -.809016994374947;
01544     static doublereal ti12 = .587785252292473;
01545 
01546     /* System generated locals */
01547     integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
01548 
01549     /* Local variables */
01550     static integer i__, k, ic;
01551     static doublereal ci2, ci3, ci4, ci5, di3, di4, di5, di2, cr2, cr3, cr5, 
01552             cr4, ti2, ti3, ti4, ti5, dr3, dr4, dr5, dr2, tr2, tr3, tr4, tr5;
01553     static integer idp2;
01554 
01555 /* ----------------------------TJW */
01556 /* ----------------------------TJW */
01557     /* Parameter adjustments */
01558     ch_dim1 = *ido;
01559     ch_dim2 = *l1;
01560     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
01561     ch -= ch_offset;
01562     cc_dim1 = *ido;
01563     cc_offset = cc_dim1 * 6 + 1;
01564     cc -= cc_offset;
01565     --wa1;
01566     --wa2;
01567     --wa3;
01568     --wa4;
01569 
01570     /* Function Body */
01571     i__1 = *l1;
01572     for (k = 1; k <= i__1; ++k) {
01573         ti5 = cc[(k * 5 + 3) * cc_dim1 + 1] + cc[(k * 5 + 3) * cc_dim1 + 1];
01574         ti4 = cc[(k * 5 + 5) * cc_dim1 + 1] + cc[(k * 5 + 5) * cc_dim1 + 1];
01575         tr2 = cc[*ido + (k * 5 + 2) * cc_dim1] + cc[*ido + (k * 5 + 2) * 
01576                 cc_dim1];
01577         tr3 = cc[*ido + (k * 5 + 4) * cc_dim1] + cc[*ido + (k * 5 + 4) * 
01578                 cc_dim1];
01579         ch[(k + ch_dim2) * ch_dim1 + 1] = cc[(k * 5 + 1) * cc_dim1 + 1] + tr2 
01580                 + tr3;
01581         cr2 = cc[(k * 5 + 1) * cc_dim1 + 1] + tr11 * tr2 + tr12 * tr3;
01582         cr3 = cc[(k * 5 + 1) * cc_dim1 + 1] + tr12 * tr2 + tr11 * tr3;
01583         ci5 = ti11 * ti5 + ti12 * ti4;
01584         ci4 = ti12 * ti5 - ti11 * ti4;
01585         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = cr2 - ci5;
01586         ch[(k + ch_dim2 * 3) * ch_dim1 + 1] = cr3 - ci4;
01587         ch[(k + (ch_dim2 << 2)) * ch_dim1 + 1] = cr3 + ci4;
01588         ch[(k + ch_dim2 * 5) * ch_dim1 + 1] = cr2 + ci5;
01589 /* L101: */
01590     }
01591     if (*ido == 1) {
01592         return 0;
01593     }
01594     idp2 = *ido + 2;
01595     i__1 = *l1;
01596     for (k = 1; k <= i__1; ++k) {
01597         i__2 = *ido;
01598         for (i__ = 3; i__ <= i__2; i__ += 2) {
01599             ic = idp2 - i__;
01600             ti5 = cc[i__ + (k * 5 + 3) * cc_dim1] + cc[ic + (k * 5 + 2) * 
01601                     cc_dim1];
01602             ti2 = cc[i__ + (k * 5 + 3) * cc_dim1] - cc[ic + (k * 5 + 2) * 
01603                     cc_dim1];
01604             ti4 = cc[i__ + (k * 5 + 5) * cc_dim1] + cc[ic + (k * 5 + 4) * 
01605                     cc_dim1];
01606             ti3 = cc[i__ + (k * 5 + 5) * cc_dim1] - cc[ic + (k * 5 + 4) * 
01607                     cc_dim1];
01608             tr5 = cc[i__ - 1 + (k * 5 + 3) * cc_dim1] - cc[ic - 1 + (k * 5 + 
01609                     2) * cc_dim1];
01610             tr2 = cc[i__ - 1 + (k * 5 + 3) * cc_dim1] + cc[ic - 1 + (k * 5 + 
01611                     2) * cc_dim1];
01612             tr4 = cc[i__ - 1 + (k * 5 + 5) * cc_dim1] - cc[ic - 1 + (k * 5 + 
01613                     4) * cc_dim1];
01614             tr3 = cc[i__ - 1 + (k * 5 + 5) * cc_dim1] + cc[ic - 1 + (k * 5 + 
01615                     4) * cc_dim1];
01616             ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = cc[i__ - 1 + (k * 5 + 1) *
01617                      cc_dim1] + tr2 + tr3;
01618             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * 5 + 1) * 
01619                     cc_dim1] + ti2 + ti3;
01620             cr2 = cc[i__ - 1 + (k * 5 + 1) * cc_dim1] + tr11 * tr2 + tr12 * 
01621                     tr3;
01622             ci2 = cc[i__ + (k * 5 + 1) * cc_dim1] + tr11 * ti2 + tr12 * ti3;
01623             cr3 = cc[i__ - 1 + (k * 5 + 1) * cc_dim1] + tr12 * tr2 + tr11 * 
01624                     tr3;
01625             ci3 = cc[i__ + (k * 5 + 1) * cc_dim1] + tr12 * ti2 + tr11 * ti3;
01626             cr5 = ti11 * tr5 + ti12 * tr4;
01627             ci5 = ti11 * ti5 + ti12 * ti4;
01628             cr4 = ti12 * tr5 - ti11 * tr4;
01629             ci4 = ti12 * ti5 - ti11 * ti4;
01630             dr3 = cr3 - ci4;
01631             dr4 = cr3 + ci4;
01632             di3 = ci3 + cr4;
01633             di4 = ci3 - cr4;
01634             dr5 = cr2 + ci5;
01635             dr2 = cr2 - ci5;
01636             di5 = ci2 - cr5;
01637             di2 = ci2 + cr5;
01638             ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 2] * dr2 
01639                     - wa1[i__ - 1] * di2;
01640             ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 2] * di2 + 
01641                     wa1[i__ - 1] * dr2;
01642             ch[i__ - 1 + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 2] * dr3 - 
01643                     wa2[i__ - 1] * di3;
01644             ch[i__ + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 2] * di3 + wa2[
01645                     i__ - 1] * dr3;
01646             ch[i__ - 1 + (k + (ch_dim2 << 2)) * ch_dim1] = wa3[i__ - 2] * dr4 
01647                     - wa3[i__ - 1] * di4;
01648             ch[i__ + (k + (ch_dim2 << 2)) * ch_dim1] = wa3[i__ - 2] * di4 + 
01649                     wa3[i__ - 1] * dr4;
01650             ch[i__ - 1 + (k + ch_dim2 * 5) * ch_dim1] = wa4[i__ - 2] * dr5 - 
01651                     wa4[i__ - 1] * di5;
01652             ch[i__ + (k + ch_dim2 * 5) * ch_dim1] = wa4[i__ - 2] * di5 + wa4[
01653                     i__ - 1] * dr5;
01654 /* L102: */
01655         }
01656 /* L103: */
01657     }
01658     return 0;
01659 } /* radb5_ */
01660 
01661 /* Subroutine */ int radb3_(integer *ido, integer *l1, doublereal *cc, 
01662         doublereal *ch, doublereal *wa1, doublereal *wa2)
01663 {
01664     /* Initialized data */
01665 
01666     static doublereal taur = -.5;
01667     static doublereal taui = .866025403784439;
01668 
01669     /* System generated locals */
01670     integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
01671 
01672     /* Local variables */
01673     static integer i__, k, ic;
01674     static doublereal ci2, ci3, di2, di3, cr2, cr3, dr2, dr3, ti2, tr2;
01675     static integer idp2;
01676 
01677 /* ----------------------------TJW */
01678 /* ----------------------------TJW */
01679     /* Parameter adjustments */
01680     ch_dim1 = *ido;
01681     ch_dim2 = *l1;
01682     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
01683     ch -= ch_offset;
01684     cc_dim1 = *ido;
01685     cc_offset = (cc_dim1 << 2) + 1;
01686     cc -= cc_offset;
01687     --wa1;
01688     --wa2;
01689 
01690     /* Function Body */
01691     i__1 = *l1;
01692     for (k = 1; k <= i__1; ++k) {
01693         tr2 = cc[*ido + (k * 3 + 2) * cc_dim1] + cc[*ido + (k * 3 + 2) * 
01694                 cc_dim1];
01695         cr2 = cc[(k * 3 + 1) * cc_dim1 + 1] + taur * tr2;
01696         ch[(k + ch_dim2) * ch_dim1 + 1] = cc[(k * 3 + 1) * cc_dim1 + 1] + tr2;
01697         ci3 = taui * (cc[(k * 3 + 3) * cc_dim1 + 1] + cc[(k * 3 + 3) * 
01698                 cc_dim1 + 1]);
01699         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = cr2 - ci3;
01700         ch[(k + ch_dim2 * 3) * ch_dim1 + 1] = cr2 + ci3;
01701 /* L101: */
01702     }
01703     if (*ido == 1) {
01704         return 0;
01705     }
01706     idp2 = *ido + 2;
01707     i__1 = *l1;
01708     for (k = 1; k <= i__1; ++k) {
01709         i__2 = *ido;
01710         for (i__ = 3; i__ <= i__2; i__ += 2) {
01711             ic = idp2 - i__;
01712             tr2 = cc[i__ - 1 + (k * 3 + 3) * cc_dim1] + cc[ic - 1 + (k * 3 + 
01713                     2) * cc_dim1];
01714             cr2 = cc[i__ - 1 + (k * 3 + 1) * cc_dim1] + taur * tr2;
01715             ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = cc[i__ - 1 + (k * 3 + 1) *
01716                      cc_dim1] + tr2;
01717             ti2 = cc[i__ + (k * 3 + 3) * cc_dim1] - cc[ic + (k * 3 + 2) * 
01718                     cc_dim1];
01719             ci2 = cc[i__ + (k * 3 + 1) * cc_dim1] + taur * ti2;
01720             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * 3 + 1) * 
01721                     cc_dim1] + ti2;
01722             cr3 = taui * (cc[i__ - 1 + (k * 3 + 3) * cc_dim1] - cc[ic - 1 + (
01723                     k * 3 + 2) * cc_dim1]);
01724             ci3 = taui * (cc[i__ + (k * 3 + 3) * cc_dim1] + cc[ic + (k * 3 + 
01725                     2) * cc_dim1]);
01726             dr2 = cr2 - ci3;
01727             dr3 = cr2 + ci3;
01728             di2 = ci2 + cr3;
01729             di3 = ci2 - cr3;
01730             ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 2] * dr2 
01731                     - wa1[i__ - 1] * di2;
01732             ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 2] * di2 + 
01733                     wa1[i__ - 1] * dr2;
01734             ch[i__ - 1 + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 2] * dr3 - 
01735                     wa2[i__ - 1] * di3;
01736             ch[i__ + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 2] * di3 + wa2[
01737                     i__ - 1] * dr3;
01738 /* L102: */
01739         }
01740 /* L103: */
01741     }
01742     return 0;
01743 } /* radb3_ */
01744 
01745 /* Subroutine */ int radb2_(integer *ido, integer *l1, doublereal *cc, 
01746         doublereal *ch, doublereal *wa1)
01747 {
01748     /* System generated locals */
01749     integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
01750 
01751     /* Local variables */
01752     static integer i__, k, ic;
01753     static doublereal ti2, tr2;
01754     static integer idp2;
01755 
01756 /* ----------------------------TJW */
01757 /* ----------------------------TJW */
01758     /* Parameter adjustments */
01759     ch_dim1 = *ido;
01760     ch_dim2 = *l1;
01761     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
01762     ch -= ch_offset;
01763     cc_dim1 = *ido;
01764     cc_offset = cc_dim1 * 3 + 1;
01765     cc -= cc_offset;
01766     --wa1;
01767 
01768     /* Function Body */
01769     i__1 = *l1;
01770     for (k = 1; k <= i__1; ++k) {
01771         ch[(k + ch_dim2) * ch_dim1 + 1] = cc[((k << 1) + 1) * cc_dim1 + 1] + 
01772                 cc[*ido + ((k << 1) + 2) * cc_dim1];
01773         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = cc[((k << 1) + 1) * cc_dim1 
01774                 + 1] - cc[*ido + ((k << 1) + 2) * cc_dim1];
01775 /* L101: */
01776     }
01777     if ((i__1 = *ido - 2) < 0) {
01778         goto L107;
01779     } else if (i__1 == 0) {
01780         goto L105;
01781     } else {
01782         goto L102;
01783     }
01784 L102:
01785     idp2 = *ido + 2;
01786     i__1 = *l1;
01787     for (k = 1; k <= i__1; ++k) {
01788         i__2 = *ido;
01789         for (i__ = 3; i__ <= i__2; i__ += 2) {
01790             ic = idp2 - i__;
01791             ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = cc[i__ - 1 + ((k << 1) + 
01792                     1) * cc_dim1] + cc[ic - 1 + ((k << 1) + 2) * cc_dim1];
01793             tr2 = cc[i__ - 1 + ((k << 1) + 1) * cc_dim1] - cc[ic - 1 + ((k << 
01794                     1) + 2) * cc_dim1];
01795             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + ((k << 1) + 1) * 
01796                     cc_dim1] - cc[ic + ((k << 1) + 2) * cc_dim1];
01797             ti2 = cc[i__ + ((k << 1) + 1) * cc_dim1] + cc[ic + ((k << 1) + 2) 
01798                     * cc_dim1];
01799             ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 2] * tr2 
01800                     - wa1[i__ - 1] * ti2;
01801             ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 2] * ti2 + 
01802                     wa1[i__ - 1] * tr2;
01803 /* L103: */
01804         }
01805 /* L104: */
01806     }
01807     if (*ido % 2 == 1) {
01808         return 0;
01809     }
01810 L105:
01811     i__1 = *l1;
01812     for (k = 1; k <= i__1; ++k) {
01813         ch[*ido + (k + ch_dim2) * ch_dim1] = cc[*ido + ((k << 1) + 1) * 
01814                 cc_dim1] + cc[*ido + ((k << 1) + 1) * cc_dim1];
01815         ch[*ido + (k + (ch_dim2 << 1)) * ch_dim1] = -(cc[((k << 1) + 2) * 
01816                 cc_dim1 + 1] + cc[((k << 1) + 2) * cc_dim1 + 1]);
01817 /* L106: */
01818     }
01819 L107:
01820     return 0;
01821 } /* radb2_ */
01822 
01823 /* Subroutine */ int radb4_(integer *ido, integer *l1, doublereal *cc, 
01824         doublereal *ch, doublereal *wa1, doublereal *wa2, doublereal *wa3)
01825 {
01826     /* Initialized data */
01827 
01828     static doublereal sqrt2 = 1.414213562373095;
01829 
01830     /* System generated locals */
01831     integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
01832 
01833     /* Local variables */
01834     static integer i__, k, ic;
01835     static doublereal ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, 
01836             tr2, tr3, tr4;
01837     static integer idp2;
01838 
01839 /* ----------------------------TJW */
01840 /* ----------------------------TJW */
01841     /* Parameter adjustments */
01842     ch_dim1 = *ido;
01843     ch_dim2 = *l1;
01844     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
01845     ch -= ch_offset;
01846     cc_dim1 = *ido;
01847     cc_offset = cc_dim1 * 5 + 1;
01848     cc -= cc_offset;
01849     --wa1;
01850     --wa2;
01851     --wa3;
01852 
01853     /* Function Body */
01854     i__1 = *l1;
01855     for (k = 1; k <= i__1; ++k) {
01856         tr1 = cc[((k << 2) + 1) * cc_dim1 + 1] - cc[*ido + ((k << 2) + 4) * 
01857                 cc_dim1];
01858         tr2 = cc[((k << 2) + 1) * cc_dim1 + 1] + cc[*ido + ((k << 2) + 4) * 
01859                 cc_dim1];
01860         tr3 = cc[*ido + ((k << 2) + 2) * cc_dim1] + cc[*ido + ((k << 2) + 2) *
01861                  cc_dim1];
01862         tr4 = cc[((k << 2) + 3) * cc_dim1 + 1] + cc[((k << 2) + 3) * cc_dim1 
01863                 + 1];
01864         ch[(k + ch_dim2) * ch_dim1 + 1] = tr2 + tr3;
01865         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = tr1 - tr4;
01866         ch[(k + ch_dim2 * 3) * ch_dim1 + 1] = tr2 - tr3;
01867         ch[(k + (ch_dim2 << 2)) * ch_dim1 + 1] = tr1 + tr4;
01868 /* L101: */
01869     }
01870     if ((i__1 = *ido - 2) < 0) {
01871         goto L107;
01872     } else if (i__1 == 0) {
01873         goto L105;
01874     } else {
01875         goto L102;
01876     }
01877 L102:
01878     idp2 = *ido + 2;
01879     i__1 = *l1;
01880     for (k = 1; k <= i__1; ++k) {
01881         i__2 = *ido;
01882         for (i__ = 3; i__ <= i__2; i__ += 2) {
01883             ic = idp2 - i__;
01884             ti1 = cc[i__ + ((k << 2) + 1) * cc_dim1] + cc[ic + ((k << 2) + 4) 
01885                     * cc_dim1];
01886             ti2 = cc[i__ + ((k << 2) + 1) * cc_dim1] - cc[ic + ((k << 2) + 4) 
01887                     * cc_dim1];
01888             ti3 = cc[i__ + ((k << 2) + 3) * cc_dim1] - cc[ic + ((k << 2) + 2) 
01889                     * cc_dim1];
01890             tr4 = cc[i__ + ((k << 2) + 3) * cc_dim1] + cc[ic + ((k << 2) + 2) 
01891                     * cc_dim1];
01892             tr1 = cc[i__ - 1 + ((k << 2) + 1) * cc_dim1] - cc[ic - 1 + ((k << 
01893                     2) + 4) * cc_dim1];
01894             tr2 = cc[i__ - 1 + ((k << 2) + 1) * cc_dim1] + cc[ic - 1 + ((k << 
01895                     2) + 4) * cc_dim1];
01896             ti4 = cc[i__ - 1 + ((k << 2) + 3) * cc_dim1] - cc[ic - 1 + ((k << 
01897                     2) + 2) * cc_dim1];
01898             tr3 = cc[i__ - 1 + ((k << 2) + 3) * cc_dim1] + cc[ic - 1 + ((k << 
01899                     2) + 2) * cc_dim1];
01900             ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = tr2 + tr3;
01901             cr3 = tr2 - tr3;
01902             ch[i__ + (k + ch_dim2) * ch_dim1] = ti2 + ti3;
01903             ci3 = ti2 - ti3;
01904             cr2 = tr1 - tr4;
01905             cr4 = tr1 + tr4;
01906             ci2 = ti1 + ti4;
01907             ci4 = ti1 - ti4;
01908             ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 2] * cr2 
01909                     - wa1[i__ - 1] * ci2;
01910             ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 2] * ci2 + 
01911                     wa1[i__ - 1] * cr2;
01912             ch[i__ - 1 + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 2] * cr3 - 
01913                     wa2[i__ - 1] * ci3;
01914             ch[i__ + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 2] * ci3 + wa2[
01915                     i__ - 1] * cr3;
01916             ch[i__ - 1 + (k + (ch_dim2 << 2)) * ch_dim1] = wa3[i__ - 2] * cr4 
01917                     - wa3[i__ - 1] * ci4;
01918             ch[i__ + (k + (ch_dim2 << 2)) * ch_dim1] = wa3[i__ - 2] * ci4 + 
01919                     wa3[i__ - 1] * cr4;
01920 /* L103: */
01921         }
01922 /* L104: */
01923     }
01924     if (*ido % 2 == 1) {
01925         return 0;
01926     }
01927 L105:
01928     i__1 = *l1;
01929     for (k = 1; k <= i__1; ++k) {
01930         ti1 = cc[((k << 2) + 2) * cc_dim1 + 1] + cc[((k << 2) + 4) * cc_dim1 
01931                 + 1];
01932         ti2 = cc[((k << 2) + 4) * cc_dim1 + 1] - cc[((k << 2) + 2) * cc_dim1 
01933                 + 1];
01934         tr1 = cc[*ido + ((k << 2) + 1) * cc_dim1] - cc[*ido + ((k << 2) + 3) *
01935                  cc_dim1];
01936         tr2 = cc[*ido + ((k << 2) + 1) * cc_dim1] + cc[*ido + ((k << 2) + 3) *
01937                  cc_dim1];
01938         ch[*ido + (k + ch_dim2) * ch_dim1] = tr2 + tr2;
01939         ch[*ido + (k + (ch_dim2 << 1)) * ch_dim1] = sqrt2 * (tr1 - ti1);
01940         ch[*ido + (k + ch_dim2 * 3) * ch_dim1] = ti2 + ti2;
01941         ch[*ido + (k + (ch_dim2 << 2)) * ch_dim1] = -sqrt2 * (tr1 + ti1);
01942 /* L106: */
01943     }
01944 L107:
01945     return 0;
01946 } /* radb4_ */
01947 
01948 /* Subroutine */ int cffti_(integer *n, doublereal *wsave)
01949 {
01950     extern /* Subroutine */ int cffti1_(integer *, doublereal *, doublereal *)
01951             ;
01952     static integer iw1, iw2;
01953 
01954 /* ----------------------------TJW */
01955 /* ----------------------------TJW */
01956     /* Parameter adjustments */
01957     --wsave;
01958 
01959     /* Function Body */
01960     if (*n == 1) {
01961         return 0;
01962     }
01963     iw1 = *n + *n + 1;
01964     iw2 = iw1 + *n + *n;
01965     cffti1_(n, &wsave[iw1], &wsave[iw2]);
01966     return 0;
01967 } /* cffti_ */
01968 
01969 /* Subroutine */ int cffti1_(integer *n, doublereal *wa, integer *ifac)
01970 {
01971     /* Initialized data */
01972 
01973     static integer ntryh[4] = { 3,4,2,5 };
01974 
01975     /* System generated locals */
01976     integer i__1, i__2, i__3;
01977 
01978     /* Builtin functions */
01979     double cos(doublereal), sin(doublereal);
01980 
01981     /* Local variables */
01982     static doublereal argh;
01983     static integer idot, ntry, i__, j;
01984     static doublereal argld;
01985     static integer i1, k1, l1, l2, ib;
01986     static doublereal fi;
01987     static integer ld, ii, nf, ip, nl, nq, nr;
01988     static doublereal arg;
01989     static integer ido, ipm;
01990     static doublereal tpi;
01991 
01992 /* ----------------------------TJW */
01993 /* ----------------------------TJW */
01994     /* Parameter adjustments */
01995     --ifac;
01996     --wa;
01997 
01998     /* Function Body */
01999     nl = *n;
02000     nf = 0;
02001     j = 0;
02002 L101:
02003     ++j;
02004     if (j - 4 <= 0) {
02005         goto L102;
02006     } else {
02007         goto L103;
02008     }
02009 L102:
02010     ntry = ntryh[j - 1];
02011     goto L104;
02012 L103:
02013     ntry += 2;
02014 L104:
02015     nq = nl / ntry;
02016     nr = nl - ntry * nq;
02017     if (nr != 0) {
02018         goto L101;
02019     } else {
02020         goto L105;
02021     }
02022 L105:
02023     ++nf;
02024     ifac[nf + 2] = ntry;
02025     nl = nq;
02026     if (ntry != 2) {
02027         goto L107;
02028     }
02029     if (nf == 1) {
02030         goto L107;
02031     }
02032     i__1 = nf;
02033     for (i__ = 2; i__ <= i__1; ++i__) {
02034         ib = nf - i__ + 2;
02035         ifac[ib + 2] = ifac[ib + 1];
02036 /* L106: */
02037     }
02038     ifac[3] = 2;
02039 L107:
02040     if (nl != 1) {
02041         goto L104;
02042     }
02043     ifac[1] = *n;
02044     ifac[2] = nf;
02045     tpi = (float)6.28318530717959;
02046     argh = tpi / (real) (*n);
02047     i__ = 2;
02048     l1 = 1;
02049     i__1 = nf;
02050     for (k1 = 1; k1 <= i__1; ++k1) {
02051         ip = ifac[k1 + 2];
02052         ld = 0;
02053         l2 = l1 * ip;
02054         ido = *n / l2;
02055         idot = ido + ido + 2;
02056         ipm = ip - 1;
02057         i__2 = ipm;
02058         for (j = 1; j <= i__2; ++j) {
02059             i1 = i__;
02060             wa[i__ - 1] = (float)1.;
02061             wa[i__] = (float)0.;
02062             ld += l1;
02063             fi = (float)0.;
02064             argld = (real) ld * argh;
02065             i__3 = idot;
02066             for (ii = 4; ii <= i__3; ii += 2) {
02067                 i__ += 2;
02068                 fi += (float)1.;
02069                 arg = fi * argld;
02070                 wa[i__ - 1] = cos(arg);
02071                 wa[i__] = sin(arg);
02072 /* L108: */
02073             }
02074             if (ip <= 5) {
02075                 goto L109;
02076             }
02077             wa[i1 - 1] = wa[i__ - 1];
02078             wa[i1] = wa[i__];
02079 L109:
02080             ;
02081         }
02082         l1 = l2;
02083 /* L110: */
02084     }
02085     return 0;
02086 } /* cffti1_ */
02087 
02088 /* Subroutine */ int cfftf_(integer *n, doublereal *c__, doublereal *wsave)
02089 {
02090     extern /* Subroutine */ int cfftf1_(integer *, doublereal *, doublereal *,
02091              doublereal *, doublereal *);
02092     static integer iw1, iw2;
02093 
02094 /* ----------------------------TJW */
02095 /* ----------------------------TJW */
02096     /* Parameter adjustments */
02097     --wsave;
02098     --c__;
02099 
02100     /* Function Body */
02101     if (*n == 1) {
02102         return 0;
02103     }
02104     iw1 = *n + *n + 1;
02105     iw2 = iw1 + *n + *n;
02106     cfftf1_(n, &c__[1], &wsave[1], &wsave[iw1], &wsave[iw2]);
02107     return 0;
02108 } /* cfftf_ */
02109 
02110 /* Subroutine */ int cfftf1_(integer *n, doublereal *c__, doublereal *ch, 
02111         doublereal *wa, integer *ifac)
02112 {
02113     /* System generated locals */
02114     integer i__1;
02115 
02116     /* Local variables */
02117     static integer idot, i__;
02118     extern /* Subroutine */ int passf_(integer *, integer *, integer *, 
02119             integer *, integer *, doublereal *, doublereal *, doublereal *, 
02120             doublereal *, doublereal *, doublereal *);
02121     static integer k1, l1, l2, n2;
02122     extern /* Subroutine */ int passf2_(integer *, integer *, doublereal *, 
02123             doublereal *, doublereal *), passf3_(integer *, integer *, 
02124             doublereal *, doublereal *, doublereal *, doublereal *), passf4_(
02125             integer *, integer *, doublereal *, doublereal *, doublereal *, 
02126             doublereal *, doublereal *), passf5_(integer *, integer *, 
02127             doublereal *, doublereal *, doublereal *, doublereal *, 
02128             doublereal *, doublereal *);
02129     static integer na, nf, ip, iw, ix2, ix3, ix4, nac, ido, idl1;
02130 
02131 /* ----------------------------TJW */
02132 /* ----------------------------TJW */
02133     /* Parameter adjustments */
02134     --ifac;
02135     --wa;
02136     --ch;
02137     --c__;
02138 
02139     /* Function Body */
02140     nf = ifac[2];
02141     na = 0;
02142     l1 = 1;
02143     iw = 1;
02144     i__1 = nf;
02145     for (k1 = 1; k1 <= i__1; ++k1) {
02146         ip = ifac[k1 + 2];
02147         l2 = ip * l1;
02148         ido = *n / l2;
02149         idot = ido + ido;
02150         idl1 = idot * l1;
02151         if (ip != 4) {
02152             goto L103;
02153         }
02154         ix2 = iw + idot;
02155         ix3 = ix2 + idot;
02156         if (na != 0) {
02157             goto L101;
02158         }
02159         passf4_(&idot, &l1, &c__[1], &ch[1], &wa[iw], &wa[ix2], &wa[ix3]);
02160         goto L102;
02161 L101:
02162         passf4_(&idot, &l1, &ch[1], &c__[1], &wa[iw], &wa[ix2], &wa[ix3]);
02163 L102:
02164         na = 1 - na;
02165         goto L115;
02166 L103:
02167         if (ip != 2) {
02168             goto L106;
02169         }
02170         if (na != 0) {
02171             goto L104;
02172         }
02173         passf2_(&idot, &l1, &c__[1], &ch[1], &wa[iw]);
02174         goto L105;
02175 L104:
02176         passf2_(&idot, &l1, &ch[1], &c__[1], &wa[iw]);
02177 L105:
02178         na = 1 - na;
02179         goto L115;
02180 L106:
02181         if (ip != 3) {
02182             goto L109;
02183         }
02184         ix2 = iw + idot;
02185         if (na != 0) {
02186             goto L107;
02187         }
02188         passf3_(&idot, &l1, &c__[1], &ch[1], &wa[iw], &wa[ix2]);
02189         goto L108;
02190 L107:
02191         passf3_(&idot, &l1, &ch[1], &c__[1], &wa[iw], &wa[ix2]);
02192 L108:
02193         na = 1 - na;
02194         goto L115;
02195 L109:
02196         if (ip != 5) {
02197             goto L112;
02198         }
02199         ix2 = iw + idot;
02200         ix3 = ix2 + idot;
02201         ix4 = ix3 + idot;
02202         if (na != 0) {
02203             goto L110;
02204         }
02205         passf5_(&idot, &l1, &c__[1], &ch[1], &wa[iw], &wa[ix2], &wa[ix3], &wa[
02206                 ix4]);
02207         goto L111;
02208 L110:
02209         passf5_(&idot, &l1, &ch[1], &c__[1], &wa[iw], &wa[ix2], &wa[ix3], &wa[
02210                 ix4]);
02211 L111:
02212         na = 1 - na;
02213         goto L115;
02214 L112:
02215         if (na != 0) {
02216             goto L113;
02217         }
02218         passf_(&nac, &idot, &ip, &l1, &idl1, &c__[1], &c__[1], &c__[1], &ch[1]
02219                 , &ch[1], &wa[iw]);
02220         goto L114;
02221 L113:
02222         passf_(&nac, &idot, &ip, &l1, &idl1, &ch[1], &ch[1], &ch[1], &c__[1], 
02223                 &c__[1], &wa[iw]);
02224 L114:
02225         if (nac != 0) {
02226             na = 1 - na;
02227         }
02228 L115:
02229         l1 = l2;
02230         iw += (ip - 1) * idot;
02231 /* L116: */
02232     }
02233     if (na == 0) {
02234         return 0;
02235     }
02236     n2 = *n + *n;
02237     i__1 = n2;
02238     for (i__ = 1; i__ <= i__1; ++i__) {
02239         c__[i__] = ch[i__];
02240 /* L117: */
02241     }
02242     return 0;
02243 } /* cfftf1_ */
02244 
02245 /* Subroutine */ int passf_(integer *nac, integer *ido, integer *ip, integer *
02246         l1, integer *idl1, doublereal *cc, doublereal *c1, doublereal *c2, 
02247         doublereal *ch, doublereal *ch2, doublereal *wa)
02248 {
02249     /* System generated locals */
02250     integer ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1,
02251              c1_dim2, c1_offset, c2_dim1, c2_offset, ch2_dim1, ch2_offset, 
02252             i__1, i__2, i__3;
02253 
02254     /* Local variables */
02255     static integer idij, idlj, idot, ipph, i__, j, k, l, jc, lc, ik, nt, idj, 
02256             idl, inc, idp;
02257     static doublereal wai, war;
02258     static integer ipp2;
02259 
02260 /* ----------------------------TJW */
02261 /* ----------------------------TJW */
02262     /* Parameter adjustments */
02263     ch_dim1 = *ido;
02264     ch_dim2 = *l1;
02265     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
02266     ch -= ch_offset;
02267     c1_dim1 = *ido;
02268     c1_dim2 = *l1;
02269     c1_offset = c1_dim1 * (c1_dim2 + 1) + 1;
02270     c1 -= c1_offset;
02271     cc_dim1 = *ido;
02272     cc_dim2 = *ip;
02273     cc_offset = cc_dim1 * (cc_dim2 + 1) + 1;
02274     cc -= cc_offset;
02275     ch2_dim1 = *idl1;
02276     ch2_offset = ch2_dim1 + 1;
02277     ch2 -= ch2_offset;
02278     c2_dim1 = *idl1;
02279     c2_offset = c2_dim1 + 1;
02280     c2 -= c2_offset;
02281     --wa;
02282 
02283     /* Function Body */
02284     idot = *ido / 2;
02285     nt = *ip * *idl1;
02286     ipp2 = *ip + 2;
02287     ipph = (*ip + 1) / 2;
02288     idp = *ip * *ido;
02289 
02290     if (*ido < *l1) {
02291         goto L106;
02292     }
02293     i__1 = ipph;
02294     for (j = 2; j <= i__1; ++j) {
02295         jc = ipp2 - j;
02296         i__2 = *l1;
02297         for (k = 1; k <= i__2; ++k) {
02298             i__3 = *ido;
02299             for (i__ = 1; i__ <= i__3; ++i__) {
02300                 ch[i__ + (k + j * ch_dim2) * ch_dim1] = cc[i__ + (j + k * 
02301                         cc_dim2) * cc_dim1] + cc[i__ + (jc + k * cc_dim2) * 
02302                         cc_dim1];
02303                 ch[i__ + (k + jc * ch_dim2) * ch_dim1] = cc[i__ + (j + k * 
02304                         cc_dim2) * cc_dim1] - cc[i__ + (jc + k * cc_dim2) * 
02305                         cc_dim1];
02306 /* L101: */
02307             }
02308 /* L102: */
02309         }
02310 /* L103: */
02311     }
02312     i__1 = *l1;
02313     for (k = 1; k <= i__1; ++k) {
02314         i__2 = *ido;
02315         for (i__ = 1; i__ <= i__2; ++i__) {
02316             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * cc_dim2 + 1) * 
02317                     cc_dim1];
02318 /* L104: */
02319         }
02320 /* L105: */
02321     }
02322     goto L112;
02323 L106:
02324     i__1 = ipph;
02325     for (j = 2; j <= i__1; ++j) {
02326         jc = ipp2 - j;
02327         i__2 = *ido;
02328         for (i__ = 1; i__ <= i__2; ++i__) {
02329             i__3 = *l1;
02330             for (k = 1; k <= i__3; ++k) {
02331                 ch[i__ + (k + j * ch_dim2) * ch_dim1] = cc[i__ + (j + k * 
02332                         cc_dim2) * cc_dim1] + cc[i__ + (jc + k * cc_dim2) * 
02333                         cc_dim1];
02334                 ch[i__ + (k + jc * ch_dim2) * ch_dim1] = cc[i__ + (j + k * 
02335                         cc_dim2) * cc_dim1] - cc[i__ + (jc + k * cc_dim2) * 
02336                         cc_dim1];
02337 /* L107: */
02338             }
02339 /* L108: */
02340         }
02341 /* L109: */
02342     }
02343     i__1 = *ido;
02344     for (i__ = 1; i__ <= i__1; ++i__) {
02345         i__2 = *l1;
02346         for (k = 1; k <= i__2; ++k) {
02347             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * cc_dim2 + 1) * 
02348                     cc_dim1];
02349 /* L110: */
02350         }
02351 /* L111: */
02352     }
02353 L112:
02354     idl = 2 - *ido;
02355     inc = 0;
02356     i__1 = ipph;
02357     for (l = 2; l <= i__1; ++l) {
02358         lc = ipp2 - l;
02359         idl += *ido;
02360         i__2 = *idl1;
02361         for (ik = 1; ik <= i__2; ++ik) {
02362             c2[ik + l * c2_dim1] = ch2[ik + ch2_dim1] + wa[idl - 1] * ch2[ik 
02363                     + (ch2_dim1 << 1)];
02364             c2[ik + lc * c2_dim1] = -wa[idl] * ch2[ik + *ip * ch2_dim1];
02365 /* L113: */
02366         }
02367         idlj = idl;
02368         inc += *ido;
02369         i__2 = ipph;
02370         for (j = 3; j <= i__2; ++j) {
02371             jc = ipp2 - j;
02372             idlj += inc;
02373             if (idlj > idp) {
02374                 idlj -= idp;
02375             }
02376             war = wa[idlj - 1];
02377             wai = wa[idlj];
02378             i__3 = *idl1;
02379             for (ik = 1; ik <= i__3; ++ik) {
02380                 c2[ik + l * c2_dim1] += war * ch2[ik + j * ch2_dim1];
02381                 c2[ik + lc * c2_dim1] -= wai * ch2[ik + jc * ch2_dim1];
02382 /* L114: */
02383             }
02384 /* L115: */
02385         }
02386 /* L116: */
02387     }
02388     i__1 = ipph;
02389     for (j = 2; j <= i__1; ++j) {
02390         i__2 = *idl1;
02391         for (ik = 1; ik <= i__2; ++ik) {
02392             ch2[ik + ch2_dim1] += ch2[ik + j * ch2_dim1];
02393 /* L117: */
02394         }
02395 /* L118: */
02396     }
02397     i__1 = ipph;
02398     for (j = 2; j <= i__1; ++j) {
02399         jc = ipp2 - j;
02400         i__2 = *idl1;
02401         for (ik = 2; ik <= i__2; ik += 2) {
02402             ch2[ik - 1 + j * ch2_dim1] = c2[ik - 1 + j * c2_dim1] - c2[ik + 
02403                     jc * c2_dim1];
02404             ch2[ik - 1 + jc * ch2_dim1] = c2[ik - 1 + j * c2_dim1] + c2[ik + 
02405                     jc * c2_dim1];
02406             ch2[ik + j * ch2_dim1] = c2[ik + j * c2_dim1] + c2[ik - 1 + jc * 
02407                     c2_dim1];
02408             ch2[ik + jc * ch2_dim1] = c2[ik + j * c2_dim1] - c2[ik - 1 + jc * 
02409                     c2_dim1];
02410 /* L119: */
02411         }
02412 /* L120: */
02413     }
02414     *nac = 1;
02415     if (*ido == 2) {
02416         return 0;
02417     }
02418     *nac = 0;
02419     i__1 = *idl1;
02420     for (ik = 1; ik <= i__1; ++ik) {
02421         c2[ik + c2_dim1] = ch2[ik + ch2_dim1];
02422 /* L121: */
02423     }
02424     i__1 = *ip;
02425     for (j = 2; j <= i__1; ++j) {
02426         i__2 = *l1;
02427         for (k = 1; k <= i__2; ++k) {
02428             c1[(k + j * c1_dim2) * c1_dim1 + 1] = ch[(k + j * ch_dim2) * 
02429                     ch_dim1 + 1];
02430             c1[(k + j * c1_dim2) * c1_dim1 + 2] = ch[(k + j * ch_dim2) * 
02431                     ch_dim1 + 2];
02432 /* L122: */
02433         }
02434 /* L123: */
02435     }
02436     if (idot > *l1) {
02437         goto L127;
02438     }
02439     idij = 0;
02440     i__1 = *ip;
02441     for (j = 2; j <= i__1; ++j) {
02442         idij += 2;
02443         i__2 = *ido;
02444         for (i__ = 4; i__ <= i__2; i__ += 2) {
02445             idij += 2;
02446             i__3 = *l1;
02447             for (k = 1; k <= i__3; ++k) {
02448                 c1[i__ - 1 + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[
02449                         i__ - 1 + (k + j * ch_dim2) * ch_dim1] + wa[idij] * 
02450                         ch[i__ + (k + j * ch_dim2) * ch_dim1];
02451                 c1[i__ + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[i__ 
02452                         + (k + j * ch_dim2) * ch_dim1] - wa[idij] * ch[i__ - 
02453                         1 + (k + j * ch_dim2) * ch_dim1];
02454 /* L124: */
02455             }
02456 /* L125: */
02457         }
02458 /* L126: */
02459     }
02460     return 0;
02461 L127:
02462     idj = 2 - *ido;
02463     i__1 = *ip;
02464     for (j = 2; j <= i__1; ++j) {
02465         idj += *ido;
02466         i__2 = *l1;
02467         for (k = 1; k <= i__2; ++k) {
02468             idij = idj;
02469             i__3 = *ido;
02470             for (i__ = 4; i__ <= i__3; i__ += 2) {
02471                 idij += 2;
02472                 c1[i__ - 1 + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[
02473                         i__ - 1 + (k + j * ch_dim2) * ch_dim1] + wa[idij] * 
02474                         ch[i__ + (k + j * ch_dim2) * ch_dim1];
02475                 c1[i__ + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[i__ 
02476                         + (k + j * ch_dim2) * ch_dim1] - wa[idij] * ch[i__ - 
02477                         1 + (k + j * ch_dim2) * ch_dim1];
02478 /* L128: */
02479             }
02480 /* L129: */
02481         }
02482 /* L130: */
02483     }
02484     return 0;
02485 } /* passf_ */
02486 
02487 /* Subroutine */ int passf5_(integer *ido, integer *l1, doublereal *cc, 
02488         doublereal *ch, doublereal *wa1, doublereal *wa2, doublereal *wa3, 
02489         doublereal *wa4)
02490 {
02491     /* Initialized data */
02492 
02493     static doublereal tr11 = .309016994374947;
02494     static doublereal ti11 = -.951056516295154;
02495     static doublereal tr12 = -.809016994374947;
02496     static doublereal ti12 = -.587785252292473;
02497 
02498     /* System generated locals */
02499     integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
02500 
02501     /* Local variables */
02502     static integer i__, k;
02503     static doublereal ci2, ci3, ci4, ci5, di3, di4, di5, di2, cr2, cr3, cr5, 
02504             cr4, ti2, ti3, ti4, ti5, dr3, dr4, dr5, dr2, tr2, tr3, tr4, tr5;
02505 
02506 /* ----------------------------TJW */
02507 /* ----------------------------TJW */
02508     /* Parameter adjustments */
02509     ch_dim1 = *ido;
02510     ch_dim2 = *l1;
02511     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
02512     ch -= ch_offset;
02513     cc_dim1 = *ido;
02514     cc_offset = cc_dim1 * 6 + 1;
02515     cc -= cc_offset;
02516     --wa1;
02517     --wa2;
02518     --wa3;
02519     --wa4;
02520 
02521     /* Function Body */
02522     if (*ido != 2) {
02523         goto L102;
02524     }
02525     i__1 = *l1;
02526     for (k = 1; k <= i__1; ++k) {
02527         ti5 = cc[(k * 5 + 2) * cc_dim1 + 2] - cc[(k * 5 + 5) * cc_dim1 + 2];
02528         ti2 = cc[(k * 5 + 2) * cc_dim1 + 2] + cc[(k * 5 + 5) * cc_dim1 + 2];
02529         ti4 = cc[(k * 5 + 3) * cc_dim1 + 2] - cc[(k * 5 + 4) * cc_dim1 + 2];
02530         ti3 = cc[(k * 5 + 3) * cc_dim1 + 2] + cc[(k * 5 + 4) * cc_dim1 + 2];
02531         tr5 = cc[(k * 5 + 2) * cc_dim1 + 1] - cc[(k * 5 + 5) * cc_dim1 + 1];
02532         tr2 = cc[(k * 5 + 2) * cc_dim1 + 1] + cc[(k * 5 + 5) * cc_dim1 + 1];
02533         tr4 = cc[(k * 5 + 3) * cc_dim1 + 1] - cc[(k * 5 + 4) * cc_dim1 + 1];
02534         tr3 = cc[(k * 5 + 3) * cc_dim1 + 1] + cc[(k * 5 + 4) * cc_dim1 + 1];
02535         ch[(k + ch_dim2) * ch_dim1 + 1] = cc[(k * 5 + 1) * cc_dim1 + 1] + tr2 
02536                 + tr3;
02537         ch[(k + ch_dim2) * ch_dim1 + 2] = cc[(k * 5 + 1) * cc_dim1 + 2] + ti2 
02538                 + ti3;
02539         cr2 = cc[(k * 5 + 1) * cc_dim1 + 1] + tr11 * tr2 + tr12 * tr3;
02540         ci2 = cc[(k * 5 + 1) * cc_dim1 + 2] + tr11 * ti2 + tr12 * ti3;
02541         cr3 = cc[(k * 5 + 1) * cc_dim1 + 1] + tr12 * tr2 + tr11 * tr3;
02542         ci3 = cc[(k * 5 + 1) * cc_dim1 + 2] + tr12 * ti2 + tr11 * ti3;
02543         cr5 = ti11 * tr5 + ti12 * tr4;
02544         ci5 = ti11 * ti5 + ti12 * ti4;
02545         cr4 = ti12 * tr5 - ti11 * tr4;
02546         ci4 = ti12 * ti5 - ti11 * ti4;
02547         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = cr2 - ci5;
02548         ch[(k + ch_dim2 * 5) * ch_dim1 + 1] = cr2 + ci5;
02549         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 2] = ci2 + cr5;
02550         ch[(k + ch_dim2 * 3) * ch_dim1 + 2] = ci3 + cr4;
02551         ch[(k + ch_dim2 * 3) * ch_dim1 + 1] = cr3 - ci4;
02552         ch[(k + (ch_dim2 << 2)) * ch_dim1 + 1] = cr3 + ci4;
02553         ch[(k + (ch_dim2 << 2)) * ch_dim1 + 2] = ci3 - cr4;
02554         ch[(k + ch_dim2 * 5) * ch_dim1 + 2] = ci2 - cr5;
02555 /* L101: */
02556     }
02557     return 0;
02558 L102:
02559     i__1 = *l1;
02560     for (k = 1; k <= i__1; ++k) {
02561         i__2 = *ido;
02562         for (i__ = 2; i__ <= i__2; i__ += 2) {
02563             ti5 = cc[i__ + (k * 5 + 2) * cc_dim1] - cc[i__ + (k * 5 + 5) * 
02564                     cc_dim1];
02565             ti2 = cc[i__ + (k * 5 + 2) * cc_dim1] + cc[i__ + (k * 5 + 5) * 
02566                     cc_dim1];
02567             ti4 = cc[i__ + (k * 5 + 3) * cc_dim1] - cc[i__ + (k * 5 + 4) * 
02568                     cc_dim1];
02569             ti3 = cc[i__ + (k * 5 + 3) * cc_dim1] + cc[i__ + (k * 5 + 4) * 
02570                     cc_dim1];
02571             tr5 = cc[i__ - 1 + (k * 5 + 2) * cc_dim1] - cc[i__ - 1 + (k * 5 + 
02572                     5) * cc_dim1];
02573             tr2 = cc[i__ - 1 + (k * 5 + 2) * cc_dim1] + cc[i__ - 1 + (k * 5 + 
02574                     5) * cc_dim1];
02575             tr4 = cc[i__ - 1 + (k * 5 + 3) * cc_dim1] - cc[i__ - 1 + (k * 5 + 
02576                     4) * cc_dim1];
02577             tr3 = cc[i__ - 1 + (k * 5 + 3) * cc_dim1] + cc[i__ - 1 + (k * 5 + 
02578                     4) * cc_dim1];
02579             ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = cc[i__ - 1 + (k * 5 + 1) *
02580                      cc_dim1] + tr2 + tr3;
02581             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * 5 + 1) * 
02582                     cc_dim1] + ti2 + ti3;
02583             cr2 = cc[i__ - 1 + (k * 5 + 1) * cc_dim1] + tr11 * tr2 + tr12 * 
02584                     tr3;
02585             ci2 = cc[i__ + (k * 5 + 1) * cc_dim1] + tr11 * ti2 + tr12 * ti3;
02586             cr3 = cc[i__ - 1 + (k * 5 + 1) * cc_dim1] + tr12 * tr2 + tr11 * 
02587                     tr3;
02588             ci3 = cc[i__ + (k * 5 + 1) * cc_dim1] + tr12 * ti2 + tr11 * ti3;
02589             cr5 = ti11 * tr5 + ti12 * tr4;
02590             ci5 = ti11 * ti5 + ti12 * ti4;
02591             cr4 = ti12 * tr5 - ti11 * tr4;
02592             ci4 = ti12 * ti5 - ti11 * ti4;
02593             dr3 = cr3 - ci4;
02594             dr4 = cr3 + ci4;
02595             di3 = ci3 + cr4;
02596             di4 = ci3 - cr4;
02597             dr5 = cr2 + ci5;
02598             dr2 = cr2 - ci5;
02599             di5 = ci2 - cr5;
02600             di2 = ci2 + cr5;
02601             ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * dr2 
02602                     + wa1[i__] * di2;
02603             ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * di2 - 
02604                     wa1[i__] * dr2;
02605             ch[i__ - 1 + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 1] * dr3 + 
02606                     wa2[i__] * di3;
02607             ch[i__ + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 1] * di3 - wa2[
02608                     i__] * dr3;
02609             ch[i__ - 1 + (k + (ch_dim2 << 2)) * ch_dim1] = wa3[i__ - 1] * dr4 
02610                     + wa3[i__] * di4;
02611             ch[i__ + (k + (ch_dim2 << 2)) * ch_dim1] = wa3[i__ - 1] * di4 - 
02612                     wa3[i__] * dr4;
02613             ch[i__ - 1 + (k + ch_dim2 * 5) * ch_dim1] = wa4[i__ - 1] * dr5 + 
02614                     wa4[i__] * di5;
02615             ch[i__ + (k + ch_dim2 * 5) * ch_dim1] = wa4[i__ - 1] * di5 - wa4[
02616                     i__] * dr5;
02617 /* L103: */
02618         }
02619 /* L104: */
02620     }
02621     return 0;
02622 } /* passf5_ */
02623 
02624 /* Subroutine */ int passf3_(integer *ido, integer *l1, doublereal *cc, 
02625         doublereal *ch, doublereal *wa1, doublereal *wa2)
02626 {
02627     /* Initialized data */
02628 
02629     static doublereal taur = -.5;
02630     static doublereal taui = -.866025403784439;
02631 
02632     /* System generated locals */
02633     integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
02634 
02635     /* Local variables */
02636     static integer i__, k;
02637     static doublereal ci2, ci3, di2, di3, cr2, cr3, dr2, dr3, ti2, tr2;
02638 
02639 /* ----------------------------TJW */
02640 /* ----------------------------TJW */
02641     /* Parameter adjustments */
02642     ch_dim1 = *ido;
02643     ch_dim2 = *l1;
02644     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
02645     ch -= ch_offset;
02646     cc_dim1 = *ido;
02647     cc_offset = (cc_dim1 << 2) + 1;
02648     cc -= cc_offset;
02649     --wa1;
02650     --wa2;
02651 
02652     /* Function Body */
02653     if (*ido != 2) {
02654         goto L102;
02655     }
02656     i__1 = *l1;
02657     for (k = 1; k <= i__1; ++k) {
02658         tr2 = cc[(k * 3 + 2) * cc_dim1 + 1] + cc[(k * 3 + 3) * cc_dim1 + 1];
02659         cr2 = cc[(k * 3 + 1) * cc_dim1 + 1] + taur * tr2;
02660         ch[(k + ch_dim2) * ch_dim1 + 1] = cc[(k * 3 + 1) * cc_dim1 + 1] + tr2;
02661         ti2 = cc[(k * 3 + 2) * cc_dim1 + 2] + cc[(k * 3 + 3) * cc_dim1 + 2];
02662         ci2 = cc[(k * 3 + 1) * cc_dim1 + 2] + taur * ti2;
02663         ch[(k + ch_dim2) * ch_dim1 + 2] = cc[(k * 3 + 1) * cc_dim1 + 2] + ti2;
02664         cr3 = taui * (cc[(k * 3 + 2) * cc_dim1 + 1] - cc[(k * 3 + 3) * 
02665                 cc_dim1 + 1]);
02666         ci3 = taui * (cc[(k * 3 + 2) * cc_dim1 + 2] - cc[(k * 3 + 3) * 
02667                 cc_dim1 + 2]);
02668         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = cr2 - ci3;
02669         ch[(k + ch_dim2 * 3) * ch_dim1 + 1] = cr2 + ci3;
02670         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 2] = ci2 + cr3;
02671         ch[(k + ch_dim2 * 3) * ch_dim1 + 2] = ci2 - cr3;
02672 /* L101: */
02673     }
02674     return 0;
02675 L102:
02676     i__1 = *l1;
02677     for (k = 1; k <= i__1; ++k) {
02678         i__2 = *ido;
02679         for (i__ = 2; i__ <= i__2; i__ += 2) {
02680             tr2 = cc[i__ - 1 + (k * 3 + 2) * cc_dim1] + cc[i__ - 1 + (k * 3 + 
02681                     3) * cc_dim1];
02682             cr2 = cc[i__ - 1 + (k * 3 + 1) * cc_dim1] + taur * tr2;
02683             ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = cc[i__ - 1 + (k * 3 + 1) *
02684                      cc_dim1] + tr2;
02685             ti2 = cc[i__ + (k * 3 + 2) * cc_dim1] + cc[i__ + (k * 3 + 3) * 
02686                     cc_dim1];
02687             ci2 = cc[i__ + (k * 3 + 1) * cc_dim1] + taur * ti2;
02688             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * 3 + 1) * 
02689                     cc_dim1] + ti2;
02690             cr3 = taui * (cc[i__ - 1 + (k * 3 + 2) * cc_dim1] - cc[i__ - 1 + (
02691                     k * 3 + 3) * cc_dim1]);
02692             ci3 = taui * (cc[i__ + (k * 3 + 2) * cc_dim1] - cc[i__ + (k * 3 + 
02693                     3) * cc_dim1]);
02694             dr2 = cr2 - ci3;
02695             dr3 = cr2 + ci3;
02696             di2 = ci2 + cr3;
02697             di3 = ci2 - cr3;
02698             ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * di2 - 
02699                     wa1[i__] * dr2;
02700             ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * dr2 
02701                     + wa1[i__] * di2;
02702             ch[i__ + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 1] * di3 - wa2[
02703                     i__] * dr3;
02704             ch[i__ - 1 + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 1] * dr3 + 
02705                     wa2[i__] * di3;
02706 /* L103: */
02707         }
02708 /* L104: */
02709     }
02710     return 0;
02711 } /* passf3_ */
02712 
02713 /* Subroutine */ int passf2_(integer *ido, integer *l1, doublereal *cc, 
02714         doublereal *ch, doublereal *wa1)
02715 {
02716     /* System generated locals */
02717     integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
02718 
02719     /* Local variables */
02720     static integer i__, k;
02721     static doublereal ti2, tr2;
02722 
02723 /* ----------------------------TJW */
02724 /* ----------------------------TJW */
02725     /* Parameter adjustments */
02726     ch_dim1 = *ido;
02727     ch_dim2 = *l1;
02728     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
02729     ch -= ch_offset;
02730     cc_dim1 = *ido;
02731     cc_offset = cc_dim1 * 3 + 1;
02732     cc -= cc_offset;
02733     --wa1;
02734 
02735     /* Function Body */
02736     if (*ido > 2) {
02737         goto L102;
02738     }
02739     i__1 = *l1;
02740     for (k = 1; k <= i__1; ++k) {
02741         ch[(k + ch_dim2) * ch_dim1 + 1] = cc[((k << 1) + 1) * cc_dim1 + 1] + 
02742                 cc[((k << 1) + 2) * cc_dim1 + 1];
02743         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = cc[((k << 1) + 1) * cc_dim1 
02744                 + 1] - cc[((k << 1) + 2) * cc_dim1 + 1];
02745         ch[(k + ch_dim2) * ch_dim1 + 2] = cc[((k << 1) + 1) * cc_dim1 + 2] + 
02746                 cc[((k << 1) + 2) * cc_dim1 + 2];
02747         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 2] = cc[((k << 1) + 1) * cc_dim1 
02748                 + 2] - cc[((k << 1) + 2) * cc_dim1 + 2];
02749 /* L101: */
02750     }
02751     return 0;
02752 L102:
02753     i__1 = *l1;
02754     for (k = 1; k <= i__1; ++k) {
02755         i__2 = *ido;
02756         for (i__ = 2; i__ <= i__2; i__ += 2) {
02757             ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = cc[i__ - 1 + ((k << 1) + 
02758                     1) * cc_dim1] + cc[i__ - 1 + ((k << 1) + 2) * cc_dim1];
02759             tr2 = cc[i__ - 1 + ((k << 1) + 1) * cc_dim1] - cc[i__ - 1 + ((k <<
02760                      1) + 2) * cc_dim1];
02761             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + ((k << 1) + 1) * 
02762                     cc_dim1] + cc[i__ + ((k << 1) + 2) * cc_dim1];
02763             ti2 = cc[i__ + ((k << 1) + 1) * cc_dim1] - cc[i__ + ((k << 1) + 2)
02764                      * cc_dim1];
02765             ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * ti2 - 
02766                     wa1[i__] * tr2;
02767             ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * tr2 
02768                     + wa1[i__] * ti2;
02769 /* L103: */
02770         }
02771 /* L104: */
02772     }
02773     return 0;
02774 } /* passf2_ */
02775 
02776 /* Subroutine */ int passf4_(integer *ido, integer *l1, doublereal *cc, 
02777         doublereal *ch, doublereal *wa1, doublereal *wa2, doublereal *wa3)
02778 {
02779     /* System generated locals */
02780     integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
02781 
02782     /* Local variables */
02783     static integer i__, k;
02784     static doublereal ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, 
02785             tr2, tr3, tr4;
02786 
02787 /* ----------------------------TJW */
02788 /* ----------------------------TJW */
02789     /* Parameter adjustments */
02790     ch_dim1 = *ido;
02791     ch_dim2 = *l1;
02792     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
02793     ch -= ch_offset;
02794     cc_dim1 = *ido;
02795     cc_offset = cc_dim1 * 5 + 1;
02796     cc -= cc_offset;
02797     --wa1;
02798     --wa2;
02799     --wa3;
02800 
02801     /* Function Body */
02802     if (*ido != 2) {
02803         goto L102;
02804     }
02805     i__1 = *l1;
02806     for (k = 1; k <= i__1; ++k) {
02807         ti1 = cc[((k << 2) + 1) * cc_dim1 + 2] - cc[((k << 2) + 3) * cc_dim1 
02808                 + 2];
02809         ti2 = cc[((k << 2) + 1) * cc_dim1 + 2] + cc[((k << 2) + 3) * cc_dim1 
02810                 + 2];
02811         tr4 = cc[((k << 2) + 2) * cc_dim1 + 2] - cc[((k << 2) + 4) * cc_dim1 
02812                 + 2];
02813         ti3 = cc[((k << 2) + 2) * cc_dim1 + 2] + cc[((k << 2) + 4) * cc_dim1 
02814                 + 2];
02815         tr1 = cc[((k << 2) + 1) * cc_dim1 + 1] - cc[((k << 2) + 3) * cc_dim1 
02816                 + 1];
02817         tr2 = cc[((k << 2) + 1) * cc_dim1 + 1] + cc[((k << 2) + 3) * cc_dim1 
02818                 + 1];
02819         ti4 = cc[((k << 2) + 4) * cc_dim1 + 1] - cc[((k << 2) + 2) * cc_dim1 
02820                 + 1];
02821         tr3 = cc[((k << 2) + 2) * cc_dim1 + 1] + cc[((k << 2) + 4) * cc_dim1 
02822                 + 1];
02823         ch[(k + ch_dim2) * ch_dim1 + 1] = tr2 + tr3;
02824         ch[(k + ch_dim2 * 3) * ch_dim1 + 1] = tr2 - tr3;
02825         ch[(k + ch_dim2) * ch_dim1 + 2] = ti2 + ti3;
02826         ch[(k + ch_dim2 * 3) * ch_dim1 + 2] = ti2 - ti3;
02827         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = tr1 + tr4;
02828         ch[(k + (ch_dim2 << 2)) * ch_dim1 + 1] = tr1 - tr4;
02829         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 2] = ti1 + ti4;
02830         ch[(k + (ch_dim2 << 2)) * ch_dim1 + 2] = ti1 - ti4;
02831 /* L101: */
02832     }
02833     return 0;
02834 L102:
02835     i__1 = *l1;
02836     for (k = 1; k <= i__1; ++k) {
02837         i__2 = *ido;
02838         for (i__ = 2; i__ <= i__2; i__ += 2) {
02839             ti1 = cc[i__ + ((k << 2) + 1) * cc_dim1] - cc[i__ + ((k << 2) + 3)
02840                      * cc_dim1];
02841             ti2 = cc[i__ + ((k << 2) + 1) * cc_dim1] + cc[i__ + ((k << 2) + 3)
02842                      * cc_dim1];
02843             ti3 = cc[i__ + ((k << 2) + 2) * cc_dim1] + cc[i__ + ((k << 2) + 4)
02844                      * cc_dim1];
02845             tr4 = cc[i__ + ((k << 2) + 2) * cc_dim1] - cc[i__ + ((k << 2) + 4)
02846                      * cc_dim1];
02847             tr1 = cc[i__ - 1 + ((k << 2) + 1) * cc_dim1] - cc[i__ - 1 + ((k <<
02848                      2) + 3) * cc_dim1];
02849             tr2 = cc[i__ - 1 + ((k << 2) + 1) * cc_dim1] + cc[i__ - 1 + ((k <<
02850                      2) + 3) * cc_dim1];
02851             ti4 = cc[i__ - 1 + ((k << 2) + 4) * cc_dim1] - cc[i__ - 1 + ((k <<
02852                      2) + 2) * cc_dim1];
02853             tr3 = cc[i__ - 1 + ((k << 2) + 2) * cc_dim1] + cc[i__ - 1 + ((k <<
02854                      2) + 4) * cc_dim1];
02855             ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = tr2 + tr3;
02856             cr3 = tr2 - tr3;
02857             ch[i__ + (k + ch_dim2) * ch_dim1] = ti2 + ti3;
02858             ci3 = ti2 - ti3;
02859             cr2 = tr1 + tr4;
02860             cr4 = tr1 - tr4;
02861             ci2 = ti1 + ti4;
02862             ci4 = ti1 - ti4;
02863             ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * cr2 
02864                     + wa1[i__] * ci2;
02865             ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * ci2 - 
02866                     wa1[i__] * cr2;
02867             ch[i__ - 1 + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 1] * cr3 + 
02868                     wa2[i__] * ci3;
02869             ch[i__ + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 1] * ci3 - wa2[
02870                     i__] * cr3;
02871             ch[i__ - 1 + (k + (ch_dim2 << 2)) * ch_dim1] = wa3[i__ - 1] * cr4 
02872                     + wa3[i__] * ci4;
02873             ch[i__ + (k + (ch_dim2 << 2)) * ch_dim1] = wa3[i__ - 1] * ci4 - 
02874                     wa3[i__] * cr4;
02875 /* L103: */
02876         }
02877 /* L104: */
02878     }
02879     return 0;
02880 } /* passf4_ */
02881 
02882 /* Subroutine */ int cfftb_(integer *n, doublereal *c__, doublereal *wsave)
02883 {
02884     extern /* Subroutine */ int cfftb1_(integer *, doublereal *, doublereal *,
02885              doublereal *, doublereal *);
02886     static integer iw1, iw2;
02887 
02888 /* ----------------------------TJW */
02889 /* ----------------------------TJW */
02890     /* Parameter adjustments */
02891     --wsave;
02892     --c__;
02893 
02894     /* Function Body */
02895     if (*n == 1) {
02896         return 0;
02897     }
02898     iw1 = *n + *n + 1;
02899     iw2 = iw1 + *n + *n;
02900     cfftb1_(n, &c__[1], &wsave[1], &wsave[iw1], &wsave[iw2]);
02901     return 0;
02902 } /* cfftb_ */
02903 
02904 /* Subroutine */ int cfftb1_(integer *n, doublereal *c__, doublereal *ch, 
02905         doublereal *wa, integer *ifac)
02906 {
02907     /* System generated locals */
02908     integer i__1;
02909 
02910     /* Local variables */
02911     static integer idot, i__;
02912     extern /* Subroutine */ int passb_(integer *, integer *, integer *, 
02913             integer *, integer *, doublereal *, doublereal *, doublereal *, 
02914             doublereal *, doublereal *, doublereal *);
02915     static integer k1, l1, l2, n2;
02916     extern /* Subroutine */ int passb2_(integer *, integer *, doublereal *, 
02917             doublereal *, doublereal *), passb3_(integer *, integer *, 
02918             doublereal *, doublereal *, doublereal *, doublereal *), passb4_(
02919             integer *, integer *, doublereal *, doublereal *, doublereal *, 
02920             doublereal *, doublereal *), passb5_(integer *, integer *, 
02921             doublereal *, doublereal *, doublereal *, doublereal *, 
02922             doublereal *, doublereal *);
02923     static integer na, nf, ip, iw, ix2, ix3, ix4, nac, ido, idl1;
02924 
02925 /* ----------------------------TJW */
02926 /* ----------------------------TJW */
02927     /* Parameter adjustments */
02928     --ifac;
02929     --wa;
02930     --ch;
02931     --c__;
02932 
02933     /* Function Body */
02934     nf = ifac[2];
02935     na = 0;
02936     l1 = 1;
02937     iw = 1;
02938     i__1 = nf;
02939     for (k1 = 1; k1 <= i__1; ++k1) {
02940         ip = ifac[k1 + 2];
02941         l2 = ip * l1;
02942         ido = *n / l2;
02943         idot = ido + ido;
02944         idl1 = idot * l1;
02945         if (ip != 4) {
02946             goto L103;
02947         }
02948         ix2 = iw + idot;
02949         ix3 = ix2 + idot;
02950         if (na != 0) {
02951             goto L101;
02952         }
02953         passb4_(&idot, &l1, &c__[1], &ch[1], &wa[iw], &wa[ix2], &wa[ix3]);
02954         goto L102;
02955 L101:
02956         passb4_(&idot, &l1, &ch[1], &c__[1], &wa[iw], &wa[ix2], &wa[ix3]);
02957 L102:
02958         na = 1 - na;
02959         goto L115;
02960 L103:
02961         if (ip != 2) {
02962             goto L106;
02963         }
02964         if (na != 0) {
02965             goto L104;
02966         }
02967         passb2_(&idot, &l1, &c__[1], &ch[1], &wa[iw]);
02968         goto L105;
02969 L104:
02970         passb2_(&idot, &l1, &ch[1], &c__[1], &wa[iw]);
02971 L105:
02972         na = 1 - na;
02973         goto L115;
02974 L106:
02975         if (ip != 3) {
02976             goto L109;
02977         }
02978         ix2 = iw + idot;
02979         if (na != 0) {
02980             goto L107;
02981         }
02982         passb3_(&idot, &l1, &c__[1], &ch[1], &wa[iw], &wa[ix2]);
02983         goto L108;
02984 L107:
02985         passb3_(&idot, &l1, &ch[1], &c__[1], &wa[iw], &wa[ix2]);
02986 L108:
02987         na = 1 - na;
02988         goto L115;
02989 L109:
02990         if (ip != 5) {
02991             goto L112;
02992         }
02993         ix2 = iw + idot;
02994         ix3 = ix2 + idot;
02995         ix4 = ix3 + idot;
02996         if (na != 0) {
02997             goto L110;
02998         }
02999         passb5_(&idot, &l1, &c__[1], &ch[1], &wa[iw], &wa[ix2], &wa[ix3], &wa[
03000                 ix4]);
03001         goto L111;
03002 L110:
03003         passb5_(&idot, &l1, &ch[1], &c__[1], &wa[iw], &wa[ix2], &wa[ix3], &wa[
03004                 ix4]);
03005 L111:
03006         na = 1 - na;
03007         goto L115;
03008 L112:
03009         if (na != 0) {
03010             goto L113;
03011         }
03012         passb_(&nac, &idot, &ip, &l1, &idl1, &c__[1], &c__[1], &c__[1], &ch[1]
03013                 , &ch[1], &wa[iw]);
03014         goto L114;
03015 L113:
03016         passb_(&nac, &idot, &ip, &l1, &idl1, &ch[1], &ch[1], &ch[1], &c__[1], 
03017                 &c__[1], &wa[iw]);
03018 L114:
03019         if (nac != 0) {
03020             na = 1 - na;
03021         }
03022 L115:
03023         l1 = l2;
03024         iw += (ip - 1) * idot;
03025 /* L116: */
03026     }
03027     if (na == 0) {
03028         return 0;
03029     }
03030     n2 = *n + *n;
03031     i__1 = n2;
03032     for (i__ = 1; i__ <= i__1; ++i__) {
03033         c__[i__] = ch[i__];
03034 /* L117: */
03035     }
03036     return 0;
03037 } /* cfftb1_ */
03038 
03039 /* Subroutine */ int passb_(integer *nac, integer *ido, integer *ip, integer *
03040         l1, integer *idl1, doublereal *cc, doublereal *c1, doublereal *c2, 
03041         doublereal *ch, doublereal *ch2, doublereal *wa)
03042 {
03043     /* System generated locals */
03044     integer ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1,
03045              c1_dim2, c1_offset, c2_dim1, c2_offset, ch2_dim1, ch2_offset, 
03046             i__1, i__2, i__3;
03047 
03048     /* Local variables */
03049     static integer idij, idlj, idot, ipph, i__, j, k, l, jc, lc, ik, nt, idj, 
03050             idl, inc, idp;
03051     static doublereal wai, war;
03052     static integer ipp2;
03053 
03054 /* ----------------------------TJW */
03055 /* ----------------------------TJW */
03056     /* Parameter adjustments */
03057     ch_dim1 = *ido;
03058     ch_dim2 = *l1;
03059     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
03060     ch -= ch_offset;
03061     c1_dim1 = *ido;
03062     c1_dim2 = *l1;
03063     c1_offset = c1_dim1 * (c1_dim2 + 1) + 1;
03064     c1 -= c1_offset;
03065     cc_dim1 = *ido;
03066     cc_dim2 = *ip;
03067     cc_offset = cc_dim1 * (cc_dim2 + 1) + 1;
03068     cc -= cc_offset;
03069     ch2_dim1 = *idl1;
03070     ch2_offset = ch2_dim1 + 1;
03071     ch2 -= ch2_offset;
03072     c2_dim1 = *idl1;
03073     c2_offset = c2_dim1 + 1;
03074     c2 -= c2_offset;
03075     --wa;
03076 
03077     /* Function Body */
03078     idot = *ido / 2;
03079     nt = *ip * *idl1;
03080     ipp2 = *ip + 2;
03081     ipph = (*ip + 1) / 2;
03082     idp = *ip * *ido;
03083 
03084     if (*ido < *l1) {
03085         goto L106;
03086     }
03087     i__1 = ipph;
03088     for (j = 2; j <= i__1; ++j) {
03089         jc = ipp2 - j;
03090         i__2 = *l1;
03091         for (k = 1; k <= i__2; ++k) {
03092             i__3 = *ido;
03093             for (i__ = 1; i__ <= i__3; ++i__) {
03094                 ch[i__ + (k + j * ch_dim2) * ch_dim1] = cc[i__ + (j + k * 
03095                         cc_dim2) * cc_dim1] + cc[i__ + (jc + k * cc_dim2) * 
03096                         cc_dim1];
03097                 ch[i__ + (k + jc * ch_dim2) * ch_dim1] = cc[i__ + (j + k * 
03098                         cc_dim2) * cc_dim1] - cc[i__ + (jc + k * cc_dim2) * 
03099                         cc_dim1];
03100 /* L101: */
03101             }
03102 /* L102: */
03103         }
03104 /* L103: */
03105     }
03106     i__1 = *l1;
03107     for (k = 1; k <= i__1; ++k) {
03108         i__2 = *ido;
03109         for (i__ = 1; i__ <= i__2; ++i__) {
03110             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * cc_dim2 + 1) * 
03111                     cc_dim1];
03112 /* L104: */
03113         }
03114 /* L105: */
03115     }
03116     goto L112;
03117 L106:
03118     i__1 = ipph;
03119     for (j = 2; j <= i__1; ++j) {
03120         jc = ipp2 - j;
03121         i__2 = *ido;
03122         for (i__ = 1; i__ <= i__2; ++i__) {
03123             i__3 = *l1;
03124             for (k = 1; k <= i__3; ++k) {
03125                 ch[i__ + (k + j * ch_dim2) * ch_dim1] = cc[i__ + (j + k * 
03126                         cc_dim2) * cc_dim1] + cc[i__ + (jc + k * cc_dim2) * 
03127                         cc_dim1];
03128                 ch[i__ + (k + jc * ch_dim2) * ch_dim1] = cc[i__ + (j + k * 
03129                         cc_dim2) * cc_dim1] - cc[i__ + (jc + k * cc_dim2) * 
03130                         cc_dim1];
03131 /* L107: */
03132             }
03133 /* L108: */
03134         }
03135 /* L109: */
03136     }
03137     i__1 = *ido;
03138     for (i__ = 1; i__ <= i__1; ++i__) {
03139         i__2 = *l1;
03140         for (k = 1; k <= i__2; ++k) {
03141             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * cc_dim2 + 1) * 
03142                     cc_dim1];
03143 /* L110: */
03144         }
03145 /* L111: */
03146     }
03147 L112:
03148     idl = 2 - *ido;
03149     inc = 0;
03150     i__1 = ipph;
03151     for (l = 2; l <= i__1; ++l) {
03152         lc = ipp2 - l;
03153         idl += *ido;
03154         i__2 = *idl1;
03155         for (ik = 1; ik <= i__2; ++ik) {
03156             c2[ik + l * c2_dim1] = ch2[ik + ch2_dim1] + wa[idl - 1] * ch2[ik 
03157                     + (ch2_dim1 << 1)];
03158             c2[ik + lc * c2_dim1] = wa[idl] * ch2[ik + *ip * ch2_dim1];
03159 /* L113: */
03160         }
03161         idlj = idl;
03162         inc += *ido;
03163         i__2 = ipph;
03164         for (j = 3; j <= i__2; ++j) {
03165             jc = ipp2 - j;
03166             idlj += inc;
03167             if (idlj > idp) {
03168                 idlj -= idp;
03169             }
03170             war = wa[idlj - 1];
03171             wai = wa[idlj];
03172             i__3 = *idl1;
03173             for (ik = 1; ik <= i__3; ++ik) {
03174                 c2[ik + l * c2_dim1] += war * ch2[ik + j * ch2_dim1];
03175                 c2[ik + lc * c2_dim1] += wai * ch2[ik + jc * ch2_dim1];
03176 /* L114: */
03177             }
03178 /* L115: */
03179         }
03180 /* L116: */
03181     }
03182     i__1 = ipph;
03183     for (j = 2; j <= i__1; ++j) {
03184         i__2 = *idl1;
03185         for (ik = 1; ik <= i__2; ++ik) {
03186             ch2[ik + ch2_dim1] += ch2[ik + j * ch2_dim1];
03187 /* L117: */
03188         }
03189 /* L118: */
03190     }
03191     i__1 = ipph;
03192     for (j = 2; j <= i__1; ++j) {
03193         jc = ipp2 - j;
03194         i__2 = *idl1;
03195         for (ik = 2; ik <= i__2; ik += 2) {
03196             ch2[ik - 1 + j * ch2_dim1] = c2[ik - 1 + j * c2_dim1] - c2[ik + 
03197                     jc * c2_dim1];
03198             ch2[ik - 1 + jc * ch2_dim1] = c2[ik - 1 + j * c2_dim1] + c2[ik + 
03199                     jc * c2_dim1];
03200             ch2[ik + j * ch2_dim1] = c2[ik + j * c2_dim1] + c2[ik - 1 + jc * 
03201                     c2_dim1];
03202             ch2[ik + jc * ch2_dim1] = c2[ik + j * c2_dim1] - c2[ik - 1 + jc * 
03203                     c2_dim1];
03204 /* L119: */
03205         }
03206 /* L120: */
03207     }
03208     *nac = 1;
03209     if (*ido == 2) {
03210         return 0;
03211     }
03212     *nac = 0;
03213     i__1 = *idl1;
03214     for (ik = 1; ik <= i__1; ++ik) {
03215         c2[ik + c2_dim1] = ch2[ik + ch2_dim1];
03216 /* L121: */
03217     }
03218     i__1 = *ip;
03219     for (j = 2; j <= i__1; ++j) {
03220         i__2 = *l1;
03221         for (k = 1; k <= i__2; ++k) {
03222             c1[(k + j * c1_dim2) * c1_dim1 + 1] = ch[(k + j * ch_dim2) * 
03223                     ch_dim1 + 1];
03224             c1[(k + j * c1_dim2) * c1_dim1 + 2] = ch[(k + j * ch_dim2) * 
03225                     ch_dim1 + 2];
03226 /* L122: */
03227         }
03228 /* L123: */
03229     }
03230     if (idot > *l1) {
03231         goto L127;
03232     }
03233     idij = 0;
03234     i__1 = *ip;
03235     for (j = 2; j <= i__1; ++j) {
03236         idij += 2;
03237         i__2 = *ido;
03238         for (i__ = 4; i__ <= i__2; i__ += 2) {
03239             idij += 2;
03240             i__3 = *l1;
03241             for (k = 1; k <= i__3; ++k) {
03242                 c1[i__ - 1 + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[
03243                         i__ - 1 + (k + j * ch_dim2) * ch_dim1] - wa[idij] * 
03244                         ch[i__ + (k + j * ch_dim2) * ch_dim1];
03245                 c1[i__ + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[i__ 
03246                         + (k + j * ch_dim2) * ch_dim1] + wa[idij] * ch[i__ - 
03247                         1 + (k + j * ch_dim2) * ch_dim1];
03248 /* L124: */
03249             }
03250 /* L125: */
03251         }
03252 /* L126: */
03253     }
03254     return 0;
03255 L127:
03256     idj = 2 - *ido;
03257     i__1 = *ip;
03258     for (j = 2; j <= i__1; ++j) {
03259         idj += *ido;
03260         i__2 = *l1;
03261         for (k = 1; k <= i__2; ++k) {
03262             idij = idj;
03263             i__3 = *ido;
03264             for (i__ = 4; i__ <= i__3; i__ += 2) {
03265                 idij += 2;
03266                 c1[i__ - 1 + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[
03267                         i__ - 1 + (k + j * ch_dim2) * ch_dim1] - wa[idij] * 
03268                         ch[i__ + (k + j * ch_dim2) * ch_dim1];
03269                 c1[i__ + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[i__ 
03270                         + (k + j * ch_dim2) * ch_dim1] + wa[idij] * ch[i__ - 
03271                         1 + (k + j * ch_dim2) * ch_dim1];
03272 /* L128: */
03273             }
03274 /* L129: */
03275         }
03276 /* L130: */
03277     }
03278     return 0;
03279 } /* passb_ */
03280 
03281 /* Subroutine */ int passb5_(integer *ido, integer *l1, doublereal *cc, 
03282         doublereal *ch, doublereal *wa1, doublereal *wa2, doublereal *wa3, 
03283         doublereal *wa4)
03284 {
03285     /* Initialized data */
03286 
03287     static doublereal tr11 = .309016994374947;
03288     static doublereal ti11 = .951056516295154;
03289     static doublereal tr12 = -.809016994374947;
03290     static doublereal ti12 = .587785252292473;
03291 
03292     /* System generated locals */
03293     integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
03294 
03295     /* Local variables */
03296     static integer i__, k;
03297     static doublereal ci2, ci3, ci4, ci5, di3, di4, di5, di2, cr2, cr3, cr5, 
03298             cr4, ti2, ti3, ti4, ti5, dr3, dr4, dr5, dr2, tr2, tr3, tr4, tr5;
03299 
03300 /* ----------------------------TJW */
03301 /* ----------------------------TJW */
03302     /* Parameter adjustments */
03303     ch_dim1 = *ido;
03304     ch_dim2 = *l1;
03305     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
03306     ch -= ch_offset;
03307     cc_dim1 = *ido;
03308     cc_offset = cc_dim1 * 6 + 1;
03309     cc -= cc_offset;
03310     --wa1;
03311     --wa2;
03312     --wa3;
03313     --wa4;
03314 
03315     /* Function Body */
03316     if (*ido != 2) {
03317         goto L102;
03318     }
03319     i__1 = *l1;
03320     for (k = 1; k <= i__1; ++k) {
03321         ti5 = cc[(k * 5 + 2) * cc_dim1 + 2] - cc[(k * 5 + 5) * cc_dim1 + 2];
03322         ti2 = cc[(k * 5 + 2) * cc_dim1 + 2] + cc[(k * 5 + 5) * cc_dim1 + 2];
03323         ti4 = cc[(k * 5 + 3) * cc_dim1 + 2] - cc[(k * 5 + 4) * cc_dim1 + 2];
03324         ti3 = cc[(k * 5 + 3) * cc_dim1 + 2] + cc[(k * 5 + 4) * cc_dim1 + 2];
03325         tr5 = cc[(k * 5 + 2) * cc_dim1 + 1] - cc[(k * 5 + 5) * cc_dim1 + 1];
03326         tr2 = cc[(k * 5 + 2) * cc_dim1 + 1] + cc[(k * 5 + 5) * cc_dim1 + 1];
03327         tr4 = cc[(k * 5 + 3) * cc_dim1 + 1] - cc[(k * 5 + 4) * cc_dim1 + 1];
03328         tr3 = cc[(k * 5 + 3) * cc_dim1 + 1] + cc[(k * 5 + 4) * cc_dim1 + 1];
03329         ch[(k + ch_dim2) * ch_dim1 + 1] = cc[(k * 5 + 1) * cc_dim1 + 1] + tr2 
03330                 + tr3;
03331         ch[(k + ch_dim2) * ch_dim1 + 2] = cc[(k * 5 + 1) * cc_dim1 + 2] + ti2 
03332                 + ti3;
03333         cr2 = cc[(k * 5 + 1) * cc_dim1 + 1] + tr11 * tr2 + tr12 * tr3;
03334         ci2 = cc[(k * 5 + 1) * cc_dim1 + 2] + tr11 * ti2 + tr12 * ti3;
03335         cr3 = cc[(k * 5 + 1) * cc_dim1 + 1] + tr12 * tr2 + tr11 * tr3;
03336         ci3 = cc[(k * 5 + 1) * cc_dim1 + 2] + tr12 * ti2 + tr11 * ti3;
03337         cr5 = ti11 * tr5 + ti12 * tr4;
03338         ci5 = ti11 * ti5 + ti12 * ti4;
03339         cr4 = ti12 * tr5 - ti11 * tr4;
03340         ci4 = ti12 * ti5 - ti11 * ti4;
03341         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = cr2 - ci5;
03342         ch[(k + ch_dim2 * 5) * ch_dim1 + 1] = cr2 + ci5;
03343         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 2] = ci2 + cr5;
03344         ch[(k + ch_dim2 * 3) * ch_dim1 + 2] = ci3 + cr4;
03345         ch[(k + ch_dim2 * 3) * ch_dim1 + 1] = cr3 - ci4;
03346         ch[(k + (ch_dim2 << 2)) * ch_dim1 + 1] = cr3 + ci4;
03347         ch[(k + (ch_dim2 << 2)) * ch_dim1 + 2] = ci3 - cr4;
03348         ch[(k + ch_dim2 * 5) * ch_dim1 + 2] = ci2 - cr5;
03349 /* L101: */
03350     }
03351     return 0;
03352 L102:
03353     i__1 = *l1;
03354     for (k = 1; k <= i__1; ++k) {
03355         i__2 = *ido;
03356         for (i__ = 2; i__ <= i__2; i__ += 2) {
03357             ti5 = cc[i__ + (k * 5 + 2) * cc_dim1] - cc[i__ + (k * 5 + 5) * 
03358                     cc_dim1];
03359             ti2 = cc[i__ + (k * 5 + 2) * cc_dim1] + cc[i__ + (k * 5 + 5) * 
03360                     cc_dim1];
03361             ti4 = cc[i__ + (k * 5 + 3) * cc_dim1] - cc[i__ + (k * 5 + 4) * 
03362                     cc_dim1];
03363             ti3 = cc[i__ + (k * 5 + 3) * cc_dim1] + cc[i__ + (k * 5 + 4) * 
03364                     cc_dim1];
03365             tr5 = cc[i__ - 1 + (k * 5 + 2) * cc_dim1] - cc[i__ - 1 + (k * 5 + 
03366                     5) * cc_dim1];
03367             tr2 = cc[i__ - 1 + (k * 5 + 2) * cc_dim1] + cc[i__ - 1 + (k * 5 + 
03368                     5) * cc_dim1];
03369             tr4 = cc[i__ - 1 + (k * 5 + 3) * cc_dim1] - cc[i__ - 1 + (k * 5 + 
03370                     4) * cc_dim1];
03371             tr3 = cc[i__ - 1 + (k * 5 + 3) * cc_dim1] + cc[i__ - 1 + (k * 5 + 
03372                     4) * cc_dim1];
03373             ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = cc[i__ - 1 + (k * 5 + 1) *
03374                      cc_dim1] + tr2 + tr3;
03375             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * 5 + 1) * 
03376                     cc_dim1] + ti2 + ti3;
03377             cr2 = cc[i__ - 1 + (k * 5 + 1) * cc_dim1] + tr11 * tr2 + tr12 * 
03378                     tr3;
03379             ci2 = cc[i__ + (k * 5 + 1) * cc_dim1] + tr11 * ti2 + tr12 * ti3;
03380             cr3 = cc[i__ - 1 + (k * 5 + 1) * cc_dim1] + tr12 * tr2 + tr11 * 
03381                     tr3;
03382             ci3 = cc[i__ + (k * 5 + 1) * cc_dim1] + tr12 * ti2 + tr11 * ti3;
03383             cr5 = ti11 * tr5 + ti12 * tr4;
03384             ci5 = ti11 * ti5 + ti12 * ti4;
03385             cr4 = ti12 * tr5 - ti11 * tr4;
03386             ci4 = ti12 * ti5 - ti11 * ti4;
03387             dr3 = cr3 - ci4;
03388             dr4 = cr3 + ci4;
03389             di3 = ci3 + cr4;
03390             di4 = ci3 - cr4;
03391             dr5 = cr2 + ci5;
03392             dr2 = cr2 - ci5;
03393             di5 = ci2 - cr5;
03394             di2 = ci2 + cr5;
03395             ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * dr2 
03396                     - wa1[i__] * di2;
03397             ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * di2 + 
03398                     wa1[i__] * dr2;
03399             ch[i__ - 1 + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 1] * dr3 - 
03400                     wa2[i__] * di3;
03401             ch[i__ + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 1] * di3 + wa2[
03402                     i__] * dr3;
03403             ch[i__ - 1 + (k + (ch_dim2 << 2)) * ch_dim1] = wa3[i__ - 1] * dr4 
03404                     - wa3[i__] * di4;
03405             ch[i__ + (k + (ch_dim2 << 2)) * ch_dim1] = wa3[i__ - 1] * di4 + 
03406                     wa3[i__] * dr4;
03407             ch[i__ - 1 + (k + ch_dim2 * 5) * ch_dim1] = wa4[i__ - 1] * dr5 - 
03408                     wa4[i__] * di5;
03409             ch[i__ + (k + ch_dim2 * 5) * ch_dim1] = wa4[i__ - 1] * di5 + wa4[
03410                     i__] * dr5;
03411 /* L103: */
03412         }
03413 /* L104: */
03414     }
03415     return 0;
03416 } /* passb5_ */
03417 
03418 /* Subroutine */ int passb3_(integer *ido, integer *l1, doublereal *cc, 
03419         doublereal *ch, doublereal *wa1, doublereal *wa2)
03420 {
03421     /* Initialized data */
03422 
03423     static doublereal taur = -.5;
03424     static doublereal taui = .866025403784439;
03425 
03426     /* System generated locals */
03427     integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
03428 
03429     /* Local variables */
03430     static integer i__, k;
03431     static doublereal ci2, ci3, di2, di3, cr2, cr3, dr2, dr3, ti2, tr2;
03432 
03433 /* ----------------------------TJW */
03434 /* ----------------------------TJW */
03435     /* Parameter adjustments */
03436     ch_dim1 = *ido;
03437     ch_dim2 = *l1;
03438     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
03439     ch -= ch_offset;
03440     cc_dim1 = *ido;
03441     cc_offset = (cc_dim1 << 2) + 1;
03442     cc -= cc_offset;
03443     --wa1;
03444     --wa2;
03445 
03446     /* Function Body */
03447     if (*ido != 2) {
03448         goto L102;
03449     }
03450     i__1 = *l1;
03451     for (k = 1; k <= i__1; ++k) {
03452         tr2 = cc[(k * 3 + 2) * cc_dim1 + 1] + cc[(k * 3 + 3) * cc_dim1 + 1];
03453         cr2 = cc[(k * 3 + 1) * cc_dim1 + 1] + taur * tr2;
03454         ch[(k + ch_dim2) * ch_dim1 + 1] = cc[(k * 3 + 1) * cc_dim1 + 1] + tr2;
03455         ti2 = cc[(k * 3 + 2) * cc_dim1 + 2] + cc[(k * 3 + 3) * cc_dim1 + 2];
03456         ci2 = cc[(k * 3 + 1) * cc_dim1 + 2] + taur * ti2;
03457         ch[(k + ch_dim2) * ch_dim1 + 2] = cc[(k * 3 + 1) * cc_dim1 + 2] + ti2;
03458         cr3 = taui * (cc[(k * 3 + 2) * cc_dim1 + 1] - cc[(k * 3 + 3) * 
03459                 cc_dim1 + 1]);
03460         ci3 = taui * (cc[(k * 3 + 2) * cc_dim1 + 2] - cc[(k * 3 + 3) * 
03461                 cc_dim1 + 2]);
03462         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = cr2 - ci3;
03463         ch[(k + ch_dim2 * 3) * ch_dim1 + 1] = cr2 + ci3;
03464         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 2] = ci2 + cr3;
03465         ch[(k + ch_dim2 * 3) * ch_dim1 + 2] = ci2 - cr3;
03466 /* L101: */
03467     }
03468     return 0;
03469 L102:
03470     i__1 = *l1;
03471     for (k = 1; k <= i__1; ++k) {
03472         i__2 = *ido;
03473         for (i__ = 2; i__ <= i__2; i__ += 2) {
03474             tr2 = cc[i__ - 1 + (k * 3 + 2) * cc_dim1] + cc[i__ - 1 + (k * 3 + 
03475                     3) * cc_dim1];
03476             cr2 = cc[i__ - 1 + (k * 3 + 1) * cc_dim1] + taur * tr2;
03477             ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = cc[i__ - 1 + (k * 3 + 1) *
03478                      cc_dim1] + tr2;
03479             ti2 = cc[i__ + (k * 3 + 2) * cc_dim1] + cc[i__ + (k * 3 + 3) * 
03480                     cc_dim1];
03481             ci2 = cc[i__ + (k * 3 + 1) * cc_dim1] + taur * ti2;
03482             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * 3 + 1) * 
03483                     cc_dim1] + ti2;
03484             cr3 = taui * (cc[i__ - 1 + (k * 3 + 2) * cc_dim1] - cc[i__ - 1 + (
03485                     k * 3 + 3) * cc_dim1]);
03486             ci3 = taui * (cc[i__ + (k * 3 + 2) * cc_dim1] - cc[i__ + (k * 3 + 
03487                     3) * cc_dim1]);
03488             dr2 = cr2 - ci3;
03489             dr3 = cr2 + ci3;
03490             di2 = ci2 + cr3;
03491             di3 = ci2 - cr3;
03492             ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * di2 + 
03493                     wa1[i__] * dr2;
03494             ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * dr2 
03495                     - wa1[i__] * di2;
03496             ch[i__ + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 1] * di3 + wa2[
03497                     i__] * dr3;
03498             ch[i__ - 1 + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 1] * dr3 - 
03499                     wa2[i__] * di3;
03500 /* L103: */
03501         }
03502 /* L104: */
03503     }
03504     return 0;
03505 } /* passb3_ */
03506 
03507 /* Subroutine */ int passb2_(integer *ido, integer *l1, doublereal *cc, 
03508         doublereal *ch, doublereal *wa1)
03509 {
03510     /* System generated locals */
03511     integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
03512 
03513     /* Local variables */
03514     static integer i__, k;
03515     static doublereal ti2, tr2;
03516 
03517 /* ----------------------------TJW */
03518 /* ----------------------------TJW */
03519     /* Parameter adjustments */
03520     ch_dim1 = *ido;
03521     ch_dim2 = *l1;
03522     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
03523     ch -= ch_offset;
03524     cc_dim1 = *ido;
03525     cc_offset = cc_dim1 * 3 + 1;
03526     cc -= cc_offset;
03527     --wa1;
03528 
03529     /* Function Body */
03530     if (*ido > 2) {
03531         goto L102;
03532     }
03533     i__1 = *l1;
03534     for (k = 1; k <= i__1; ++k) {
03535         ch[(k + ch_dim2) * ch_dim1 + 1] = cc[((k << 1) + 1) * cc_dim1 + 1] + 
03536                 cc[((k << 1) + 2) * cc_dim1 + 1];
03537         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = cc[((k << 1) + 1) * cc_dim1 
03538                 + 1] - cc[((k << 1) + 2) * cc_dim1 + 1];
03539         ch[(k + ch_dim2) * ch_dim1 + 2] = cc[((k << 1) + 1) * cc_dim1 + 2] + 
03540                 cc[((k << 1) + 2) * cc_dim1 + 2];
03541         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 2] = cc[((k << 1) + 1) * cc_dim1 
03542                 + 2] - cc[((k << 1) + 2) * cc_dim1 + 2];
03543 /* L101: */
03544     }
03545     return 0;
03546 L102:
03547     i__1 = *l1;
03548     for (k = 1; k <= i__1; ++k) {
03549         i__2 = *ido;
03550         for (i__ = 2; i__ <= i__2; i__ += 2) {
03551             ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = cc[i__ - 1 + ((k << 1) + 
03552                     1) * cc_dim1] + cc[i__ - 1 + ((k << 1) + 2) * cc_dim1];
03553             tr2 = cc[i__ - 1 + ((k << 1) + 1) * cc_dim1] - cc[i__ - 1 + ((k <<
03554                      1) + 2) * cc_dim1];
03555             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + ((k << 1) + 1) * 
03556                     cc_dim1] + cc[i__ + ((k << 1) + 2) * cc_dim1];
03557             ti2 = cc[i__ + ((k << 1) + 1) * cc_dim1] - cc[i__ + ((k << 1) + 2)
03558                      * cc_dim1];
03559             ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * ti2 + 
03560                     wa1[i__] * tr2;
03561             ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * tr2 
03562                     - wa1[i__] * ti2;
03563 /* L103: */
03564         }
03565 /* L104: */
03566     }
03567     return 0;
03568 } /* passb2_ */
03569 
03570 /* Subroutine */ int passb4_(integer *ido, integer *l1, doublereal *cc, 
03571         doublereal *ch, doublereal *wa1, doublereal *wa2, doublereal *wa3)
03572 {
03573     /* System generated locals */
03574     integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
03575 
03576     /* Local variables */
03577     static integer i__, k;
03578     static doublereal ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, 
03579             tr2, tr3, tr4;
03580 
03581 /* ----------------------------TJW */
03582 /* ----------------------------TJW */
03583     /* Parameter adjustments */
03584     ch_dim1 = *ido;
03585     ch_dim2 = *l1;
03586     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
03587     ch -= ch_offset;
03588     cc_dim1 = *ido;
03589     cc_offset = cc_dim1 * 5 + 1;
03590     cc -= cc_offset;
03591     --wa1;
03592     --wa2;
03593     --wa3;
03594 
03595     /* Function Body */
03596     if (*ido != 2) {
03597         goto L102;
03598     }
03599     i__1 = *l1;
03600     for (k = 1; k <= i__1; ++k) {
03601         ti1 = cc[((k << 2) + 1) * cc_dim1 + 2] - cc[((k << 2) + 3) * cc_dim1 
03602                 + 2];
03603         ti2 = cc[((k << 2) + 1) * cc_dim1 + 2] + cc[((k << 2) + 3) * cc_dim1 
03604                 + 2];
03605         tr4 = cc[((k << 2) + 4) * cc_dim1 + 2] - cc[((k << 2) + 2) * cc_dim1 
03606                 + 2];
03607         ti3 = cc[((k << 2) + 2) * cc_dim1 + 2] + cc[((k << 2) + 4) * cc_dim1 
03608                 + 2];
03609         tr1 = cc[((k << 2) + 1) * cc_dim1 + 1] - cc[((k << 2) + 3) * cc_dim1 
03610                 + 1];
03611         tr2 = cc[((k << 2) + 1) * cc_dim1 + 1] + cc[((k << 2) + 3) * cc_dim1 
03612                 + 1];
03613         ti4 = cc[((k << 2) + 2) * cc_dim1 + 1] - cc[((k << 2) + 4) * cc_dim1 
03614                 + 1];
03615         tr3 = cc[((k << 2) + 2) * cc_dim1 + 1] + cc[((k << 2) + 4) * cc_dim1 
03616                 + 1];
03617         ch[(k + ch_dim2) * ch_dim1 + 1] = tr2 + tr3;
03618         ch[(k + ch_dim2 * 3) * ch_dim1 + 1] = tr2 - tr3;
03619         ch[(k + ch_dim2) * ch_dim1 + 2] = ti2 + ti3;
03620         ch[(k + ch_dim2 * 3) * ch_dim1 + 2] = ti2 - ti3;
03621         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = tr1 + tr4;
03622         ch[(k + (ch_dim2 << 2)) * ch_dim1 + 1] = tr1 - tr4;
03623         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 2] = ti1 + ti4;
03624         ch[(k + (ch_dim2 << 2)) * ch_dim1 + 2] = ti1 - ti4;
03625 /* L101: */
03626     }
03627     return 0;
03628 L102:
03629     i__1 = *l1;
03630     for (k = 1; k <= i__1; ++k) {
03631         i__2 = *ido;
03632         for (i__ = 2; i__ <= i__2; i__ += 2) {
03633             ti1 = cc[i__ + ((k << 2) + 1) * cc_dim1] - cc[i__ + ((k << 2) + 3)
03634                      * cc_dim1];
03635             ti2 = cc[i__ + ((k << 2) + 1) * cc_dim1] + cc[i__ + ((k << 2) + 3)
03636                      * cc_dim1];
03637             ti3 = cc[i__ + ((k << 2) + 2) * cc_dim1] + cc[i__ + ((k << 2) + 4)
03638                      * cc_dim1];
03639             tr4 = cc[i__ + ((k << 2) + 4) * cc_dim1] - cc[i__ + ((k << 2) + 2)
03640                      * cc_dim1];
03641             tr1 = cc[i__ - 1 + ((k << 2) + 1) * cc_dim1] - cc[i__ - 1 + ((k <<
03642                      2) + 3) * cc_dim1];
03643             tr2 = cc[i__ - 1 + ((k << 2) + 1) * cc_dim1] + cc[i__ - 1 + ((k <<
03644                      2) + 3) * cc_dim1];
03645             ti4 = cc[i__ - 1 + ((k << 2) + 2) * cc_dim1] - cc[i__ - 1 + ((k <<
03646                      2) + 4) * cc_dim1];
03647             tr3 = cc[i__ - 1 + ((k << 2) + 2) * cc_dim1] + cc[i__ - 1 + ((k <<
03648                      2) + 4) * cc_dim1];
03649             ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = tr2 + tr3;
03650             cr3 = tr2 - tr3;
03651             ch[i__ + (k + ch_dim2) * ch_dim1] = ti2 + ti3;
03652             ci3 = ti2 - ti3;
03653             cr2 = tr1 + tr4;
03654             cr4 = tr1 - tr4;
03655             ci2 = ti1 + ti4;
03656             ci4 = ti1 - ti4;
03657             ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * cr2 
03658                     - wa1[i__] * ci2;
03659             ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * ci2 + 
03660                     wa1[i__] * cr2;
03661             ch[i__ - 1 + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 1] * cr3 - 
03662                     wa2[i__] * ci3;
03663             ch[i__ + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 1] * ci3 + wa2[
03664                     i__] * cr3;
03665             ch[i__ - 1 + (k + (ch_dim2 << 2)) * ch_dim1] = wa3[i__ - 1] * cr4 
03666                     - wa3[i__] * ci4;
03667             ch[i__ + (k + (ch_dim2 << 2)) * ch_dim1] = wa3[i__ - 1] * ci4 + 
03668                     wa3[i__] * cr4;
03669 /* L103: */
03670         }
03671 /* L104: */
03672     }
03673     return 0;
03674 } /* passb4_ */
03675 
03676 /* Subroutine */ int sinti_(integer *n, doublereal *wsave)
03677 {
03678     /* Initialized data */
03679 
03680     static doublereal pi = 3.14159265358979;
03681 
03682     /* System generated locals */
03683     integer i__1;
03684 
03685     /* Builtin functions */
03686     double sin(doublereal);
03687 
03688     /* Local variables */
03689     static integer k;
03690     extern /* Subroutine */ int rffti_(integer *, doublereal *);
03691     static doublereal dt;
03692     static integer np1, ns2;
03693 
03694 /* ----------------------------TJW */
03695 /* ----------------------------TJW */
03696     /* Parameter adjustments */
03697     --wsave;
03698 
03699     /* Function Body */
03700     if (*n <= 1) {
03701         return 0;
03702     }
03703     ns2 = *n / 2;
03704     np1 = *n + 1;
03705     dt = pi / (real) np1;
03706     i__1 = ns2;
03707     for (k = 1; k <= i__1; ++k) {
03708         wsave[k] = sin(k * dt) * (float)2.;
03709 /* L101: */
03710     }
03711     rffti_(&np1, &wsave[ns2 + 1]);
03712     return 0;
03713 } /* sinti_ */
03714 
03715 /* Subroutine */ int sint_(integer *n, doublereal *x, doublereal *wsave)
03716 {
03717     extern /* Subroutine */ int sint1_(integer *, doublereal *, doublereal *, 
03718             doublereal *, doublereal *, doublereal *);
03719     static integer np1, iw1, iw2, iw3;
03720 
03721 /* ----------------------------TJW */
03722 /* ----------------------------TJW */
03723     /* Parameter adjustments */
03724     --wsave;
03725     --x;
03726 
03727     /* Function Body */
03728     np1 = *n + 1;
03729     iw1 = *n / 2 + 1;
03730     iw2 = iw1 + np1;
03731     iw3 = iw2 + np1;
03732     sint1_(n, &x[1], &wsave[1], &wsave[iw1], &wsave[iw2], &wsave[iw3]);
03733     return 0;
03734 } /* sint_ */
03735 
03736 /* Subroutine */ int sint1_(integer *n, doublereal *war, doublereal *was, 
03737         doublereal *xh, doublereal *x, integer *ifac)
03738 {
03739     /* Initialized data */
03740 
03741     static doublereal sqrt3 = 1.73205080756888;
03742 
03743     /* System generated locals */
03744     integer i__1;
03745 
03746     /* Local variables */
03747     static integer modn, i__, k;
03748     static doublereal xhold, t1, t2;
03749     extern /* Subroutine */ int rfftf1_(integer *, doublereal *, doublereal *,
03750              doublereal *, integer *);
03751     static integer kc, np1, ns2;
03752 
03753 /* ----------------------------TJW */
03754 /* ----------------------------TJW */
03755     /* Parameter adjustments */
03756     --ifac;
03757     --x;
03758     --xh;
03759     --was;
03760     --war;
03761 
03762     /* Function Body */
03763     i__1 = *n;
03764     for (i__ = 1; i__ <= i__1; ++i__) {
03765         xh[i__] = war[i__];
03766         war[i__] = x[i__];
03767 /* L100: */
03768     }
03769     if ((i__1 = *n - 2) < 0) {
03770         goto L101;
03771     } else if (i__1 == 0) {
03772         goto L102;
03773     } else {
03774         goto L103;
03775     }
03776 L101:
03777     xh[1] += xh[1];
03778     goto L106;
03779 L102:
03780     xhold = sqrt3 * (xh[1] + xh[2]);
03781     xh[2] = sqrt3 * (xh[1] - xh[2]);
03782     xh[1] = xhold;
03783     goto L106;
03784 L103:
03785     np1 = *n + 1;
03786     ns2 = *n / 2;
03787     x[1] = (float)0.;
03788     i__1 = ns2;
03789     for (k = 1; k <= i__1; ++k) {
03790         kc = np1 - k;
03791         t1 = xh[k] - xh[kc];
03792         t2 = was[k] * (xh[k] + xh[kc]);
03793         x[k + 1] = t1 + t2;
03794         x[kc + 1] = t2 - t1;
03795 /* L104: */
03796     }
03797     modn = *n % 2;
03798     if (modn != 0) {
03799         x[ns2 + 2] = xh[ns2 + 1] * (float)4.;
03800     }
03801     rfftf1_(&np1, &x[1], &xh[1], &war[1], &ifac[1]);
03802     xh[1] = x[1] * (float).5;
03803     i__1 = *n;
03804     for (i__ = 3; i__ <= i__1; i__ += 2) {
03805         xh[i__ - 1] = -x[i__];
03806         xh[i__] = xh[i__ - 2] + x[i__ - 1];
03807 /* L105: */
03808     }
03809     if (modn != 0) {
03810         goto L106;
03811     }
03812     xh[*n] = -x[*n + 1];
03813 L106:
03814     i__1 = *n;
03815     for (i__ = 1; i__ <= i__1; ++i__) {
03816         x[i__] = war[i__];
03817         war[i__] = xh[i__];
03818 /* L107: */
03819     }
03820     return 0;
03821 } /* sint1_ */
03822 
03823 /* ---------------------------SINGLE PRECISION---------------------------- */
03824 /* Subroutine */ int frffti_(integer *n, real *wsave)
03825 {
03826     extern /* Subroutine */ int frffti1_(integer *, real *, real *);
03827 
03828 /* ----------------------------TJW */
03829 /* ----------------------------TJW */
03830     /* Parameter adjustments */
03831     --wsave;
03832 
03833     /* Function Body */
03834     if (*n == 1) {
03835         return 0;
03836     }
03837     frffti1_(n, &wsave[*n + 1], &wsave[(*n << 1) + 1]);
03838     return 0;
03839 } /* frffti_ */
03840 
03841 /* Subroutine */ int frffti1_(integer *n, real *wa, integer *ifac)
03842 {
03843     /* Initialized data */
03844 
03845     static integer ntryh[4] = { 4,2,3,5 };
03846 
03847     /* System generated locals */
03848     integer i__1, i__2, i__3;
03849 
03850     /* Builtin functions */
03851     double cos(doublereal), sin(doublereal);
03852 
03853     /* Local variables */
03854     static real argh;
03855     static integer ntry, i__, j;
03856     static real argld;
03857     static integer k1, l1, l2, ib;
03858     static real fi;
03859     static integer ld, ii, nf, ip, nl, is, nq, nr;
03860     static real arg;
03861     static integer ido, ipm;
03862     static real tpi;
03863     static integer nfm1;
03864 
03865 /* ----------------------------TJW */
03866 /* ----------------------------TJW */
03867     /* Parameter adjustments */
03868     --ifac;
03869     --wa;
03870 
03871     /* Function Body */
03872     nl = *n;
03873     nf = 0;
03874     j = 0;
03875 L101:
03876     ++j;
03877     if (j - 4 <= 0) {
03878         goto L102;
03879     } else {
03880         goto L103;
03881     }
03882 L102:
03883     ntry = ntryh[j - 1];
03884     goto L104;
03885 L103:
03886     ntry += 2;
03887 L104:
03888     nq = nl / ntry;
03889     nr = nl - ntry * nq;
03890     if (nr != 0) {
03891         goto L101;
03892     } else {
03893         goto L105;
03894     }
03895 L105:
03896     ++nf;
03897     ifac[nf + 2] = ntry;
03898     nl = nq;
03899     if (ntry != 2) {
03900         goto L107;
03901     }
03902     if (nf == 1) {
03903         goto L107;
03904     }
03905     i__1 = nf;
03906     for (i__ = 2; i__ <= i__1; ++i__) {
03907         ib = nf - i__ + 2;
03908         ifac[ib + 2] = ifac[ib + 1];
03909 /* L106: */
03910     }
03911     ifac[3] = 2;
03912 L107:
03913     if (nl != 1) {
03914         goto L104;
03915     }
03916     ifac[1] = *n;
03917     ifac[2] = nf;
03918     tpi = (float)6.28318530717959;
03919     argh = tpi / (real) (*n);
03920     is = 0;
03921     nfm1 = nf - 1;
03922     l1 = 1;
03923     if (nfm1 == 0) {
03924         return 0;
03925     }
03926     i__1 = nfm1;
03927     for (k1 = 1; k1 <= i__1; ++k1) {
03928         ip = ifac[k1 + 2];
03929         ld = 0;
03930         l2 = l1 * ip;
03931         ido = *n / l2;
03932         ipm = ip - 1;
03933         i__2 = ipm;
03934         for (j = 1; j <= i__2; ++j) {
03935             ld += l1;
03936             i__ = is;
03937             argld = (real) ld * argh;
03938             fi = (float)0.;
03939             i__3 = ido;
03940             for (ii = 3; ii <= i__3; ii += 2) {
03941                 i__ += 2;
03942                 fi += (float)1.;
03943                 arg = fi * argld;
03944                 wa[i__ - 1] = cos(arg);
03945                 wa[i__] = sin(arg);
03946 /* L108: */
03947             }
03948             is += ido;
03949 /* L109: */
03950         }
03951         l1 = l2;
03952 /* L110: */
03953     }
03954     return 0;
03955 } /* frffti1_ */
03956 
03957 /* Subroutine */ int frfftf_(integer *n, real *r__, real *wsave)
03958 {
03959     extern /* Subroutine */ int frfftf1_(integer *, real *, real *, real *, 
03960             real *);
03961 
03962 /* ----------------------------TJW */
03963 /* ----------------------------TJW */
03964     /* Parameter adjustments */
03965     --wsave;
03966     --r__;
03967 
03968     /* Function Body */
03969     if (*n == 1) {
03970         return 0;
03971     }
03972     frfftf1_(n, &r__[1], &wsave[1], &wsave[*n + 1], &wsave[(*n << 1) + 1]);
03973     return 0;
03974 } /* frfftf_ */
03975 
03976 /* Subroutine */ int frfftf1_(integer *n, real *c__, real *ch, real *wa, 
03977         integer *ifac)
03978 {
03979     /* System generated locals */
03980     integer i__1;
03981 
03982     /* Local variables */
03983     static integer i__, k1, l1, l2;
03984     extern /* Subroutine */ int fradf2_(integer *, integer *, real *, real *, 
03985             real *), fradf3_(integer *, integer *, real *, real *, real *, 
03986             real *), fradf4_(integer *, integer *, real *, real *, real *, 
03987             real *, real *), fradf5_(integer *, integer *, real *, real *, 
03988             real *, real *, real *, real *);
03989     static integer na, kh, nf, ip;
03990     extern /* Subroutine */ int fradfg_(integer *, integer *, integer *, 
03991             integer *, real *, real *, real *, real *, real *, real *);
03992     static integer iw, ix2, ix3, ix4, ido, idl1;
03993 
03994 /* ----------------------------TJW */
03995 /* ----------------------------TJW */
03996     /* Parameter adjustments */
03997     --ifac;
03998     --wa;
03999     --ch;
04000     --c__;
04001 
04002     /* Function Body */
04003     nf = ifac[2];
04004     na = 1;
04005     l2 = *n;
04006     iw = *n;
04007     i__1 = nf;
04008     for (k1 = 1; k1 <= i__1; ++k1) {
04009         kh = nf - k1;
04010         ip = ifac[kh + 3];
04011         l1 = l2 / ip;
04012         ido = *n / l2;
04013         idl1 = ido * l1;
04014         iw -= (ip - 1) * ido;
04015         na = 1 - na;
04016         if (ip != 4) {
04017             goto L102;
04018         }
04019         ix2 = iw + ido;
04020         ix3 = ix2 + ido;
04021         if (na != 0) {
04022             goto L101;
04023         }
04024         fradf4_(&ido, &l1, &c__[1], &ch[1], &wa[iw], &wa[ix2], &wa[ix3]);
04025         goto L110;
04026 L101:
04027         fradf4_(&ido, &l1, &ch[1], &c__[1], &wa[iw], &wa[ix2], &wa[ix3]);
04028         goto L110;
04029 L102:
04030         if (ip != 2) {
04031             goto L104;
04032         }
04033         if (na != 0) {
04034             goto L103;
04035         }
04036         fradf2_(&ido, &l1, &c__[1], &ch[1], &wa[iw]);
04037         goto L110;
04038 L103:
04039         fradf2_(&ido, &l1, &ch[1], &c__[1], &wa[iw]);
04040         goto L110;
04041 L104:
04042         if (ip != 3) {
04043             goto L106;
04044         }
04045         ix2 = iw + ido;
04046         if (na != 0) {
04047             goto L105;
04048         }
04049         fradf3_(&ido, &l1, &c__[1], &ch[1], &wa[iw], &wa[ix2]);
04050         goto L110;
04051 L105:
04052         fradf3_(&ido, &l1, &ch[1], &c__[1], &wa[iw], &wa[ix2]);
04053         goto L110;
04054 L106:
04055         if (ip != 5) {
04056             goto L108;
04057         }
04058         ix2 = iw + ido;
04059         ix3 = ix2 + ido;
04060         ix4 = ix3 + ido;
04061         if (na != 0) {
04062             goto L107;
04063         }
04064         fradf5_(&ido, &l1, &c__[1], &ch[1], &wa[iw], &wa[ix2], &wa[ix3], &wa[
04065                 ix4]);
04066         goto L110;
04067 L107:
04068         fradf5_(&ido, &l1, &ch[1], &c__[1], &wa[iw], &wa[ix2], &wa[ix3], &wa[
04069                 ix4]);
04070         goto L110;
04071 L108:
04072         if (ido == 1) {
04073             na = 1 - na;
04074         }
04075         if (na != 0) {
04076             goto L109;
04077         }
04078         fradfg_(&ido, &ip, &l1, &idl1, &c__[1], &c__[1], &c__[1], &ch[1], &ch[
04079                 1], &wa[iw]);
04080         na = 1;
04081         goto L110;
04082 L109:
04083         fradfg_(&ido, &ip, &l1, &idl1, &ch[1], &ch[1], &ch[1], &c__[1], &c__[
04084                 1], &wa[iw]);
04085         na = 0;
04086 L110:
04087         l2 = l1;
04088 /* L111: */
04089     }
04090     if (na == 1) {
04091         return 0;
04092     }
04093     i__1 = *n;
04094     for (i__ = 1; i__ <= i__1; ++i__) {
04095         c__[i__] = ch[i__];
04096 /* L112: */
04097     }
04098     return 0;
04099 } /* frfftf1_ */
04100 
04101 /* Subroutine */ int fradfg_(integer *ido, integer *ip, integer *l1, integer *
04102         idl1, real *cc, real *c1, real *c2, real *ch, real *ch2, real *wa)
04103 {
04104     /* Initialized data */
04105 
04106     static real tpi = (float)6.28318530717959;
04107 
04108     /* System generated locals */
04109     integer ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1,
04110              c1_dim2, c1_offset, c2_dim1, c2_offset, ch2_dim1, ch2_offset, 
04111             i__1, i__2, i__3;
04112 
04113     /* Builtin functions */
04114     double cos(doublereal), sin(doublereal);
04115 
04116     /* Local variables */
04117     static integer idij, ipph, i__, j, k, l, j2, ic, jc, lc, ik, is;
04118     static real dc2, ai1, ai2, ar1, ar2, ds2;
04119     static integer nbd;
04120     static real dcp, arg, dsp, ar1h, ar2h;
04121     static integer idp2, ipp2;
04122 
04123 /* ----------------------------TJW */
04124 /* ----------------------------TJW */
04125     /* Parameter adjustments */
04126     ch_dim1 = *ido;
04127     ch_dim2 = *l1;
04128     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
04129     ch -= ch_offset;
04130     c1_dim1 = *ido;
04131     c1_dim2 = *l1;
04132     c1_offset = c1_dim1 * (c1_dim2 + 1) + 1;
04133     c1 -= c1_offset;
04134     cc_dim1 = *ido;
04135     cc_dim2 = *ip;
04136     cc_offset = cc_dim1 * (cc_dim2 + 1) + 1;
04137     cc -= cc_offset;
04138     ch2_dim1 = *idl1;
04139     ch2_offset = ch2_dim1 + 1;
04140     ch2 -= ch2_offset;
04141     c2_dim1 = *idl1;
04142     c2_offset = c2_dim1 + 1;
04143     c2 -= c2_offset;
04144     --wa;
04145 
04146     /* Function Body */
04147     arg = tpi / (real) (*ip);
04148     dcp = cos(arg);
04149     dsp = sin(arg);
04150     ipph = (*ip + 1) / 2;
04151     ipp2 = *ip + 2;
04152     idp2 = *ido + 2;
04153     nbd = (*ido - 1) / 2;
04154     if (*ido == 1) {
04155         goto L119;
04156     }
04157     i__1 = *idl1;
04158     for (ik = 1; ik <= i__1; ++ik) {
04159         ch2[ik + ch2_dim1] = c2[ik + c2_dim1];
04160 /* L101: */
04161     }
04162     i__1 = *ip;
04163     for (j = 2; j <= i__1; ++j) {
04164         i__2 = *l1;
04165         for (k = 1; k <= i__2; ++k) {
04166             ch[(k + j * ch_dim2) * ch_dim1 + 1] = c1[(k + j * c1_dim2) * 
04167                     c1_dim1 + 1];
04168 /* L102: */
04169         }
04170 /* L103: */
04171     }
04172     if (nbd > *l1) {
04173         goto L107;
04174     }
04175     is = -(*ido);
04176     i__1 = *ip;
04177     for (j = 2; j <= i__1; ++j) {
04178         is += *ido;
04179         idij = is;
04180         i__2 = *ido;
04181         for (i__ = 3; i__ <= i__2; i__ += 2) {
04182             idij += 2;
04183             i__3 = *l1;
04184             for (k = 1; k <= i__3; ++k) {
04185                 ch[i__ - 1 + (k + j * ch_dim2) * ch_dim1] = wa[idij - 1] * c1[
04186                         i__ - 1 + (k + j * c1_dim2) * c1_dim1] + wa[idij] * 
04187                         c1[i__ + (k + j * c1_dim2) * c1_dim1];
04188                 ch[i__ + (k + j * ch_dim2) * ch_dim1] = wa[idij - 1] * c1[i__ 
04189                         + (k + j * c1_dim2) * c1_dim1] - wa[idij] * c1[i__ - 
04190                         1 + (k + j * c1_dim2) * c1_dim1];
04191 /* L104: */
04192             }
04193 /* L105: */
04194         }
04195 /* L106: */
04196     }
04197     goto L111;
04198 L107:
04199     is = -(*ido);
04200     i__1 = *ip;
04201     for (j = 2; j <= i__1; ++j) {
04202         is += *ido;
04203         i__2 = *l1;
04204         for (k = 1; k <= i__2; ++k) {
04205             idij = is;
04206             i__3 = *ido;
04207             for (i__ = 3; i__ <= i__3; i__ += 2) {
04208                 idij += 2;
04209                 ch[i__ - 1 + (k + j * ch_dim2) * ch_dim1] = wa[idij - 1] * c1[
04210                         i__ - 1 + (k + j * c1_dim2) * c1_dim1] + wa[idij] * 
04211                         c1[i__ + (k + j * c1_dim2) * c1_dim1];
04212                 ch[i__ + (k + j * ch_dim2) * ch_dim1] = wa[idij - 1] * c1[i__ 
04213                         + (k + j * c1_dim2) * c1_dim1] - wa[idij] * c1[i__ - 
04214                         1 + (k + j * c1_dim2) * c1_dim1];
04215 /* L108: */
04216             }
04217 /* L109: */
04218         }
04219 /* L110: */
04220     }
04221 L111:
04222     if (nbd < *l1) {
04223         goto L115;
04224     }
04225     i__1 = ipph;
04226     for (j = 2; j <= i__1; ++j) {
04227         jc = ipp2 - j;
04228         i__2 = *l1;
04229         for (k = 1; k <= i__2; ++k) {
04230             i__3 = *ido;
04231             for (i__ = 3; i__ <= i__3; i__ += 2) {
04232                 c1[i__ - 1 + (k + j * c1_dim2) * c1_dim1] = ch[i__ - 1 + (k + 
04233                         j * ch_dim2) * ch_dim1] + ch[i__ - 1 + (k + jc * 
04234                         ch_dim2) * ch_dim1];
04235                 c1[i__ - 1 + (k + jc * c1_dim2) * c1_dim1] = ch[i__ + (k + j *
04236                          ch_dim2) * ch_dim1] - ch[i__ + (k + jc * ch_dim2) * 
04237                         ch_dim1];
04238                 c1[i__ + (k + j * c1_dim2) * c1_dim1] = ch[i__ + (k + j * 
04239                         ch_dim2) * ch_dim1] + ch[i__ + (k + jc * ch_dim2) * 
04240                         ch_dim1];
04241                 c1[i__ + (k + jc * c1_dim2) * c1_dim1] = ch[i__ - 1 + (k + jc 
04242                         * ch_dim2) * ch_dim1] - ch[i__ - 1 + (k + j * ch_dim2)
04243                          * ch_dim1];
04244 /* L112: */
04245             }
04246 /* L113: */
04247         }
04248 /* L114: */
04249     }
04250     goto L121;
04251 L115:
04252     i__1 = ipph;
04253     for (j = 2; j <= i__1; ++j) {
04254         jc = ipp2 - j;
04255         i__2 = *ido;
04256         for (i__ = 3; i__ <= i__2; i__ += 2) {
04257             i__3 = *l1;
04258             for (k = 1; k <= i__3; ++k) {
04259                 c1[i__ - 1 + (k + j * c1_dim2) * c1_dim1] = ch[i__ - 1 + (k + 
04260                         j * ch_dim2) * ch_dim1] + ch[i__ - 1 + (k + jc * 
04261                         ch_dim2) * ch_dim1];
04262                 c1[i__ - 1 + (k + jc * c1_dim2) * c1_dim1] = ch[i__ + (k + j *
04263                          ch_dim2) * ch_dim1] - ch[i__ + (k + jc * ch_dim2) * 
04264                         ch_dim1];
04265                 c1[i__ + (k + j * c1_dim2) * c1_dim1] = ch[i__ + (k + j * 
04266                         ch_dim2) * ch_dim1] + ch[i__ + (k + jc * ch_dim2) * 
04267                         ch_dim1];
04268                 c1[i__ + (k + jc * c1_dim2) * c1_dim1] = ch[i__ - 1 + (k + jc 
04269                         * ch_dim2) * ch_dim1] - ch[i__ - 1 + (k + j * ch_dim2)
04270                          * ch_dim1];
04271 /* L116: */
04272             }
04273 /* L117: */
04274         }
04275 /* L118: */
04276     }
04277     goto L121;
04278 L119:
04279     i__1 = *idl1;
04280     for (ik = 1; ik <= i__1; ++ik) {
04281         c2[ik + c2_dim1] = ch2[ik + ch2_dim1];
04282 /* L120: */
04283     }
04284 L121:
04285     i__1 = ipph;
04286     for (j = 2; j <= i__1; ++j) {
04287         jc = ipp2 - j;
04288         i__2 = *l1;
04289         for (k = 1; k <= i__2; ++k) {
04290             c1[(k + j * c1_dim2) * c1_dim1 + 1] = ch[(k + j * ch_dim2) * 
04291                     ch_dim1 + 1] + ch[(k + jc * ch_dim2) * ch_dim1 + 1];
04292             c1[(k + jc * c1_dim2) * c1_dim1 + 1] = ch[(k + jc * ch_dim2) * 
04293                     ch_dim1 + 1] - ch[(k + j * ch_dim2) * ch_dim1 + 1];
04294 /* L122: */
04295         }
04296 /* L123: */
04297     }
04298 
04299     ar1 = (float)1.;
04300     ai1 = (float)0.;
04301     i__1 = ipph;
04302     for (l = 2; l <= i__1; ++l) {
04303         lc = ipp2 - l;
04304         ar1h = dcp * ar1 - dsp * ai1;
04305         ai1 = dcp * ai1 + dsp * ar1;
04306         ar1 = ar1h;
04307         i__2 = *idl1;
04308         for (ik = 1; ik <= i__2; ++ik) {
04309             ch2[ik + l * ch2_dim1] = c2[ik + c2_dim1] + ar1 * c2[ik + (
04310                     c2_dim1 << 1)];
04311             ch2[ik + lc * ch2_dim1] = ai1 * c2[ik + *ip * c2_dim1];
04312 /* L124: */
04313         }
04314         dc2 = ar1;
04315         ds2 = ai1;
04316         ar2 = ar1;
04317         ai2 = ai1;
04318         i__2 = ipph;
04319         for (j = 3; j <= i__2; ++j) {
04320             jc = ipp2 - j;
04321             ar2h = dc2 * ar2 - ds2 * ai2;
04322             ai2 = dc2 * ai2 + ds2 * ar2;
04323             ar2 = ar2h;
04324             i__3 = *idl1;
04325             for (ik = 1; ik <= i__3; ++ik) {
04326                 ch2[ik + l * ch2_dim1] += ar2 * c2[ik + j * c2_dim1];
04327                 ch2[ik + lc * ch2_dim1] += ai2 * c2[ik + jc * c2_dim1];
04328 /* L125: */
04329             }
04330 /* L126: */
04331         }
04332 /* L127: */
04333     }
04334     i__1 = ipph;
04335     for (j = 2; j <= i__1; ++j) {
04336         i__2 = *idl1;
04337         for (ik = 1; ik <= i__2; ++ik) {
04338             ch2[ik + ch2_dim1] += c2[ik + j * c2_dim1];
04339 /* L128: */
04340         }
04341 /* L129: */
04342     }
04343 
04344     if (*ido < *l1) {
04345         goto L132;
04346     }
04347     i__1 = *l1;
04348     for (k = 1; k <= i__1; ++k) {
04349         i__2 = *ido;
04350         for (i__ = 1; i__ <= i__2; ++i__) {
04351             cc[i__ + (k * cc_dim2 + 1) * cc_dim1] = ch[i__ + (k + ch_dim2) * 
04352                     ch_dim1];
04353 /* L130: */
04354         }
04355 /* L131: */
04356     }
04357     goto L135;
04358 L132:
04359     i__1 = *ido;
04360     for (i__ = 1; i__ <= i__1; ++i__) {
04361         i__2 = *l1;
04362         for (k = 1; k <= i__2; ++k) {
04363             cc[i__ + (k * cc_dim2 + 1) * cc_dim1] = ch[i__ + (k + ch_dim2) * 
04364                     ch_dim1];
04365 /* L133: */
04366         }
04367 /* L134: */
04368     }
04369 L135:
04370     i__1 = ipph;
04371     for (j = 2; j <= i__1; ++j) {
04372         jc = ipp2 - j;
04373         j2 = j + j;
04374         i__2 = *l1;
04375         for (k = 1; k <= i__2; ++k) {
04376             cc[*ido + (j2 - 2 + k * cc_dim2) * cc_dim1] = ch[(k + j * ch_dim2)
04377                      * ch_dim1 + 1];
04378             cc[(j2 - 1 + k * cc_dim2) * cc_dim1 + 1] = ch[(k + jc * ch_dim2) *
04379                      ch_dim1 + 1];
04380 /* L136: */
04381         }
04382 /* L137: */
04383     }
04384     if (*ido == 1) {
04385         return 0;
04386     }
04387     if (nbd < *l1) {
04388         goto L141;
04389     }
04390     i__1 = ipph;
04391     for (j = 2; j <= i__1; ++j) {
04392         jc = ipp2 - j;
04393         j2 = j + j;
04394         i__2 = *l1;
04395         for (k = 1; k <= i__2; ++k) {
04396             i__3 = *ido;
04397             for (i__ = 3; i__ <= i__3; i__ += 2) {
04398                 ic = idp2 - i__;
04399                 cc[i__ - 1 + (j2 - 1 + k * cc_dim2) * cc_dim1] = ch[i__ - 1 + 
04400                         (k + j * ch_dim2) * ch_dim1] + ch[i__ - 1 + (k + jc * 
04401                         ch_dim2) * ch_dim1];
04402                 cc[ic - 1 + (j2 - 2 + k * cc_dim2) * cc_dim1] = ch[i__ - 1 + (
04403                         k + j * ch_dim2) * ch_dim1] - ch[i__ - 1 + (k + jc * 
04404                         ch_dim2) * ch_dim1];
04405                 cc[i__ + (j2 - 1 + k * cc_dim2) * cc_dim1] = ch[i__ + (k + j *
04406                          ch_dim2) * ch_dim1] + ch[i__ + (k + jc * ch_dim2) * 
04407                         ch_dim1];
04408                 cc[ic + (j2 - 2 + k * cc_dim2) * cc_dim1] = ch[i__ + (k + jc *
04409                          ch_dim2) * ch_dim1] - ch[i__ + (k + j * ch_dim2) * 
04410                         ch_dim1];
04411 /* L138: */
04412             }
04413 /* L139: */
04414         }
04415 /* L140: */
04416     }
04417     return 0;
04418 L141:
04419     i__1 = ipph;
04420     for (j = 2; j <= i__1; ++j) {
04421         jc = ipp2 - j;
04422         j2 = j + j;
04423         i__2 = *ido;
04424         for (i__ = 3; i__ <= i__2; i__ += 2) {
04425             ic = idp2 - i__;
04426             i__3 = *l1;
04427             for (k = 1; k <= i__3; ++k) {
04428                 cc[i__ - 1 + (j2 - 1 + k * cc_dim2) * cc_dim1] = ch[i__ - 1 + 
04429                         (k + j * ch_dim2) * ch_dim1] + ch[i__ - 1 + (k + jc * 
04430                         ch_dim2) * ch_dim1];
04431                 cc[ic - 1 + (j2 - 2 + k * cc_dim2) * cc_dim1] = ch[i__ - 1 + (
04432                         k + j * ch_dim2) * ch_dim1] - ch[i__ - 1 + (k + jc * 
04433                         ch_dim2) * ch_dim1];
04434                 cc[i__ + (j2 - 1 + k * cc_dim2) * cc_dim1] = ch[i__ + (k + j *
04435                          ch_dim2) * ch_dim1] + ch[i__ + (k + jc * ch_dim2) * 
04436                         ch_dim1];
04437                 cc[ic + (j2 - 2 + k * cc_dim2) * cc_dim1] = ch[i__ + (k + jc *
04438                          ch_dim2) * ch_dim1] - ch[i__ + (k + j * ch_dim2) * 
04439                         ch_dim1];
04440 /* L142: */
04441             }
04442 /* L143: */
04443         }
04444 /* L144: */
04445     }
04446     return 0;
04447 } /* fradfg_ */
04448 
04449 /* Subroutine */ int fradf5_(integer *ido, integer *l1, real *cc, real *ch, 
04450         real *wa1, real *wa2, real *wa3, real *wa4)
04451 {
04452     /* Initialized data */
04453 
04454     static real tr11 = (float).309016994374947;
04455     static real ti11 = (float).951056516295154;
04456     static real tr12 = (float)-.809016994374947;
04457     static real ti12 = (float).587785252292473;
04458 
04459     /* System generated locals */
04460     integer cc_dim1, cc_dim2, cc_offset, ch_dim1, ch_offset, i__1, i__2;
04461 
04462     /* Local variables */
04463     static integer i__, k, ic;
04464     static real ci2, di2, ci4, ci5, di3, di4, di5, ci3, cr2, cr3, dr2, dr3, 
04465             dr4, dr5, cr5, cr4, ti2, ti3, ti5, ti4, tr2, tr3, tr4, tr5;
04466     static integer idp2;
04467 
04468 /* ----------------------------TJW */
04469 /* ----------------------------TJW */
04470     /* Parameter adjustments */
04471     ch_dim1 = *ido;
04472     ch_offset = ch_dim1 * 6 + 1;
04473     ch -= ch_offset;
04474     cc_dim1 = *ido;
04475     cc_dim2 = *l1;
04476     cc_offset = cc_dim1 * (cc_dim2 + 1) + 1;
04477     cc -= cc_offset;
04478     --wa1;
04479     --wa2;
04480     --wa3;
04481     --wa4;
04482 
04483     /* Function Body */
04484     i__1 = *l1;
04485     for (k = 1; k <= i__1; ++k) {
04486         cr2 = cc[(k + cc_dim2 * 5) * cc_dim1 + 1] + cc[(k + (cc_dim2 << 1)) * 
04487                 cc_dim1 + 1];
04488         ci5 = cc[(k + cc_dim2 * 5) * cc_dim1 + 1] - cc[(k + (cc_dim2 << 1)) * 
04489                 cc_dim1 + 1];
04490         cr3 = cc[(k + (cc_dim2 << 2)) * cc_dim1 + 1] + cc[(k + cc_dim2 * 3) * 
04491                 cc_dim1 + 1];
04492         ci4 = cc[(k + (cc_dim2 << 2)) * cc_dim1 + 1] - cc[(k + cc_dim2 * 3) * 
04493                 cc_dim1 + 1];
04494         ch[(k * 5 + 1) * ch_dim1 + 1] = cc[(k + cc_dim2) * cc_dim1 + 1] + cr2 
04495                 + cr3;
04496         ch[*ido + (k * 5 + 2) * ch_dim1] = cc[(k + cc_dim2) * cc_dim1 + 1] + 
04497                 tr11 * cr2 + tr12 * cr3;
04498         ch[(k * 5 + 3) * ch_dim1 + 1] = ti11 * ci5 + ti12 * ci4;
04499         ch[*ido + (k * 5 + 4) * ch_dim1] = cc[(k + cc_dim2) * cc_dim1 + 1] + 
04500                 tr12 * cr2 + tr11 * cr3;
04501         ch[(k * 5 + 5) * ch_dim1 + 1] = ti12 * ci5 - ti11 * ci4;
04502 /* L101: */
04503     }
04504     if (*ido == 1) {
04505         return 0;
04506     }
04507     idp2 = *ido + 2;
04508     i__1 = *l1;
04509     for (k = 1; k <= i__1; ++k) {
04510         i__2 = *ido;
04511         for (i__ = 3; i__ <= i__2; i__ += 2) {
04512             ic = idp2 - i__;
04513             dr2 = wa1[i__ - 2] * cc[i__ - 1 + (k + (cc_dim2 << 1)) * cc_dim1] 
04514                     + wa1[i__ - 1] * cc[i__ + (k + (cc_dim2 << 1)) * cc_dim1];
04515             di2 = wa1[i__ - 2] * cc[i__ + (k + (cc_dim2 << 1)) * cc_dim1] - 
04516                     wa1[i__ - 1] * cc[i__ - 1 + (k + (cc_dim2 << 1)) * 
04517                     cc_dim1];
04518             dr3 = wa2[i__ - 2] * cc[i__ - 1 + (k + cc_dim2 * 3) * cc_dim1] + 
04519                     wa2[i__ - 1] * cc[i__ + (k + cc_dim2 * 3) * cc_dim1];
04520             di3 = wa2[i__ - 2] * cc[i__ + (k + cc_dim2 * 3) * cc_dim1] - wa2[
04521                     i__ - 1] * cc[i__ - 1 + (k + cc_dim2 * 3) * cc_dim1];
04522             dr4 = wa3[i__ - 2] * cc[i__ - 1 + (k + (cc_dim2 << 2)) * cc_dim1] 
04523                     + wa3[i__ - 1] * cc[i__ + (k + (cc_dim2 << 2)) * cc_dim1];
04524             di4 = wa3[i__ - 2] * cc[i__ + (k + (cc_dim2 << 2)) * cc_dim1] - 
04525                     wa3[i__ - 1] * cc[i__ - 1 + (k + (cc_dim2 << 2)) * 
04526                     cc_dim1];
04527             dr5 = wa4[i__ - 2] * cc[i__ - 1 + (k + cc_dim2 * 5) * cc_dim1] + 
04528                     wa4[i__ - 1] * cc[i__ + (k + cc_dim2 * 5) * cc_dim1];
04529             di5 = wa4[i__ - 2] * cc[i__ + (k + cc_dim2 * 5) * cc_dim1] - wa4[
04530                     i__ - 1] * cc[i__ - 1 + (k + cc_dim2 * 5) * cc_dim1];
04531             cr2 = dr2 + dr5;
04532             ci5 = dr5 - dr2;
04533             cr5 = di2 - di5;
04534             ci2 = di2 + di5;
04535             cr3 = dr3 + dr4;
04536             ci4 = dr4 - dr3;
04537             cr4 = di3 - di4;
04538             ci3 = di3 + di4;
04539             ch[i__ - 1 + (k * 5 + 1) * ch_dim1] = cc[i__ - 1 + (k + cc_dim2) *
04540                      cc_dim1] + cr2 + cr3;
04541             ch[i__ + (k * 5 + 1) * ch_dim1] = cc[i__ + (k + cc_dim2) * 
04542                     cc_dim1] + ci2 + ci3;
04543             tr2 = cc[i__ - 1 + (k + cc_dim2) * cc_dim1] + tr11 * cr2 + tr12 * 
04544                     cr3;
04545             ti2 = cc[i__ + (k + cc_dim2) * cc_dim1] + tr11 * ci2 + tr12 * ci3;
04546             tr3 = cc[i__ - 1 + (k + cc_dim2) * cc_dim1] + tr12 * cr2 + tr11 * 
04547                     cr3;
04548             ti3 = cc[i__ + (k + cc_dim2) * cc_dim1] + tr12 * ci2 + tr11 * ci3;
04549             tr5 = ti11 * cr5 + ti12 * cr4;
04550             ti5 = ti11 * ci5 + ti12 * ci4;
04551             tr4 = ti12 * cr5 - ti11 * cr4;
04552             ti4 = ti12 * ci5 - ti11 * ci4;
04553             ch[i__ - 1 + (k * 5 + 3) * ch_dim1] = tr2 + tr5;
04554             ch[ic - 1 + (k * 5 + 2) * ch_dim1] = tr2 - tr5;
04555             ch[i__ + (k * 5 + 3) * ch_dim1] = ti2 + ti5;
04556             ch[ic + (k * 5 + 2) * ch_dim1] = ti5 - ti2;
04557             ch[i__ - 1 + (k * 5 + 5) * ch_dim1] = tr3 + tr4;
04558             ch[ic - 1 + (k * 5 + 4) * ch_dim1] = tr3 - tr4;
04559             ch[i__ + (k * 5 + 5) * ch_dim1] = ti3 + ti4;
04560             ch[ic + (k * 5 + 4) * ch_dim1] = ti4 - ti3;
04561 /* L102: */
04562         }
04563 /* L103: */
04564     }
04565     return 0;
04566 } /* fradf5_ */
04567 
04568 /* Subroutine */ int fradf3_(integer *ido, integer *l1, real *cc, real *ch, 
04569         real *wa1, real *wa2)
04570 {
04571     /* Initialized data */
04572 
04573     static real taur = (float)-.5;
04574     static real taui = (float).866025403784439;
04575 
04576     /* System generated locals */
04577     integer ch_dim1, ch_offset, cc_dim1, cc_dim2, cc_offset, i__1, i__2;
04578 
04579     /* Local variables */
04580     static integer i__, k, ic;
04581     static real ci2, di2, di3, cr2, dr2, dr3, ti2, ti3, tr2, tr3;
04582     static integer idp2;
04583 
04584 /* ----------------------------TJW */
04585 /* ----------------------------TJW */
04586     /* Parameter adjustments */
04587     ch_dim1 = *ido;
04588     ch_offset = (ch_dim1 << 2) + 1;
04589     ch -= ch_offset;
04590     cc_dim1 = *ido;
04591     cc_dim2 = *l1;
04592     cc_offset = cc_dim1 * (cc_dim2 + 1) + 1;
04593     cc -= cc_offset;
04594     --wa1;
04595     --wa2;
04596 
04597     /* Function Body */
04598     i__1 = *l1;
04599     for (k = 1; k <= i__1; ++k) {
04600         cr2 = cc[(k + (cc_dim2 << 1)) * cc_dim1 + 1] + cc[(k + cc_dim2 * 3) * 
04601                 cc_dim1 + 1];
04602         ch[(k * 3 + 1) * ch_dim1 + 1] = cc[(k + cc_dim2) * cc_dim1 + 1] + cr2;
04603         ch[(k * 3 + 3) * ch_dim1 + 1] = taui * (cc[(k + cc_dim2 * 3) * 
04604                 cc_dim1 + 1] - cc[(k + (cc_dim2 << 1)) * cc_dim1 + 1]);
04605         ch[*ido + (k * 3 + 2) * ch_dim1] = cc[(k + cc_dim2) * cc_dim1 + 1] + 
04606                 taur * cr2;
04607 /* L101: */
04608     }
04609     if (*ido == 1) {
04610         return 0;
04611     }
04612     idp2 = *ido + 2;
04613     i__1 = *l1;
04614     for (k = 1; k <= i__1; ++k) {
04615         i__2 = *ido;
04616         for (i__ = 3; i__ <= i__2; i__ += 2) {
04617             ic = idp2 - i__;
04618             dr2 = wa1[i__ - 2] * cc[i__ - 1 + (k + (cc_dim2 << 1)) * cc_dim1] 
04619                     + wa1[i__ - 1] * cc[i__ + (k + (cc_dim2 << 1)) * cc_dim1];
04620             di2 = wa1[i__ - 2] * cc[i__ + (k + (cc_dim2 << 1)) * cc_dim1] - 
04621                     wa1[i__ - 1] * cc[i__ - 1 + (k + (cc_dim2 << 1)) * 
04622                     cc_dim1];
04623             dr3 = wa2[i__ - 2] * cc[i__ - 1 + (k + cc_dim2 * 3) * cc_dim1] + 
04624                     wa2[i__ - 1] * cc[i__ + (k + cc_dim2 * 3) * cc_dim1];
04625             di3 = wa2[i__ - 2] * cc[i__ + (k + cc_dim2 * 3) * cc_dim1] - wa2[
04626                     i__ - 1] * cc[i__ - 1 + (k + cc_dim2 * 3) * cc_dim1];
04627             cr2 = dr2 + dr3;
04628             ci2 = di2 + di3;
04629             ch[i__ - 1 + (k * 3 + 1) * ch_dim1] = cc[i__ - 1 + (k + cc_dim2) *
04630                      cc_dim1] + cr2;
04631             ch[i__ + (k * 3 + 1) * ch_dim1] = cc[i__ + (k + cc_dim2) * 
04632                     cc_dim1] + ci2;
04633             tr2 = cc[i__ - 1 + (k + cc_dim2) * cc_dim1] + taur * cr2;
04634             ti2 = cc[i__ + (k + cc_dim2) * cc_dim1] + taur * ci2;
04635             tr3 = taui * (di2 - di3);
04636             ti3 = taui * (dr3 - dr2);
04637             ch[i__ - 1 + (k * 3 + 3) * ch_dim1] = tr2 + tr3;
04638             ch[ic - 1 + (k * 3 + 2) * ch_dim1] = tr2 - tr3;
04639             ch[i__ + (k * 3 + 3) * ch_dim1] = ti2 + ti3;
04640             ch[ic + (k * 3 + 2) * ch_dim1] = ti3 - ti2;
04641 /* L102: */
04642         }
04643 /* L103: */
04644     }
04645     return 0;
04646 } /* fradf3_ */
04647 
04648 /* Subroutine */ int fradf2_(integer *ido, integer *l1, real *cc, real *ch, 
04649         real *wa1)
04650 {
04651     /* System generated locals */
04652     integer ch_dim1, ch_offset, cc_dim1, cc_dim2, cc_offset, i__1, i__2;
04653 
04654     /* Local variables */
04655     static integer i__, k, ic;
04656     static real ti2, tr2;
04657     static integer idp2;
04658 
04659 /* ----------------------------TJW */
04660 /* ----------------------------TJW */
04661     /* Parameter adjustments */
04662     ch_dim1 = *ido;
04663     ch_offset = ch_dim1 * 3 + 1;
04664     ch -= ch_offset;
04665     cc_dim1 = *ido;
04666     cc_dim2 = *l1;
04667     cc_offset = cc_dim1 * (cc_dim2 + 1) + 1;
04668     cc -= cc_offset;
04669     --wa1;
04670 
04671     /* Function Body */
04672     i__1 = *l1;
04673     for (k = 1; k <= i__1; ++k) {
04674         ch[((k << 1) + 1) * ch_dim1 + 1] = cc[(k + cc_dim2) * cc_dim1 + 1] + 
04675                 cc[(k + (cc_dim2 << 1)) * cc_dim1 + 1];
04676         ch[*ido + ((k << 1) + 2) * ch_dim1] = cc[(k + cc_dim2) * cc_dim1 + 1] 
04677                 - cc[(k + (cc_dim2 << 1)) * cc_dim1 + 1];
04678 /* L101: */
04679     }
04680     if ((i__1 = *ido - 2) < 0) {
04681         goto L107;
04682     } else if (i__1 == 0) {
04683         goto L105;
04684     } else {
04685         goto L102;
04686     }
04687 L102:
04688     idp2 = *ido + 2;
04689     i__1 = *l1;
04690     for (k = 1; k <= i__1; ++k) {
04691         i__2 = *ido;
04692         for (i__ = 3; i__ <= i__2; i__ += 2) {
04693             ic = idp2 - i__;
04694             tr2 = wa1[i__ - 2] * cc[i__ - 1 + (k + (cc_dim2 << 1)) * cc_dim1] 
04695                     + wa1[i__ - 1] * cc[i__ + (k + (cc_dim2 << 1)) * cc_dim1];
04696             ti2 = wa1[i__ - 2] * cc[i__ + (k + (cc_dim2 << 1)) * cc_dim1] - 
04697                     wa1[i__ - 1] * cc[i__ - 1 + (k + (cc_dim2 << 1)) * 
04698                     cc_dim1];
04699             ch[i__ + ((k << 1) + 1) * ch_dim1] = cc[i__ + (k + cc_dim2) * 
04700                     cc_dim1] + ti2;
04701             ch[ic + ((k << 1) + 2) * ch_dim1] = ti2 - cc[i__ + (k + cc_dim2) *
04702                      cc_dim1];
04703             ch[i__ - 1 + ((k << 1) + 1) * ch_dim1] = cc[i__ - 1 + (k + 
04704                     cc_dim2) * cc_dim1] + tr2;
04705             ch[ic - 1 + ((k << 1) + 2) * ch_dim1] = cc[i__ - 1 + (k + cc_dim2)
04706                      * cc_dim1] - tr2;
04707 /* L103: */
04708         }
04709 /* L104: */
04710     }
04711     if (*ido % 2 == 1) {
04712         return 0;
04713     }
04714 L105:
04715     i__1 = *l1;
04716     for (k = 1; k <= i__1; ++k) {
04717         ch[((k << 1) + 2) * ch_dim1 + 1] = -cc[*ido + (k + (cc_dim2 << 1)) * 
04718                 cc_dim1];
04719         ch[*ido + ((k << 1) + 1) * ch_dim1] = cc[*ido + (k + cc_dim2) * 
04720                 cc_dim1];
04721 /* L106: */
04722     }
04723 L107:
04724     return 0;
04725 } /* fradf2_ */
04726 
04727 /* Subroutine */ int fradf4_(integer *ido, integer *l1, real *cc, real *ch, 
04728         real *wa1, real *wa2, real *wa3)
04729 {
04730     /* Initialized data */
04731 
04732     static real hsqt2 = (float).7071067811865475;
04733 
04734     /* System generated locals */
04735     integer cc_dim1, cc_dim2, cc_offset, ch_dim1, ch_offset, i__1, i__2;
04736 
04737     /* Local variables */
04738     static integer i__, k, ic;
04739     static real ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, 
04740             tr3, tr4;
04741     static integer idp2;
04742 
04743 /* ----------------------------TJW */
04744 /* ----------------------------TJW */
04745     /* Parameter adjustments */
04746     ch_dim1 = *ido;
04747     ch_offset = ch_dim1 * 5 + 1;
04748     ch -= ch_offset;
04749     cc_dim1 = *ido;
04750     cc_dim2 = *l1;
04751     cc_offset = cc_dim1 * (cc_dim2 + 1) + 1;
04752     cc -= cc_offset;
04753     --wa1;
04754     --wa2;
04755     --wa3;
04756 
04757     /* Function Body */
04758     i__1 = *l1;
04759     for (k = 1; k <= i__1; ++k) {
04760         tr1 = cc[(k + (cc_dim2 << 1)) * cc_dim1 + 1] + cc[(k + (cc_dim2 << 2))
04761                  * cc_dim1 + 1];
04762         tr2 = cc[(k + cc_dim2) * cc_dim1 + 1] + cc[(k + cc_dim2 * 3) * 
04763                 cc_dim1 + 1];
04764         ch[((k << 2) + 1) * ch_dim1 + 1] = tr1 + tr2;
04765         ch[*ido + ((k << 2) + 4) * ch_dim1] = tr2 - tr1;
04766         ch[*ido + ((k << 2) + 2) * ch_dim1] = cc[(k + cc_dim2) * cc_dim1 + 1] 
04767                 - cc[(k + cc_dim2 * 3) * cc_dim1 + 1];
04768         ch[((k << 2) + 3) * ch_dim1 + 1] = cc[(k + (cc_dim2 << 2)) * cc_dim1 
04769                 + 1] - cc[(k + (cc_dim2 << 1)) * cc_dim1 + 1];
04770 /* L101: */
04771     }
04772     if ((i__1 = *ido - 2) < 0) {
04773         goto L107;
04774     } else if (i__1 == 0) {
04775         goto L105;
04776     } else {
04777         goto L102;
04778     }
04779 L102:
04780     idp2 = *ido + 2;
04781     i__1 = *l1;
04782     for (k = 1; k <= i__1; ++k) {
04783         i__2 = *ido;
04784         for (i__ = 3; i__ <= i__2; i__ += 2) {
04785             ic = idp2 - i__;
04786             cr2 = wa1[i__ - 2] * cc[i__ - 1 + (k + (cc_dim2 << 1)) * cc_dim1] 
04787                     + wa1[i__ - 1] * cc[i__ + (k + (cc_dim2 << 1)) * cc_dim1];
04788             ci2 = wa1[i__ - 2] * cc[i__ + (k + (cc_dim2 << 1)) * cc_dim1] - 
04789                     wa1[i__ - 1] * cc[i__ - 1 + (k + (cc_dim2 << 1)) * 
04790                     cc_dim1];
04791             cr3 = wa2[i__ - 2] * cc[i__ - 1 + (k + cc_dim2 * 3) * cc_dim1] + 
04792                     wa2[i__ - 1] * cc[i__ + (k + cc_dim2 * 3) * cc_dim1];
04793             ci3 = wa2[i__ - 2] * cc[i__ + (k + cc_dim2 * 3) * cc_dim1] - wa2[
04794                     i__ - 1] * cc[i__ - 1 + (k + cc_dim2 * 3) * cc_dim1];
04795             cr4 = wa3[i__ - 2] * cc[i__ - 1 + (k + (cc_dim2 << 2)) * cc_dim1] 
04796                     + wa3[i__ - 1] * cc[i__ + (k + (cc_dim2 << 2)) * cc_dim1];
04797             ci4 = wa3[i__ - 2] * cc[i__ + (k + (cc_dim2 << 2)) * cc_dim1] - 
04798                     wa3[i__ - 1] * cc[i__ - 1 + (k + (cc_dim2 << 2)) * 
04799                     cc_dim1];
04800             tr1 = cr2 + cr4;
04801             tr4 = cr4 - cr2;
04802             ti1 = ci2 + ci4;
04803             ti4 = ci2 - ci4;
04804             ti2 = cc[i__ + (k + cc_dim2) * cc_dim1] + ci3;
04805             ti3 = cc[i__ + (k + cc_dim2) * cc_dim1] - ci3;
04806             tr2 = cc[i__ - 1 + (k + cc_dim2) * cc_dim1] + cr3;
04807             tr3 = cc[i__ - 1 + (k + cc_dim2) * cc_dim1] - cr3;
04808             ch[i__ - 1 + ((k << 2) + 1) * ch_dim1] = tr1 + tr2;
04809             ch[ic - 1 + ((k << 2) + 4) * ch_dim1] = tr2 - tr1;
04810             ch[i__ + ((k << 2) + 1) * ch_dim1] = ti1 + ti2;
04811             ch[ic + ((k << 2) + 4) * ch_dim1] = ti1 - ti2;
04812             ch[i__ - 1 + ((k << 2) + 3) * ch_dim1] = ti4 + tr3;
04813             ch[ic - 1 + ((k << 2) + 2) * ch_dim1] = tr3 - ti4;
04814             ch[i__ + ((k << 2) + 3) * ch_dim1] = tr4 + ti3;
04815             ch[ic + ((k << 2) + 2) * ch_dim1] = tr4 - ti3;
04816 /* L103: */
04817         }
04818 /* L104: */
04819     }
04820     if (*ido % 2 == 1) {
04821         return 0;
04822     }
04823 L105:
04824     i__1 = *l1;
04825     for (k = 1; k <= i__1; ++k) {
04826         ti1 = -hsqt2 * (cc[*ido + (k + (cc_dim2 << 1)) * cc_dim1] + cc[*ido + 
04827                 (k + (cc_dim2 << 2)) * cc_dim1]);
04828         tr1 = hsqt2 * (cc[*ido + (k + (cc_dim2 << 1)) * cc_dim1] - cc[*ido + (
04829                 k + (cc_dim2 << 2)) * cc_dim1]);
04830         ch[*ido + ((k << 2) + 1) * ch_dim1] = tr1 + cc[*ido + (k + cc_dim2) * 
04831                 cc_dim1];
04832         ch[*ido + ((k << 2) + 3) * ch_dim1] = cc[*ido + (k + cc_dim2) * 
04833                 cc_dim1] - tr1;
04834         ch[((k << 2) + 2) * ch_dim1 + 1] = ti1 - cc[*ido + (k + cc_dim2 * 3) *
04835                  cc_dim1];
04836         ch[((k << 2) + 4) * ch_dim1 + 1] = ti1 + cc[*ido + (k + cc_dim2 * 3) *
04837                  cc_dim1];
04838 /* L106: */
04839     }
04840 L107:
04841     return 0;
04842 } /* fradf4_ */
04843 
04844 /* Subroutine */ int frfftb_(integer *n, real *r__, real *wsave)
04845 {
04846     extern /* Subroutine */ int frfftb1_(integer *, real *, real *, real *, 
04847             real *);
04848 
04849 /* ----------------------------TJW */
04850 /* ----------------------------TJW */
04851     /* Parameter adjustments */
04852     --wsave;
04853     --r__;
04854 
04855     /* Function Body */
04856     if (*n == 1) {
04857         return 0;
04858     }
04859     frfftb1_(n, &r__[1], &wsave[1], &wsave[*n + 1], &wsave[(*n << 1) + 1]);
04860     return 0;
04861 } /* frfftb_ */
04862 
04863 /* Subroutine */ int frfftb1_(integer *n, real *c__, real *ch, real *wa, 
04864         integer *ifac)
04865 {
04866     /* System generated locals */
04867     integer i__1;
04868 
04869     /* Local variables */
04870     static integer i__, k1, l1, l2;
04871     extern /* Subroutine */ int fradb2_(integer *, integer *, real *, real *, 
04872             real *), fradb3_(integer *, integer *, real *, real *, real *, 
04873             real *), fradb4_(integer *, integer *, real *, real *, real *, 
04874             real *, real *), fradb5_(integer *, integer *, real *, real *, 
04875             real *, real *, real *, real *);
04876     static integer na, nf;
04877     extern /* Subroutine */ int fradbg_(integer *, integer *, integer *, 
04878             integer *, real *, real *, real *, real *, real *, real *);
04879     static integer ip, iw, ix2, ix3, ix4, ido, idl1;
04880 
04881 /* ----------------------------TJW */
04882 /* ----------------------------TJW */
04883     /* Parameter adjustments */
04884     --ifac;
04885     --wa;
04886     --ch;
04887     --c__;
04888 
04889     /* Function Body */
04890     nf = ifac[2];
04891     na = 0;
04892     l1 = 1;
04893     iw = 1;
04894     i__1 = nf;
04895     for (k1 = 1; k1 <= i__1; ++k1) {
04896         ip = ifac[k1 + 2];
04897         l2 = ip * l1;
04898         ido = *n / l2;
04899         idl1 = ido * l1;
04900         if (ip != 4) {
04901             goto L103;
04902         }
04903         ix2 = iw + ido;
04904         ix3 = ix2 + ido;
04905         if (na != 0) {
04906             goto L101;
04907         }
04908         fradb4_(&ido, &l1, &c__[1], &ch[1], &wa[iw], &wa[ix2], &wa[ix3]);
04909         goto L102;
04910 L101:
04911         fradb4_(&ido, &l1, &ch[1], &c__[1], &wa[iw], &wa[ix2], &wa[ix3]);
04912 L102:
04913         na = 1 - na;
04914         goto L115;
04915 L103:
04916         if (ip != 2) {
04917             goto L106;
04918         }
04919         if (na != 0) {
04920             goto L104;
04921         }
04922         fradb2_(&ido, &l1, &c__[1], &ch[1], &wa[iw]);
04923         goto L105;
04924 L104:
04925         fradb2_(&ido, &l1, &ch[1], &c__[1], &wa[iw]);
04926 L105:
04927         na = 1 - na;
04928         goto L115;
04929 L106:
04930         if (ip != 3) {
04931             goto L109;
04932         }
04933         ix2 = iw + ido;
04934         if (na != 0) {
04935             goto L107;
04936         }
04937         fradb3_(&ido, &l1, &c__[1], &ch[1], &wa[iw], &wa[ix2]);
04938         goto L108;
04939 L107:
04940         fradb3_(&ido, &l1, &ch[1], &c__[1], &wa[iw], &wa[ix2]);
04941 L108:
04942         na = 1 - na;
04943         goto L115;
04944 L109:
04945         if (ip != 5) {
04946             goto L112;
04947         }
04948         ix2 = iw + ido;
04949         ix3 = ix2 + ido;
04950         ix4 = ix3 + ido;
04951         if (na != 0) {
04952             goto L110;
04953         }
04954         fradb5_(&ido, &l1, &c__[1], &ch[1], &wa[iw], &wa[ix2], &wa[ix3], &wa[
04955                 ix4]);
04956         goto L111;
04957 L110:
04958         fradb5_(&ido, &l1, &ch[1], &c__[1], &wa[iw], &wa[ix2], &wa[ix3], &wa[
04959                 ix4]);
04960 L111:
04961         na = 1 - na;
04962         goto L115;
04963 L112:
04964         if (na != 0) {
04965             goto L113;
04966         }
04967         fradbg_(&ido, &ip, &l1, &idl1, &c__[1], &c__[1], &c__[1], &ch[1], &ch[
04968                 1], &wa[iw]);
04969         goto L114;
04970 L113:
04971         fradbg_(&ido, &ip, &l1, &idl1, &ch[1], &ch[1], &ch[1], &c__[1], &c__[
04972                 1], &wa[iw]);
04973 L114:
04974         if (ido == 1) {
04975             na = 1 - na;
04976         }
04977 L115:
04978         l1 = l2;
04979         iw += (ip - 1) * ido;
04980 /* L116: */
04981     }
04982     if (na == 0) {
04983         return 0;
04984     }
04985     i__1 = *n;
04986     for (i__ = 1; i__ <= i__1; ++i__) {
04987         c__[i__] = ch[i__];
04988 /* L117: */
04989     }
04990     return 0;
04991 } /* frfftb1_ */
04992 
04993 /* Subroutine */ int fradbg_(integer *ido, integer *ip, integer *l1, integer *
04994         idl1, real *cc, real *c1, real *c2, real *ch, real *ch2, real *wa)
04995 {
04996     /* Initialized data */
04997 
04998     static real tpi = (float)6.28318530717959;
04999 
05000     /* System generated locals */
05001     integer ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1,
05002              c1_dim2, c1_offset, c2_dim1, c2_offset, ch2_dim1, ch2_offset, 
05003             i__1, i__2, i__3;
05004 
05005     /* Builtin functions */
05006     double cos(doublereal), sin(doublereal);
05007 
05008     /* Local variables */
05009     static integer idij, ipph, i__, j, k, l, j2, ic, jc, lc, ik, is;
05010     static real dc2, ai1, ai2, ar1, ar2, ds2;
05011     static integer nbd;
05012     static real dcp, arg, dsp, ar1h, ar2h;
05013     static integer idp2, ipp2;
05014 
05015 /* ----------------------------TJW */
05016 /* ----------------------------TJW */
05017     /* Parameter adjustments */
05018     ch_dim1 = *ido;
05019     ch_dim2 = *l1;
05020     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
05021     ch -= ch_offset;
05022     c1_dim1 = *ido;
05023     c1_dim2 = *l1;
05024     c1_offset = c1_dim1 * (c1_dim2 + 1) + 1;
05025     c1 -= c1_offset;
05026     cc_dim1 = *ido;
05027     cc_dim2 = *ip;
05028     cc_offset = cc_dim1 * (cc_dim2 + 1) + 1;
05029     cc -= cc_offset;
05030     ch2_dim1 = *idl1;
05031     ch2_offset = ch2_dim1 + 1;
05032     ch2 -= ch2_offset;
05033     c2_dim1 = *idl1;
05034     c2_offset = c2_dim1 + 1;
05035     c2 -= c2_offset;
05036     --wa;
05037 
05038     /* Function Body */
05039     arg = tpi / (real) (*ip);
05040     dcp = cos(arg);
05041     dsp = sin(arg);
05042     idp2 = *ido + 2;
05043     nbd = (*ido - 1) / 2;
05044     ipp2 = *ip + 2;
05045     ipph = (*ip + 1) / 2;
05046     if (*ido < *l1) {
05047         goto L103;
05048     }
05049     i__1 = *l1;
05050     for (k = 1; k <= i__1; ++k) {
05051         i__2 = *ido;
05052         for (i__ = 1; i__ <= i__2; ++i__) {
05053             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * cc_dim2 + 1) * 
05054                     cc_dim1];
05055 /* L101: */
05056         }
05057 /* L102: */
05058     }
05059     goto L106;
05060 L103:
05061     i__1 = *ido;
05062     for (i__ = 1; i__ <= i__1; ++i__) {
05063         i__2 = *l1;
05064         for (k = 1; k <= i__2; ++k) {
05065             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * cc_dim2 + 1) * 
05066                     cc_dim1];
05067 /* L104: */
05068         }
05069 /* L105: */
05070     }
05071 L106:
05072     i__1 = ipph;
05073     for (j = 2; j <= i__1; ++j) {
05074         jc = ipp2 - j;
05075         j2 = j + j;
05076         i__2 = *l1;
05077         for (k = 1; k <= i__2; ++k) {
05078             ch[(k + j * ch_dim2) * ch_dim1 + 1] = cc[*ido + (j2 - 2 + k * 
05079                     cc_dim2) * cc_dim1] + cc[*ido + (j2 - 2 + k * cc_dim2) * 
05080                     cc_dim1];
05081             ch[(k + jc * ch_dim2) * ch_dim1 + 1] = cc[(j2 - 1 + k * cc_dim2) *
05082                      cc_dim1 + 1] + cc[(j2 - 1 + k * cc_dim2) * cc_dim1 + 1];
05083 /* L107: */
05084         }
05085 /* L108: */
05086     }
05087     if (*ido == 1) {
05088         goto L116;
05089     }
05090     if (nbd < *l1) {
05091         goto L112;
05092     }
05093     i__1 = ipph;
05094     for (j = 2; j <= i__1; ++j) {
05095         jc = ipp2 - j;
05096         i__2 = *l1;
05097         for (k = 1; k <= i__2; ++k) {
05098             i__3 = *ido;
05099             for (i__ = 3; i__ <= i__3; i__ += 2) {
05100                 ic = idp2 - i__;
05101                 ch[i__ - 1 + (k + j * ch_dim2) * ch_dim1] = cc[i__ - 1 + ((j 
05102                         << 1) - 1 + k * cc_dim2) * cc_dim1] + cc[ic - 1 + ((j 
05103                         << 1) - 2 + k * cc_dim2) * cc_dim1];
05104                 ch[i__ - 1 + (k + jc * ch_dim2) * ch_dim1] = cc[i__ - 1 + ((j 
05105                         << 1) - 1 + k * cc_dim2) * cc_dim1] - cc[ic - 1 + ((j 
05106                         << 1) - 2 + k * cc_dim2) * cc_dim1];
05107                 ch[i__ + (k + j * ch_dim2) * ch_dim1] = cc[i__ + ((j << 1) - 
05108                         1 + k * cc_dim2) * cc_dim1] - cc[ic + ((j << 1) - 2 + 
05109                         k * cc_dim2) * cc_dim1];
05110                 ch[i__ + (k + jc * ch_dim2) * ch_dim1] = cc[i__ + ((j << 1) - 
05111                         1 + k * cc_dim2) * cc_dim1] + cc[ic + ((j << 1) - 2 + 
05112                         k * cc_dim2) * cc_dim1];
05113 /* L109: */
05114             }
05115 /* L110: */
05116         }
05117 /* L111: */
05118     }
05119     goto L116;
05120 L112:
05121     i__1 = ipph;
05122     for (j = 2; j <= i__1; ++j) {
05123         jc = ipp2 - j;
05124         i__2 = *ido;
05125         for (i__ = 3; i__ <= i__2; i__ += 2) {
05126             ic = idp2 - i__;
05127             i__3 = *l1;
05128             for (k = 1; k <= i__3; ++k) {
05129                 ch[i__ - 1 + (k + j * ch_dim2) * ch_dim1] = cc[i__ - 1 + ((j 
05130                         << 1) - 1 + k * cc_dim2) * cc_dim1] + cc[ic - 1 + ((j 
05131                         << 1) - 2 + k * cc_dim2) * cc_dim1];
05132                 ch[i__ - 1 + (k + jc * ch_dim2) * ch_dim1] = cc[i__ - 1 + ((j 
05133                         << 1) - 1 + k * cc_dim2) * cc_dim1] - cc[ic - 1 + ((j 
05134                         << 1) - 2 + k * cc_dim2) * cc_dim1];
05135                 ch[i__ + (k + j * ch_dim2) * ch_dim1] = cc[i__ + ((j << 1) - 
05136                         1 + k * cc_dim2) * cc_dim1] - cc[ic + ((j << 1) - 2 + 
05137                         k * cc_dim2) * cc_dim1];
05138                 ch[i__ + (k + jc * ch_dim2) * ch_dim1] = cc[i__ + ((j << 1) - 
05139                         1 + k * cc_dim2) * cc_dim1] + cc[ic + ((j << 1) - 2 + 
05140                         k * cc_dim2) * cc_dim1];
05141 /* L113: */
05142             }
05143 /* L114: */
05144         }
05145 /* L115: */
05146     }
05147 L116:
05148     ar1 = (float)1.;
05149     ai1 = (float)0.;
05150     i__1 = ipph;
05151     for (l = 2; l <= i__1; ++l) {
05152         lc = ipp2 - l;
05153         ar1h = dcp * ar1 - dsp * ai1;
05154         ai1 = dcp * ai1 + dsp * ar1;
05155         ar1 = ar1h;
05156         i__2 = *idl1;
05157         for (ik = 1; ik <= i__2; ++ik) {
05158             c2[ik + l * c2_dim1] = ch2[ik + ch2_dim1] + ar1 * ch2[ik + (
05159                     ch2_dim1 << 1)];
05160             c2[ik + lc * c2_dim1] = ai1 * ch2[ik + *ip * ch2_dim1];
05161 /* L117: */
05162         }
05163         dc2 = ar1;
05164         ds2 = ai1;
05165         ar2 = ar1;
05166         ai2 = ai1;
05167         i__2 = ipph;
05168         for (j = 3; j <= i__2; ++j) {
05169             jc = ipp2 - j;
05170             ar2h = dc2 * ar2 - ds2 * ai2;
05171             ai2 = dc2 * ai2 + ds2 * ar2;
05172             ar2 = ar2h;
05173             i__3 = *idl1;
05174             for (ik = 1; ik <= i__3; ++ik) {
05175                 c2[ik + l * c2_dim1] += ar2 * ch2[ik + j * ch2_dim1];
05176                 c2[ik + lc * c2_dim1] += ai2 * ch2[ik + jc * ch2_dim1];
05177 /* L118: */
05178             }
05179 /* L119: */
05180         }
05181 /* L120: */
05182     }
05183     i__1 = ipph;
05184     for (j = 2; j <= i__1; ++j) {
05185         i__2 = *idl1;
05186         for (ik = 1; ik <= i__2; ++ik) {
05187             ch2[ik + ch2_dim1] += ch2[ik + j * ch2_dim1];
05188 /* L121: */
05189         }
05190 /* L122: */
05191     }
05192     i__1 = ipph;
05193     for (j = 2; j <= i__1; ++j) {
05194         jc = ipp2 - j;
05195         i__2 = *l1;
05196         for (k = 1; k <= i__2; ++k) {
05197             ch[(k + j * ch_dim2) * ch_dim1 + 1] = c1[(k + j * c1_dim2) * 
05198                     c1_dim1 + 1] - c1[(k + jc * c1_dim2) * c1_dim1 + 1];
05199             ch[(k + jc * ch_dim2) * ch_dim1 + 1] = c1[(k + j * c1_dim2) * 
05200                     c1_dim1 + 1] + c1[(k + jc * c1_dim2) * c1_dim1 + 1];
05201 /* L123: */
05202         }
05203 /* L124: */
05204     }
05205     if (*ido == 1) {
05206         goto L132;
05207     }
05208     if (nbd < *l1) {
05209         goto L128;
05210     }
05211     i__1 = ipph;
05212     for (j = 2; j <= i__1; ++j) {
05213         jc = ipp2 - j;
05214         i__2 = *l1;
05215         for (k = 1; k <= i__2; ++k) {
05216             i__3 = *ido;
05217             for (i__ = 3; i__ <= i__3; i__ += 2) {
05218                 ch[i__ - 1 + (k + j * ch_dim2) * ch_dim1] = c1[i__ - 1 + (k + 
05219                         j * c1_dim2) * c1_dim1] - c1[i__ + (k + jc * c1_dim2) 
05220                         * c1_dim1];
05221                 ch[i__ - 1 + (k + jc * ch_dim2) * ch_dim1] = c1[i__ - 1 + (k 
05222                         + j * c1_dim2) * c1_dim1] + c1[i__ + (k + jc * 
05223                         c1_dim2) * c1_dim1];
05224                 ch[i__ + (k + j * ch_dim2) * ch_dim1] = c1[i__ + (k + j * 
05225                         c1_dim2) * c1_dim1] + c1[i__ - 1 + (k + jc * c1_dim2) 
05226                         * c1_dim1];
05227                 ch[i__ + (k + jc * ch_dim2) * ch_dim1] = c1[i__ + (k + j * 
05228                         c1_dim2) * c1_dim1] - c1[i__ - 1 + (k + jc * c1_dim2) 
05229                         * c1_dim1];
05230 /* L125: */
05231             }
05232 /* L126: */
05233         }
05234 /* L127: */
05235     }
05236     goto L132;
05237 L128:
05238     i__1 = ipph;
05239     for (j = 2; j <= i__1; ++j) {
05240         jc = ipp2 - j;
05241         i__2 = *ido;
05242         for (i__ = 3; i__ <= i__2; i__ += 2) {
05243             i__3 = *l1;
05244             for (k = 1; k <= i__3; ++k) {
05245                 ch[i__ - 1 + (k + j * ch_dim2) * ch_dim1] = c1[i__ - 1 + (k + 
05246                         j * c1_dim2) * c1_dim1] - c1[i__ + (k + jc * c1_dim2) 
05247                         * c1_dim1];
05248                 ch[i__ - 1 + (k + jc * ch_dim2) * ch_dim1] = c1[i__ - 1 + (k 
05249                         + j * c1_dim2) * c1_dim1] + c1[i__ + (k + jc * 
05250                         c1_dim2) * c1_dim1];
05251                 ch[i__ + (k + j * ch_dim2) * ch_dim1] = c1[i__ + (k + j * 
05252                         c1_dim2) * c1_dim1] + c1[i__ - 1 + (k + jc * c1_dim2) 
05253                         * c1_dim1];
05254                 ch[i__ + (k + jc * ch_dim2) * ch_dim1] = c1[i__ + (k + j * 
05255                         c1_dim2) * c1_dim1] - c1[i__ - 1 + (k + jc * c1_dim2) 
05256                         * c1_dim1];
05257 /* L129: */
05258             }
05259 /* L130: */
05260         }
05261 /* L131: */
05262     }
05263 L132:
05264     if (*ido == 1) {
05265         return 0;
05266     }
05267     i__1 = *idl1;
05268     for (ik = 1; ik <= i__1; ++ik) {
05269         c2[ik + c2_dim1] = ch2[ik + ch2_dim1];
05270 /* L133: */
05271     }
05272     i__1 = *ip;
05273     for (j = 2; j <= i__1; ++j) {
05274         i__2 = *l1;
05275         for (k = 1; k <= i__2; ++k) {
05276             c1[(k + j * c1_dim2) * c1_dim1 + 1] = ch[(k + j * ch_dim2) * 
05277                     ch_dim1 + 1];
05278 /* L134: */
05279         }
05280 /* L135: */
05281     }
05282     if (nbd > *l1) {
05283         goto L139;
05284     }
05285     is = -(*ido);
05286     i__1 = *ip;
05287     for (j = 2; j <= i__1; ++j) {
05288         is += *ido;
05289         idij = is;
05290         i__2 = *ido;
05291         for (i__ = 3; i__ <= i__2; i__ += 2) {
05292             idij += 2;
05293             i__3 = *l1;
05294             for (k = 1; k <= i__3; ++k) {
05295                 c1[i__ - 1 + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[
05296                         i__ - 1 + (k + j * ch_dim2) * ch_dim1] - wa[idij] * 
05297                         ch[i__ + (k + j * ch_dim2) * ch_dim1];
05298                 c1[i__ + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[i__ 
05299                         + (k + j * ch_dim2) * ch_dim1] + wa[idij] * ch[i__ - 
05300                         1 + (k + j * ch_dim2) * ch_dim1];
05301 /* L136: */
05302             }
05303 /* L137: */
05304         }
05305 /* L138: */
05306     }
05307     goto L143;
05308 L139:
05309     is = -(*ido);
05310     i__1 = *ip;
05311     for (j = 2; j <= i__1; ++j) {
05312         is += *ido;
05313         i__2 = *l1;
05314         for (k = 1; k <= i__2; ++k) {
05315             idij = is;
05316             i__3 = *ido;
05317             for (i__ = 3; i__ <= i__3; i__ += 2) {
05318                 idij += 2;
05319                 c1[i__ - 1 + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[
05320                         i__ - 1 + (k + j * ch_dim2) * ch_dim1] - wa[idij] * 
05321                         ch[i__ + (k + j * ch_dim2) * ch_dim1];
05322                 c1[i__ + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[i__ 
05323                         + (k + j * ch_dim2) * ch_dim1] + wa[idij] * ch[i__ - 
05324                         1 + (k + j * ch_dim2) * ch_dim1];
05325 /* L140: */
05326             }
05327 /* L141: */
05328         }
05329 /* L142: */
05330     }
05331 L143:
05332     return 0;
05333 } /* fradbg_ */
05334 
05335 /* Subroutine */ int fradb5_(integer *ido, integer *l1, real *cc, real *ch, 
05336         real *wa1, real *wa2, real *wa3, real *wa4)
05337 {
05338     /* Initialized data */
05339 
05340     static real tr11 = (float).309016994374947;
05341     static real ti11 = (float).951056516295154;
05342     static real tr12 = (float)-.809016994374947;
05343     static real ti12 = (float).587785252292473;
05344 
05345     /* System generated locals */
05346     integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
05347 
05348     /* Local variables */
05349     static integer i__, k, ic;
05350     static real ci2, ci3, ci4, ci5, di3, di4, di5, di2, cr2, cr3, cr5, cr4, 
05351             ti2, ti3, ti4, ti5, dr3, dr4, dr5, dr2, tr2, tr3, tr4, tr5;
05352     static integer idp2;
05353 
05354 /* ----------------------------TJW */
05355 /* ----------------------------TJW */
05356     /* Parameter adjustments */
05357     ch_dim1 = *ido;
05358     ch_dim2 = *l1;
05359     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
05360     ch -= ch_offset;
05361     cc_dim1 = *ido;
05362     cc_offset = cc_dim1 * 6 + 1;
05363     cc -= cc_offset;
05364     --wa1;
05365     --wa2;
05366     --wa3;
05367     --wa4;
05368 
05369     /* Function Body */
05370     i__1 = *l1;
05371     for (k = 1; k <= i__1; ++k) {
05372         ti5 = cc[(k * 5 + 3) * cc_dim1 + 1] + cc[(k * 5 + 3) * cc_dim1 + 1];
05373         ti4 = cc[(k * 5 + 5) * cc_dim1 + 1] + cc[(k * 5 + 5) * cc_dim1 + 1];
05374         tr2 = cc[*ido + (k * 5 + 2) * cc_dim1] + cc[*ido + (k * 5 + 2) * 
05375                 cc_dim1];
05376         tr3 = cc[*ido + (k * 5 + 4) * cc_dim1] + cc[*ido + (k * 5 + 4) * 
05377                 cc_dim1];
05378         ch[(k + ch_dim2) * ch_dim1 + 1] = cc[(k * 5 + 1) * cc_dim1 + 1] + tr2 
05379                 + tr3;
05380         cr2 = cc[(k * 5 + 1) * cc_dim1 + 1] + tr11 * tr2 + tr12 * tr3;
05381         cr3 = cc[(k * 5 + 1) * cc_dim1 + 1] + tr12 * tr2 + tr11 * tr3;
05382         ci5 = ti11 * ti5 + ti12 * ti4;
05383         ci4 = ti12 * ti5 - ti11 * ti4;
05384         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = cr2 - ci5;
05385         ch[(k + ch_dim2 * 3) * ch_dim1 + 1] = cr3 - ci4;
05386         ch[(k + (ch_dim2 << 2)) * ch_dim1 + 1] = cr3 + ci4;
05387         ch[(k + ch_dim2 * 5) * ch_dim1 + 1] = cr2 + ci5;
05388 /* L101: */
05389     }
05390     if (*ido == 1) {
05391         return 0;
05392     }
05393     idp2 = *ido + 2;
05394     i__1 = *l1;
05395     for (k = 1; k <= i__1; ++k) {
05396         i__2 = *ido;
05397         for (i__ = 3; i__ <= i__2; i__ += 2) {
05398             ic = idp2 - i__;
05399             ti5 = cc[i__ + (k * 5 + 3) * cc_dim1] + cc[ic + (k * 5 + 2) * 
05400                     cc_dim1];
05401             ti2 = cc[i__ + (k * 5 + 3) * cc_dim1] - cc[ic + (k * 5 + 2) * 
05402                     cc_dim1];
05403             ti4 = cc[i__ + (k * 5 + 5) * cc_dim1] + cc[ic + (k * 5 + 4) * 
05404                     cc_dim1];
05405             ti3 = cc[i__ + (k * 5 + 5) * cc_dim1] - cc[ic + (k * 5 + 4) * 
05406                     cc_dim1];
05407             tr5 = cc[i__ - 1 + (k * 5 + 3) * cc_dim1] - cc[ic - 1 + (k * 5 + 
05408                     2) * cc_dim1];
05409             tr2 = cc[i__ - 1 + (k * 5 + 3) * cc_dim1] + cc[ic - 1 + (k * 5 + 
05410                     2) * cc_dim1];
05411             tr4 = cc[i__ - 1 + (k * 5 + 5) * cc_dim1] - cc[ic - 1 + (k * 5 + 
05412                     4) * cc_dim1];
05413             tr3 = cc[i__ - 1 + (k * 5 + 5) * cc_dim1] + cc[ic - 1 + (k * 5 + 
05414                     4) * cc_dim1];
05415             ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = cc[i__ - 1 + (k * 5 + 1) *
05416                      cc_dim1] + tr2 + tr3;
05417             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * 5 + 1) * 
05418                     cc_dim1] + ti2 + ti3;
05419             cr2 = cc[i__ - 1 + (k * 5 + 1) * cc_dim1] + tr11 * tr2 + tr12 * 
05420                     tr3;
05421             ci2 = cc[i__ + (k * 5 + 1) * cc_dim1] + tr11 * ti2 + tr12 * ti3;
05422             cr3 = cc[i__ - 1 + (k * 5 + 1) * cc_dim1] + tr12 * tr2 + tr11 * 
05423                     tr3;
05424             ci3 = cc[i__ + (k * 5 + 1) * cc_dim1] + tr12 * ti2 + tr11 * ti3;
05425             cr5 = ti11 * tr5 + ti12 * tr4;
05426             ci5 = ti11 * ti5 + ti12 * ti4;
05427             cr4 = ti12 * tr5 - ti11 * tr4;
05428             ci4 = ti12 * ti5 - ti11 * ti4;
05429             dr3 = cr3 - ci4;
05430             dr4 = cr3 + ci4;
05431             di3 = ci3 + cr4;
05432             di4 = ci3 - cr4;
05433             dr5 = cr2 + ci5;
05434             dr2 = cr2 - ci5;
05435             di5 = ci2 - cr5;
05436             di2 = ci2 + cr5;
05437             ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 2] * dr2 
05438                     - wa1[i__ - 1] * di2;
05439             ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 2] * di2 + 
05440                     wa1[i__ - 1] * dr2;
05441             ch[i__ - 1 + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 2] * dr3 - 
05442                     wa2[i__ - 1] * di3;
05443             ch[i__ + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 2] * di3 + wa2[
05444                     i__ - 1] * dr3;
05445             ch[i__ - 1 + (k + (ch_dim2 << 2)) * ch_dim1] = wa3[i__ - 2] * dr4 
05446                     - wa3[i__ - 1] * di4;
05447             ch[i__ + (k + (ch_dim2 << 2)) * ch_dim1] = wa3[i__ - 2] * di4 + 
05448                     wa3[i__ - 1] * dr4;
05449             ch[i__ - 1 + (k + ch_dim2 * 5) * ch_dim1] = wa4[i__ - 2] * dr5 - 
05450                     wa4[i__ - 1] * di5;
05451             ch[i__ + (k + ch_dim2 * 5) * ch_dim1] = wa4[i__ - 2] * di5 + wa4[
05452                     i__ - 1] * dr5;
05453 /* L102: */
05454         }
05455 /* L103: */
05456     }
05457     return 0;
05458 } /* fradb5_ */
05459 
05460 /* Subroutine */ int fradb3_(integer *ido, integer *l1, real *cc, real *ch, 
05461         real *wa1, real *wa2)
05462 {
05463     /* Initialized data */
05464 
05465     static real taur = (float)-.5;
05466     static real taui = (float).866025403784439;
05467 
05468     /* System generated locals */
05469     integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
05470 
05471     /* Local variables */
05472     static integer i__, k, ic;
05473     static real ci2, ci3, di2, di3, cr2, cr3, dr2, dr3, ti2, tr2;
05474     static integer idp2;
05475 
05476 /* ----------------------------TJW */
05477 /* ----------------------------TJW */
05478     /* Parameter adjustments */
05479     ch_dim1 = *ido;
05480     ch_dim2 = *l1;
05481     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
05482     ch -= ch_offset;
05483     cc_dim1 = *ido;
05484     cc_offset = (cc_dim1 << 2) + 1;
05485     cc -= cc_offset;
05486     --wa1;
05487     --wa2;
05488 
05489     /* Function Body */
05490     i__1 = *l1;
05491     for (k = 1; k <= i__1; ++k) {
05492         tr2 = cc[*ido + (k * 3 + 2) * cc_dim1] + cc[*ido + (k * 3 + 2) * 
05493                 cc_dim1];
05494         cr2 = cc[(k * 3 + 1) * cc_dim1 + 1] + taur * tr2;
05495         ch[(k + ch_dim2) * ch_dim1 + 1] = cc[(k * 3 + 1) * cc_dim1 + 1] + tr2;
05496         ci3 = taui * (cc[(k * 3 + 3) * cc_dim1 + 1] + cc[(k * 3 + 3) * 
05497                 cc_dim1 + 1]);
05498         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = cr2 - ci3;
05499         ch[(k + ch_dim2 * 3) * ch_dim1 + 1] = cr2 + ci3;
05500 /* L101: */
05501     }
05502     if (*ido == 1) {
05503         return 0;
05504     }
05505     idp2 = *ido + 2;
05506     i__1 = *l1;
05507     for (k = 1; k <= i__1; ++k) {
05508         i__2 = *ido;
05509         for (i__ = 3; i__ <= i__2; i__ += 2) {
05510             ic = idp2 - i__;
05511             tr2 = cc[i__ - 1 + (k * 3 + 3) * cc_dim1] + cc[ic - 1 + (k * 3 + 
05512                     2) * cc_dim1];
05513             cr2 = cc[i__ - 1 + (k * 3 + 1) * cc_dim1] + taur * tr2;
05514             ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = cc[i__ - 1 + (k * 3 + 1) *
05515                      cc_dim1] + tr2;
05516             ti2 = cc[i__ + (k * 3 + 3) * cc_dim1] - cc[ic + (k * 3 + 2) * 
05517                     cc_dim1];
05518             ci2 = cc[i__ + (k * 3 + 1) * cc_dim1] + taur * ti2;
05519             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * 3 + 1) * 
05520                     cc_dim1] + ti2;
05521             cr3 = taui * (cc[i__ - 1 + (k * 3 + 3) * cc_dim1] - cc[ic - 1 + (
05522                     k * 3 + 2) * cc_dim1]);
05523             ci3 = taui * (cc[i__ + (k * 3 + 3) * cc_dim1] + cc[ic + (k * 3 + 
05524                     2) * cc_dim1]);
05525             dr2 = cr2 - ci3;
05526             dr3 = cr2 + ci3;
05527             di2 = ci2 + cr3;
05528             di3 = ci2 - cr3;
05529             ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 2] * dr2 
05530                     - wa1[i__ - 1] * di2;
05531             ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 2] * di2 + 
05532                     wa1[i__ - 1] * dr2;
05533             ch[i__ - 1 + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 2] * dr3 - 
05534                     wa2[i__ - 1] * di3;
05535             ch[i__ + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 2] * di3 + wa2[
05536                     i__ - 1] * dr3;
05537 /* L102: */
05538         }
05539 /* L103: */
05540     }
05541     return 0;
05542 } /* fradb3_ */
05543 
05544 /* Subroutine */ int fradb2_(integer *ido, integer *l1, real *cc, real *ch, 
05545         real *wa1)
05546 {
05547     /* System generated locals */
05548     integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
05549 
05550     /* Local variables */
05551     static integer i__, k, ic;
05552     static real ti2, tr2;
05553     static integer idp2;
05554 
05555 /* ----------------------------TJW */
05556 /* ----------------------------TJW */
05557     /* Parameter adjustments */
05558     ch_dim1 = *ido;
05559     ch_dim2 = *l1;
05560     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
05561     ch -= ch_offset;
05562     cc_dim1 = *ido;
05563     cc_offset = cc_dim1 * 3 + 1;
05564     cc -= cc_offset;
05565     --wa1;
05566 
05567     /* Function Body */
05568     i__1 = *l1;
05569     for (k = 1; k <= i__1; ++k) {
05570         ch[(k + ch_dim2) * ch_dim1 + 1] = cc[((k << 1) + 1) * cc_dim1 + 1] + 
05571                 cc[*ido + ((k << 1) + 2) * cc_dim1];
05572         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = cc[((k << 1) + 1) * cc_dim1 
05573                 + 1] - cc[*ido + ((k << 1) + 2) * cc_dim1];
05574 /* L101: */
05575     }
05576     if ((i__1 = *ido - 2) < 0) {
05577         goto L107;
05578     } else if (i__1 == 0) {
05579         goto L105;
05580     } else {
05581         goto L102;
05582     }
05583 L102:
05584     idp2 = *ido + 2;
05585     i__1 = *l1;
05586     for (k = 1; k <= i__1; ++k) {
05587         i__2 = *ido;
05588         for (i__ = 3; i__ <= i__2; i__ += 2) {
05589             ic = idp2 - i__;
05590             ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = cc[i__ - 1 + ((k << 1) + 
05591                     1) * cc_dim1] + cc[ic - 1 + ((k << 1) + 2) * cc_dim1];
05592             tr2 = cc[i__ - 1 + ((k << 1) + 1) * cc_dim1] - cc[ic - 1 + ((k << 
05593                     1) + 2) * cc_dim1];
05594             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + ((k << 1) + 1) * 
05595                     cc_dim1] - cc[ic + ((k << 1) + 2) * cc_dim1];
05596             ti2 = cc[i__ + ((k << 1) + 1) * cc_dim1] + cc[ic + ((k << 1) + 2) 
05597                     * cc_dim1];
05598             ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 2] * tr2 
05599                     - wa1[i__ - 1] * ti2;
05600             ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 2] * ti2 + 
05601                     wa1[i__ - 1] * tr2;
05602 /* L103: */
05603         }
05604 /* L104: */
05605     }
05606     if (*ido % 2 == 1) {
05607         return 0;
05608     }
05609 L105:
05610     i__1 = *l1;
05611     for (k = 1; k <= i__1; ++k) {
05612         ch[*ido + (k + ch_dim2) * ch_dim1] = cc[*ido + ((k << 1) + 1) * 
05613                 cc_dim1] + cc[*ido + ((k << 1) + 1) * cc_dim1];
05614         ch[*ido + (k + (ch_dim2 << 1)) * ch_dim1] = -(cc[((k << 1) + 2) * 
05615                 cc_dim1 + 1] + cc[((k << 1) + 2) * cc_dim1 + 1]);
05616 /* L106: */
05617     }
05618 L107:
05619     return 0;
05620 } /* fradb2_ */
05621 
05622 /* Subroutine */ int fradb4_(integer *ido, integer *l1, real *cc, real *ch, 
05623         real *wa1, real *wa2, real *wa3)
05624 {
05625     /* Initialized data */
05626 
05627     static real sqrt2 = (float)1.414213562373095;
05628 
05629     /* System generated locals */
05630     integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
05631 
05632     /* Local variables */
05633     static integer i__, k, ic;
05634     static real ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, 
05635             tr3, tr4;
05636     static integer idp2;
05637 
05638 /* ----------------------------TJW */
05639 /* ----------------------------TJW */
05640     /* Parameter adjustments */
05641     ch_dim1 = *ido;
05642     ch_dim2 = *l1;
05643     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
05644     ch -= ch_offset;
05645     cc_dim1 = *ido;
05646     cc_offset = cc_dim1 * 5 + 1;
05647     cc -= cc_offset;
05648     --wa1;
05649     --wa2;
05650     --wa3;
05651 
05652     /* Function Body */
05653     i__1 = *l1;
05654     for (k = 1; k <= i__1; ++k) {
05655         tr1 = cc[((k << 2) + 1) * cc_dim1 + 1] - cc[*ido + ((k << 2) + 4) * 
05656                 cc_dim1];
05657         tr2 = cc[((k << 2) + 1) * cc_dim1 + 1] + cc[*ido + ((k << 2) + 4) * 
05658                 cc_dim1];
05659         tr3 = cc[*ido + ((k << 2) + 2) * cc_dim1] + cc[*ido + ((k << 2) + 2) *
05660                  cc_dim1];
05661         tr4 = cc[((k << 2) + 3) * cc_dim1 + 1] + cc[((k << 2) + 3) * cc_dim1 
05662                 + 1];
05663         ch[(k + ch_dim2) * ch_dim1 + 1] = tr2 + tr3;
05664         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = tr1 - tr4;
05665         ch[(k + ch_dim2 * 3) * ch_dim1 + 1] = tr2 - tr3;
05666         ch[(k + (ch_dim2 << 2)) * ch_dim1 + 1] = tr1 + tr4;
05667 /* L101: */
05668     }
05669     if ((i__1 = *ido - 2) < 0) {
05670         goto L107;
05671     } else if (i__1 == 0) {
05672         goto L105;
05673     } else {
05674         goto L102;
05675     }
05676 L102:
05677     idp2 = *ido + 2;
05678     i__1 = *l1;
05679     for (k = 1; k <= i__1; ++k) {
05680         i__2 = *ido;
05681         for (i__ = 3; i__ <= i__2; i__ += 2) {
05682             ic = idp2 - i__;
05683             ti1 = cc[i__ + ((k << 2) + 1) * cc_dim1] + cc[ic + ((k << 2) + 4) 
05684                     * cc_dim1];
05685             ti2 = cc[i__ + ((k << 2) + 1) * cc_dim1] - cc[ic + ((k << 2) + 4) 
05686                     * cc_dim1];
05687             ti3 = cc[i__ + ((k << 2) + 3) * cc_dim1] - cc[ic + ((k << 2) + 2) 
05688                     * cc_dim1];
05689             tr4 = cc[i__ + ((k << 2) + 3) * cc_dim1] + cc[ic + ((k << 2) + 2) 
05690                     * cc_dim1];
05691             tr1 = cc[i__ - 1 + ((k << 2) + 1) * cc_dim1] - cc[ic - 1 + ((k << 
05692                     2) + 4) * cc_dim1];
05693             tr2 = cc[i__ - 1 + ((k << 2) + 1) * cc_dim1] + cc[ic - 1 + ((k << 
05694                     2) + 4) * cc_dim1];
05695             ti4 = cc[i__ - 1 + ((k << 2) + 3) * cc_dim1] - cc[ic - 1 + ((k << 
05696                     2) + 2) * cc_dim1];
05697             tr3 = cc[i__ - 1 + ((k << 2) + 3) * cc_dim1] + cc[ic - 1 + ((k << 
05698                     2) + 2) * cc_dim1];
05699             ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = tr2 + tr3;
05700             cr3 = tr2 - tr3;
05701             ch[i__ + (k + ch_dim2) * ch_dim1] = ti2 + ti3;
05702             ci3 = ti2 - ti3;
05703             cr2 = tr1 - tr4;
05704             cr4 = tr1 + tr4;
05705             ci2 = ti1 + ti4;
05706             ci4 = ti1 - ti4;
05707             ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 2] * cr2 
05708                     - wa1[i__ - 1] * ci2;
05709             ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 2] * ci2 + 
05710                     wa1[i__ - 1] * cr2;
05711             ch[i__ - 1 + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 2] * cr3 - 
05712                     wa2[i__ - 1] * ci3;
05713             ch[i__ + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 2] * ci3 + wa2[
05714                     i__ - 1] * cr3;
05715             ch[i__ - 1 + (k + (ch_dim2 << 2)) * ch_dim1] = wa3[i__ - 2] * cr4 
05716                     - wa3[i__ - 1] * ci4;
05717             ch[i__ + (k + (ch_dim2 << 2)) * ch_dim1] = wa3[i__ - 2] * ci4 + 
05718                     wa3[i__ - 1] * cr4;
05719 /* L103: */
05720         }
05721 /* L104: */
05722     }
05723     if (*ido % 2 == 1) {
05724         return 0;
05725     }
05726 L105:
05727     i__1 = *l1;
05728     for (k = 1; k <= i__1; ++k) {
05729         ti1 = cc[((k << 2) + 2) * cc_dim1 + 1] + cc[((k << 2) + 4) * cc_dim1 
05730                 + 1];
05731         ti2 = cc[((k << 2) + 4) * cc_dim1 + 1] - cc[((k << 2) + 2) * cc_dim1 
05732                 + 1];
05733         tr1 = cc[*ido + ((k << 2) + 1) * cc_dim1] - cc[*ido + ((k << 2) + 3) *
05734                  cc_dim1];
05735         tr2 = cc[*ido + ((k << 2) + 1) * cc_dim1] + cc[*ido + ((k << 2) + 3) *
05736                  cc_dim1];
05737         ch[*ido + (k + ch_dim2) * ch_dim1] = tr2 + tr2;
05738         ch[*ido + (k + (ch_dim2 << 1)) * ch_dim1] = sqrt2 * (tr1 - ti1);
05739         ch[*ido + (k + ch_dim2 * 3) * ch_dim1] = ti2 + ti2;
05740         ch[*ido + (k + (ch_dim2 << 2)) * ch_dim1] = -sqrt2 * (tr1 + ti1);
05741 /* L106: */
05742     }
05743 L107:
05744     return 0;
05745 } /* fradb4_ */
05746 
05747 /* Subroutine */ int fcffti_(integer *n, real *wsave)
05748 {
05749     static integer iw1, iw2;
05750     extern /* Subroutine */ int fcffti1_(integer *, real *, real *);
05751 
05752 /* ----------------------------TJW */
05753 /* ----------------------------TJW */
05754     /* Parameter adjustments */
05755     --wsave;
05756 
05757     /* Function Body */
05758     if (*n == 1) {
05759         return 0;
05760     }
05761     iw1 = *n + *n + 1;
05762     iw2 = iw1 + *n + *n;
05763     fcffti1_(n, &wsave[iw1], &wsave[iw2]);
05764     return 0;
05765 } /* fcffti_ */
05766 
05767 /* Subroutine */ int fcffti1_(integer *n, real *wa, integer *ifac)
05768 {
05769     /* Initialized data */
05770 
05771     static integer ntryh[4] = { 3,4,2,5 };
05772 
05773     /* System generated locals */
05774     integer i__1, i__2, i__3;
05775 
05776     /* Builtin functions */
05777     double cos(doublereal), sin(doublereal);
05778 
05779     /* Local variables */
05780     static real argh;
05781     static integer idot, ntry, i__, j;
05782     static real argld;
05783     static integer i1, k1, l1, l2, ib;
05784     static real fi;
05785     static integer ld, ii, nf, ip, nl, nq, nr;
05786     static real arg;
05787     static integer ido, ipm;
05788     static real tpi;
05789 
05790 /* ----------------------------TJW */
05791 /* ----------------------------TJW */
05792     /* Parameter adjustments */
05793     --ifac;
05794     --wa;
05795 
05796     /* Function Body */
05797     nl = *n;
05798     nf = 0;
05799     j = 0;
05800 L101:
05801     ++j;
05802     if (j - 4 <= 0) {
05803         goto L102;
05804     } else {
05805         goto L103;
05806     }
05807 L102:
05808     ntry = ntryh[j - 1];
05809     goto L104;
05810 L103:
05811     ntry += 2;
05812 L104:
05813     nq = nl / ntry;
05814     nr = nl - ntry * nq;
05815     if (nr != 0) {
05816         goto L101;
05817     } else {
05818         goto L105;
05819     }
05820 L105:
05821     ++nf;
05822     ifac[nf + 2] = ntry;
05823     nl = nq;
05824     if (ntry != 2) {
05825         goto L107;
05826     }
05827     if (nf == 1) {
05828         goto L107;
05829     }
05830     i__1 = nf;
05831     for (i__ = 2; i__ <= i__1; ++i__) {
05832         ib = nf - i__ + 2;
05833         ifac[ib + 2] = ifac[ib + 1];
05834 /* L106: */
05835     }
05836     ifac[3] = 2;
05837 L107:
05838     if (nl != 1) {
05839         goto L104;
05840     }
05841     ifac[1] = *n;
05842     ifac[2] = nf;
05843     tpi = (float)6.28318530717959;
05844     argh = tpi / (real) (*n);
05845     i__ = 2;
05846     l1 = 1;
05847     i__1 = nf;
05848     for (k1 = 1; k1 <= i__1; ++k1) {
05849         ip = ifac[k1 + 2];
05850         ld = 0;
05851         l2 = l1 * ip;
05852         ido = *n / l2;
05853         idot = ido + ido + 2;
05854         ipm = ip - 1;
05855         i__2 = ipm;
05856         for (j = 1; j <= i__2; ++j) {
05857             i1 = i__;
05858             wa[i__ - 1] = (float)1.;
05859             wa[i__] = (float)0.;
05860             ld += l1;
05861             fi = (float)0.;
05862             argld = (real) ld * argh;
05863             i__3 = idot;
05864             for (ii = 4; ii <= i__3; ii += 2) {
05865                 i__ += 2;
05866                 fi += (float)1.;
05867                 arg = fi * argld;
05868                 wa[i__ - 1] = cos(arg);
05869                 wa[i__] = sin(arg);
05870 /* L108: */
05871             }
05872             if (ip <= 5) {
05873                 goto L109;
05874             }
05875             wa[i1 - 1] = wa[i__ - 1];
05876             wa[i1] = wa[i__];
05877 L109:
05878             ;
05879         }
05880         l1 = l2;
05881 /* L110: */
05882     }
05883     return 0;
05884 } /* fcffti1_ */
05885 
05886 /* Subroutine */ int fcfftf_(integer *n, real *c__, real *wsave)
05887 {
05888     extern /* Subroutine */ int fcfftf1_(integer *, real *, real *, real *, 
05889             real *);
05890     static integer iw1, iw2;
05891 
05892 /* ----------------------------TJW */
05893 /* ----------------------------TJW */
05894     /* Parameter adjustments */
05895     --wsave;
05896     --c__;
05897 
05898     /* Function Body */
05899     if (*n == 1) {
05900         return 0;
05901     }
05902     iw1 = *n + *n + 1;
05903     iw2 = iw1 + *n + *n;
05904     fcfftf1_(n, &c__[1], &wsave[1], &wsave[iw1], &wsave[iw2]);
05905     return 0;
05906 } /* fcfftf_ */
05907 
05908 /* Subroutine */ int fcfftf1_(integer *n, real *c__, real *ch, real *wa, 
05909         integer *ifac)
05910 {
05911     /* System generated locals */
05912     integer i__1;
05913 
05914     /* Local variables */
05915     static integer idot, i__, k1, l1, l2, n2, na, nf, ip, iw;
05916     extern /* Subroutine */ int fpassf_(integer *, integer *, integer *, 
05917             integer *, integer *, real *, real *, real *, real *, real *, 
05918             real *);
05919     static integer ix2, ix3, ix4;
05920     extern /* Subroutine */ int fpassf2_(integer *, integer *, real *, real *,
05921              real *), fpassf3_(integer *, integer *, real *, real *, real *, 
05922             real *), fpassf4_(integer *, integer *, real *, real *, real *, 
05923             real *, real *), fpassf5_(integer *, integer *, real *, real *, 
05924             real *, real *, real *, real *);
05925     static integer nac, ido, idl1;
05926 
05927 /* ----------------------------TJW */
05928 /* ----------------------------TJW */
05929     /* Parameter adjustments */
05930     --ifac;
05931     --wa;
05932     --ch;
05933     --c__;
05934 
05935     /* Function Body */
05936     nf = ifac[2];
05937     na = 0;
05938     l1 = 1;
05939     iw = 1;
05940     i__1 = nf;
05941     for (k1 = 1; k1 <= i__1; ++k1) {
05942         ip = ifac[k1 + 2];
05943         l2 = ip * l1;
05944         ido = *n / l2;
05945         idot = ido + ido;
05946         idl1 = idot * l1;
05947         if (ip != 4) {
05948             goto L103;
05949         }
05950         ix2 = iw + idot;
05951         ix3 = ix2 + idot;
05952         if (na != 0) {
05953             goto L101;
05954         }
05955         fpassf4_(&idot, &l1, &c__[1], &ch[1], &wa[iw], &wa[ix2], &wa[ix3]);
05956         goto L102;
05957 L101:
05958         fpassf4_(&idot, &l1, &ch[1], &c__[1], &wa[iw], &wa[ix2], &wa[ix3]);
05959 L102:
05960         na = 1 - na;
05961         goto L115;
05962 L103:
05963         if (ip != 2) {
05964             goto L106;
05965         }
05966         if (na != 0) {
05967             goto L104;
05968         }
05969         fpassf2_(&idot, &l1, &c__[1], &ch[1], &wa[iw]);
05970         goto L105;
05971 L104:
05972         fpassf2_(&idot, &l1, &ch[1], &c__[1], &wa[iw]);
05973 L105:
05974         na = 1 - na;
05975         goto L115;
05976 L106:
05977         if (ip != 3) {
05978             goto L109;
05979         }
05980         ix2 = iw + idot;
05981         if (na != 0) {
05982             goto L107;
05983         }
05984         fpassf3_(&idot, &l1, &c__[1], &ch[1], &wa[iw], &wa[ix2]);
05985         goto L108;
05986 L107:
05987         fpassf3_(&idot, &l1, &ch[1], &c__[1], &wa[iw], &wa[ix2]);
05988 L108:
05989         na = 1 - na;
05990         goto L115;
05991 L109:
05992         if (ip != 5) {
05993             goto L112;
05994         }
05995         ix2 = iw + idot;
05996         ix3 = ix2 + idot;
05997         ix4 = ix3 + idot;
05998         if (na != 0) {
05999             goto L110;
06000         }
06001         fpassf5_(&idot, &l1, &c__[1], &ch[1], &wa[iw], &wa[ix2], &wa[ix3], &
06002                 wa[ix4]);
06003         goto L111;
06004 L110:
06005         fpassf5_(&idot, &l1, &ch[1], &c__[1], &wa[iw], &wa[ix2], &wa[ix3], &
06006                 wa[ix4]);
06007 L111:
06008         na = 1 - na;
06009         goto L115;
06010 L112:
06011         if (na != 0) {
06012             goto L113;
06013         }
06014         fpassf_(&nac, &idot, &ip, &l1, &idl1, &c__[1], &c__[1], &c__[1], &ch[
06015                 1], &ch[1], &wa[iw]);
06016         goto L114;
06017 L113:
06018         fpassf_(&nac, &idot, &ip, &l1, &idl1, &ch[1], &ch[1], &ch[1], &c__[1],
06019                  &c__[1], &wa[iw]);
06020 L114:
06021         if (nac != 0) {
06022             na = 1 - na;
06023         }
06024 L115:
06025         l1 = l2;
06026         iw += (ip - 1) * idot;
06027 /* L116: */
06028     }
06029     if (na == 0) {
06030         return 0;
06031     }
06032     n2 = *n + *n;
06033     i__1 = n2;
06034     for (i__ = 1; i__ <= i__1; ++i__) {
06035         c__[i__] = ch[i__];
06036 /* L117: */
06037     }
06038     return 0;
06039 } /* fcfftf1_ */
06040 
06041 /* Subroutine */ int fpassf_(integer *nac, integer *ido, integer *ip, integer 
06042         *l1, integer *idl1, real *cc, real *c1, real *c2, real *ch, real *ch2,
06043          real *wa)
06044 {
06045     /* System generated locals */
06046     integer ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1,
06047              c1_dim2, c1_offset, c2_dim1, c2_offset, ch2_dim1, ch2_offset, 
06048             i__1, i__2, i__3;
06049 
06050     /* Local variables */
06051     static integer idij, idlj, idot, ipph, i__, j, k, l, jc, lc, ik, nt, idj, 
06052             idl, inc, idp;
06053     static real wai, war;
06054     static integer ipp2;
06055 
06056 /* ----------------------------TJW */
06057 /* ----------------------------TJW */
06058     /* Parameter adjustments */
06059     ch_dim1 = *ido;
06060     ch_dim2 = *l1;
06061     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
06062     ch -= ch_offset;
06063     c1_dim1 = *ido;
06064     c1_dim2 = *l1;
06065     c1_offset = c1_dim1 * (c1_dim2 + 1) + 1;
06066     c1 -= c1_offset;
06067     cc_dim1 = *ido;
06068     cc_dim2 = *ip;
06069     cc_offset = cc_dim1 * (cc_dim2 + 1) + 1;
06070     cc -= cc_offset;
06071     ch2_dim1 = *idl1;
06072     ch2_offset = ch2_dim1 + 1;
06073     ch2 -= ch2_offset;
06074     c2_dim1 = *idl1;
06075     c2_offset = c2_dim1 + 1;
06076     c2 -= c2_offset;
06077     --wa;
06078 
06079     /* Function Body */
06080     idot = *ido / 2;
06081     nt = *ip * *idl1;
06082     ipp2 = *ip + 2;
06083     ipph = (*ip + 1) / 2;
06084     idp = *ip * *ido;
06085 
06086     if (*ido < *l1) {
06087         goto L106;
06088     }
06089     i__1 = ipph;
06090     for (j = 2; j <= i__1; ++j) {
06091         jc = ipp2 - j;
06092         i__2 = *l1;
06093         for (k = 1; k <= i__2; ++k) {
06094             i__3 = *ido;
06095             for (i__ = 1; i__ <= i__3; ++i__) {
06096                 ch[i__ + (k + j * ch_dim2) * ch_dim1] = cc[i__ + (j + k * 
06097                         cc_dim2) * cc_dim1] + cc[i__ + (jc + k * cc_dim2) * 
06098                         cc_dim1];
06099                 ch[i__ + (k + jc * ch_dim2) * ch_dim1] = cc[i__ + (j + k * 
06100                         cc_dim2) * cc_dim1] - cc[i__ + (jc + k * cc_dim2) * 
06101                         cc_dim1];
06102 /* L101: */
06103             }
06104 /* L102: */
06105         }
06106 /* L103: */
06107     }
06108     i__1 = *l1;
06109     for (k = 1; k <= i__1; ++k) {
06110         i__2 = *ido;
06111         for (i__ = 1; i__ <= i__2; ++i__) {
06112             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * cc_dim2 + 1) * 
06113                     cc_dim1];
06114 /* L104: */
06115         }
06116 /* L105: */
06117     }
06118     goto L112;
06119 L106:
06120     i__1 = ipph;
06121     for (j = 2; j <= i__1; ++j) {
06122         jc = ipp2 - j;
06123         i__2 = *ido;
06124         for (i__ = 1; i__ <= i__2; ++i__) {
06125             i__3 = *l1;
06126             for (k = 1; k <= i__3; ++k) {
06127                 ch[i__ + (k + j * ch_dim2) * ch_dim1] = cc[i__ + (j + k * 
06128                         cc_dim2) * cc_dim1] + cc[i__ + (jc + k * cc_dim2) * 
06129                         cc_dim1];
06130                 ch[i__ + (k + jc * ch_dim2) * ch_dim1] = cc[i__ + (j + k * 
06131                         cc_dim2) * cc_dim1] - cc[i__ + (jc + k * cc_dim2) * 
06132                         cc_dim1];
06133 /* L107: */
06134             }
06135 /* L108: */
06136         }
06137 /* L109: */
06138     }
06139     i__1 = *ido;
06140     for (i__ = 1; i__ <= i__1; ++i__) {
06141         i__2 = *l1;
06142         for (k = 1; k <= i__2; ++k) {
06143             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * cc_dim2 + 1) * 
06144                     cc_dim1];
06145 /* L110: */
06146         }
06147 /* L111: */
06148     }
06149 L112:
06150     idl = 2 - *ido;
06151     inc = 0;
06152     i__1 = ipph;
06153     for (l = 2; l <= i__1; ++l) {
06154         lc = ipp2 - l;
06155         idl += *ido;
06156         i__2 = *idl1;
06157         for (ik = 1; ik <= i__2; ++ik) {
06158             c2[ik + l * c2_dim1] = ch2[ik + ch2_dim1] + wa[idl - 1] * ch2[ik 
06159                     + (ch2_dim1 << 1)];
06160             c2[ik + lc * c2_dim1] = -wa[idl] * ch2[ik + *ip * ch2_dim1];
06161 /* L113: */
06162         }
06163         idlj = idl;
06164         inc += *ido;
06165         i__2 = ipph;
06166         for (j = 3; j <= i__2; ++j) {
06167             jc = ipp2 - j;
06168             idlj += inc;
06169             if (idlj > idp) {
06170                 idlj -= idp;
06171             }
06172             war = wa[idlj - 1];
06173             wai = wa[idlj];
06174             i__3 = *idl1;
06175             for (ik = 1; ik <= i__3; ++ik) {
06176                 c2[ik + l * c2_dim1] += war * ch2[ik + j * ch2_dim1];
06177                 c2[ik + lc * c2_dim1] -= wai * ch2[ik + jc * ch2_dim1];
06178 /* L114: */
06179             }
06180 /* L115: */
06181         }
06182 /* L116: */
06183     }
06184     i__1 = ipph;
06185     for (j = 2; j <= i__1; ++j) {
06186         i__2 = *idl1;
06187         for (ik = 1; ik <= i__2; ++ik) {
06188             ch2[ik + ch2_dim1] += ch2[ik + j * ch2_dim1];
06189 /* L117: */
06190         }
06191 /* L118: */
06192     }
06193     i__1 = ipph;
06194     for (j = 2; j <= i__1; ++j) {
06195         jc = ipp2 - j;
06196         i__2 = *idl1;
06197         for (ik = 2; ik <= i__2; ik += 2) {
06198             ch2[ik - 1 + j * ch2_dim1] = c2[ik - 1 + j * c2_dim1] - c2[ik + 
06199                     jc * c2_dim1];
06200             ch2[ik - 1 + jc * ch2_dim1] = c2[ik - 1 + j * c2_dim1] + c2[ik + 
06201                     jc * c2_dim1];
06202             ch2[ik + j * ch2_dim1] = c2[ik + j * c2_dim1] + c2[ik - 1 + jc * 
06203                     c2_dim1];
06204             ch2[ik + jc * ch2_dim1] = c2[ik + j * c2_dim1] - c2[ik - 1 + jc * 
06205                     c2_dim1];
06206 /* L119: */
06207         }
06208 /* L120: */
06209     }
06210     *nac = 1;
06211     if (*ido == 2) {
06212         return 0;
06213     }
06214     *nac = 0;
06215     i__1 = *idl1;
06216     for (ik = 1; ik <= i__1; ++ik) {
06217         c2[ik + c2_dim1] = ch2[ik + ch2_dim1];
06218 /* L121: */
06219     }
06220     i__1 = *ip;
06221     for (j = 2; j <= i__1; ++j) {
06222         i__2 = *l1;
06223         for (k = 1; k <= i__2; ++k) {
06224             c1[(k + j * c1_dim2) * c1_dim1 + 1] = ch[(k + j * ch_dim2) * 
06225                     ch_dim1 + 1];
06226             c1[(k + j * c1_dim2) * c1_dim1 + 2] = ch[(k + j * ch_dim2) * 
06227                     ch_dim1 + 2];
06228 /* L122: */
06229         }
06230 /* L123: */
06231     }
06232     if (idot > *l1) {
06233         goto L127;
06234     }
06235     idij = 0;
06236     i__1 = *ip;
06237     for (j = 2; j <= i__1; ++j) {
06238         idij += 2;
06239         i__2 = *ido;
06240         for (i__ = 4; i__ <= i__2; i__ += 2) {
06241             idij += 2;
06242             i__3 = *l1;
06243             for (k = 1; k <= i__3; ++k) {
06244                 c1[i__ - 1 + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[
06245                         i__ - 1 + (k + j * ch_dim2) * ch_dim1] + wa[idij] * 
06246                         ch[i__ + (k + j * ch_dim2) * ch_dim1];
06247                 c1[i__ + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[i__ 
06248                         + (k + j * ch_dim2) * ch_dim1] - wa[idij] * ch[i__ - 
06249                         1 + (k + j * ch_dim2) * ch_dim1];
06250 /* L124: */
06251             }
06252 /* L125: */
06253         }
06254 /* L126: */
06255     }
06256     return 0;
06257 L127:
06258     idj = 2 - *ido;
06259     i__1 = *ip;
06260     for (j = 2; j <= i__1; ++j) {
06261         idj += *ido;
06262         i__2 = *l1;
06263         for (k = 1; k <= i__2; ++k) {
06264             idij = idj;
06265             i__3 = *ido;
06266             for (i__ = 4; i__ <= i__3; i__ += 2) {
06267                 idij += 2;
06268                 c1[i__ - 1 + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[
06269                         i__ - 1 + (k + j * ch_dim2) * ch_dim1] + wa[idij] * 
06270                         ch[i__ + (k + j * ch_dim2) * ch_dim1];
06271                 c1[i__ + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[i__ 
06272                         + (k + j * ch_dim2) * ch_dim1] - wa[idij] * ch[i__ - 
06273                         1 + (k + j * ch_dim2) * ch_dim1];
06274 /* L128: */
06275             }
06276 /* L129: */
06277         }
06278 /* L130: */
06279     }
06280     return 0;
06281 } /* fpassf_ */
06282 
06283 /* Subroutine */ int fpassf5_(integer *ido, integer *l1, real *cc, real *ch, 
06284         real *wa1, real *wa2, real *wa3, real *wa4)
06285 {
06286     /* Initialized data */
06287 
06288     static real tr11 = (float).309016994374947;
06289     static real ti11 = (float)-.951056516295154;
06290     static real tr12 = (float)-.809016994374947;
06291     static real ti12 = (float)-.587785252292473;
06292 
06293     /* System generated locals */
06294     integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
06295 
06296     /* Local variables */
06297     static integer i__, k;
06298     static real ci2, ci3, ci4, ci5, di3, di4, di5, di2, cr2, cr3, cr5, cr4, 
06299             ti2, ti3, ti4, ti5, dr3, dr4, dr5, dr2, tr2, tr3, tr4, tr5;
06300 
06301 /* ----------------------------TJW */
06302 /* ----------------------------TJW */
06303     /* Parameter adjustments */
06304     ch_dim1 = *ido;
06305     ch_dim2 = *l1;
06306     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
06307     ch -= ch_offset;
06308     cc_dim1 = *ido;
06309     cc_offset = cc_dim1 * 6 + 1;
06310     cc -= cc_offset;
06311     --wa1;
06312     --wa2;
06313     --wa3;
06314     --wa4;
06315 
06316     /* Function Body */
06317     if (*ido != 2) {
06318         goto L102;
06319     }
06320     i__1 = *l1;
06321     for (k = 1; k <= i__1; ++k) {
06322         ti5 = cc[(k * 5 + 2) * cc_dim1 + 2] - cc[(k * 5 + 5) * cc_dim1 + 2];
06323         ti2 = cc[(k * 5 + 2) * cc_dim1 + 2] + cc[(k * 5 + 5) * cc_dim1 + 2];
06324         ti4 = cc[(k * 5 + 3) * cc_dim1 + 2] - cc[(k * 5 + 4) * cc_dim1 + 2];
06325         ti3 = cc[(k * 5 + 3) * cc_dim1 + 2] + cc[(k * 5 + 4) * cc_dim1 + 2];
06326         tr5 = cc[(k * 5 + 2) * cc_dim1 + 1] - cc[(k * 5 + 5) * cc_dim1 + 1];
06327         tr2 = cc[(k * 5 + 2) * cc_dim1 + 1] + cc[(k * 5 + 5) * cc_dim1 + 1];
06328         tr4 = cc[(k * 5 + 3) * cc_dim1 + 1] - cc[(k * 5 + 4) * cc_dim1 + 1];
06329         tr3 = cc[(k * 5 + 3) * cc_dim1 + 1] + cc[(k * 5 + 4) * cc_dim1 + 1];
06330         ch[(k + ch_dim2) * ch_dim1 + 1] = cc[(k * 5 + 1) * cc_dim1 + 1] + tr2 
06331                 + tr3;
06332         ch[(k + ch_dim2) * ch_dim1 + 2] = cc[(k * 5 + 1) * cc_dim1 + 2] + ti2 
06333                 + ti3;
06334         cr2 = cc[(k * 5 + 1) * cc_dim1 + 1] + tr11 * tr2 + tr12 * tr3;
06335         ci2 = cc[(k * 5 + 1) * cc_dim1 + 2] + tr11 * ti2 + tr12 * ti3;
06336         cr3 = cc[(k * 5 + 1) * cc_dim1 + 1] + tr12 * tr2 + tr11 * tr3;
06337         ci3 = cc[(k * 5 + 1) * cc_dim1 + 2] + tr12 * ti2 + tr11 * ti3;
06338         cr5 = ti11 * tr5 + ti12 * tr4;
06339         ci5 = ti11 * ti5 + ti12 * ti4;
06340         cr4 = ti12 * tr5 - ti11 * tr4;
06341         ci4 = ti12 * ti5 - ti11 * ti4;
06342         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = cr2 - ci5;
06343         ch[(k + ch_dim2 * 5) * ch_dim1 + 1] = cr2 + ci5;
06344         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 2] = ci2 + cr5;
06345         ch[(k + ch_dim2 * 3) * ch_dim1 + 2] = ci3 + cr4;
06346         ch[(k + ch_dim2 * 3) * ch_dim1 + 1] = cr3 - ci4;
06347         ch[(k + (ch_dim2 << 2)) * ch_dim1 + 1] = cr3 + ci4;
06348         ch[(k + (ch_dim2 << 2)) * ch_dim1 + 2] = ci3 - cr4;
06349         ch[(k + ch_dim2 * 5) * ch_dim1 + 2] = ci2 - cr5;
06350 /* L101: */
06351     }
06352     return 0;
06353 L102:
06354     i__1 = *l1;
06355     for (k = 1; k <= i__1; ++k) {
06356         i__2 = *ido;
06357         for (i__ = 2; i__ <= i__2; i__ += 2) {
06358             ti5 = cc[i__ + (k * 5 + 2) * cc_dim1] - cc[i__ + (k * 5 + 5) * 
06359                     cc_dim1];
06360             ti2 = cc[i__ + (k * 5 + 2) * cc_dim1] + cc[i__ + (k * 5 + 5) * 
06361                     cc_dim1];
06362             ti4 = cc[i__ + (k * 5 + 3) * cc_dim1] - cc[i__ + (k * 5 + 4) * 
06363                     cc_dim1];
06364             ti3 = cc[i__ + (k * 5 + 3) * cc_dim1] + cc[i__ + (k * 5 + 4) * 
06365                     cc_dim1];
06366             tr5 = cc[i__ - 1 + (k * 5 + 2) * cc_dim1] - cc[i__ - 1 + (k * 5 + 
06367                     5) * cc_dim1];
06368             tr2 = cc[i__ - 1 + (k * 5 + 2) * cc_dim1] + cc[i__ - 1 + (k * 5 + 
06369                     5) * cc_dim1];
06370             tr4 = cc[i__ - 1 + (k * 5 + 3) * cc_dim1] - cc[i__ - 1 + (k * 5 + 
06371                     4) * cc_dim1];
06372             tr3 = cc[i__ - 1 + (k * 5 + 3) * cc_dim1] + cc[i__ - 1 + (k * 5 + 
06373                     4) * cc_dim1];
06374             ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = cc[i__ - 1 + (k * 5 + 1) *
06375                      cc_dim1] + tr2 + tr3;
06376             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * 5 + 1) * 
06377                     cc_dim1] + ti2 + ti3;
06378             cr2 = cc[i__ - 1 + (k * 5 + 1) * cc_dim1] + tr11 * tr2 + tr12 * 
06379                     tr3;
06380             ci2 = cc[i__ + (k * 5 + 1) * cc_dim1] + tr11 * ti2 + tr12 * ti3;
06381             cr3 = cc[i__ - 1 + (k * 5 + 1) * cc_dim1] + tr12 * tr2 + tr11 * 
06382                     tr3;
06383             ci3 = cc[i__ + (k * 5 + 1) * cc_dim1] + tr12 * ti2 + tr11 * ti3;
06384             cr5 = ti11 * tr5 + ti12 * tr4;
06385             ci5 = ti11 * ti5 + ti12 * ti4;
06386             cr4 = ti12 * tr5 - ti11 * tr4;
06387             ci4 = ti12 * ti5 - ti11 * ti4;
06388             dr3 = cr3 - ci4;
06389             dr4 = cr3 + ci4;
06390             di3 = ci3 + cr4;
06391             di4 = ci3 - cr4;
06392             dr5 = cr2 + ci5;
06393             dr2 = cr2 - ci5;
06394             di5 = ci2 - cr5;
06395             di2 = ci2 + cr5;
06396             ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * dr2 
06397                     + wa1[i__] * di2;
06398             ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * di2 - 
06399                     wa1[i__] * dr2;
06400             ch[i__ - 1 + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 1] * dr3 + 
06401                     wa2[i__] * di3;
06402             ch[i__ + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 1] * di3 - wa2[
06403                     i__] * dr3;
06404             ch[i__ - 1 + (k + (ch_dim2 << 2)) * ch_dim1] = wa3[i__ - 1] * dr4 
06405                     + wa3[i__] * di4;
06406             ch[i__ + (k + (ch_dim2 << 2)) * ch_dim1] = wa3[i__ - 1] * di4 - 
06407                     wa3[i__] * dr4;
06408             ch[i__ - 1 + (k + ch_dim2 * 5) * ch_dim1] = wa4[i__ - 1] * dr5 + 
06409                     wa4[i__] * di5;
06410             ch[i__ + (k + ch_dim2 * 5) * ch_dim1] = wa4[i__ - 1] * di5 - wa4[
06411                     i__] * dr5;
06412 /* L103: */
06413         }
06414 /* L104: */
06415     }
06416     return 0;
06417 } /* fpassf5_ */
06418 
06419 /* Subroutine */ int fpassf3_(integer *ido, integer *l1, real *cc, real *ch, 
06420         real *wa1, real *wa2)
06421 {
06422     /* Initialized data */
06423 
06424     static real taur = (float)-.5;
06425     static real taui = (float)-.866025403784439;
06426 
06427     /* System generated locals */
06428     integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
06429 
06430     /* Local variables */
06431     static integer i__, k;
06432     static real ci2, ci3, di2, di3, cr2, cr3, dr2, dr3, ti2, tr2;
06433 
06434 /* ----------------------------TJW */
06435 /* ----------------------------TJW */
06436     /* Parameter adjustments */
06437     ch_dim1 = *ido;
06438     ch_dim2 = *l1;
06439     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
06440     ch -= ch_offset;
06441     cc_dim1 = *ido;
06442     cc_offset = (cc_dim1 << 2) + 1;
06443     cc -= cc_offset;
06444     --wa1;
06445     --wa2;
06446 
06447     /* Function Body */
06448     if (*ido != 2) {
06449         goto L102;
06450     }
06451     i__1 = *l1;
06452     for (k = 1; k <= i__1; ++k) {
06453         tr2 = cc[(k * 3 + 2) * cc_dim1 + 1] + cc[(k * 3 + 3) * cc_dim1 + 1];
06454         cr2 = cc[(k * 3 + 1) * cc_dim1 + 1] + taur * tr2;
06455         ch[(k + ch_dim2) * ch_dim1 + 1] = cc[(k * 3 + 1) * cc_dim1 + 1] + tr2;
06456         ti2 = cc[(k * 3 + 2) * cc_dim1 + 2] + cc[(k * 3 + 3) * cc_dim1 + 2];
06457         ci2 = cc[(k * 3 + 1) * cc_dim1 + 2] + taur * ti2;
06458         ch[(k + ch_dim2) * ch_dim1 + 2] = cc[(k * 3 + 1) * cc_dim1 + 2] + ti2;
06459         cr3 = taui * (cc[(k * 3 + 2) * cc_dim1 + 1] - cc[(k * 3 + 3) * 
06460                 cc_dim1 + 1]);
06461         ci3 = taui * (cc[(k * 3 + 2) * cc_dim1 + 2] - cc[(k * 3 + 3) * 
06462                 cc_dim1 + 2]);
06463         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = cr2 - ci3;
06464         ch[(k + ch_dim2 * 3) * ch_dim1 + 1] = cr2 + ci3;
06465         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 2] = ci2 + cr3;
06466         ch[(k + ch_dim2 * 3) * ch_dim1 + 2] = ci2 - cr3;
06467 /* L101: */
06468     }
06469     return 0;
06470 L102:
06471     i__1 = *l1;
06472     for (k = 1; k <= i__1; ++k) {
06473         i__2 = *ido;
06474         for (i__ = 2; i__ <= i__2; i__ += 2) {
06475             tr2 = cc[i__ - 1 + (k * 3 + 2) * cc_dim1] + cc[i__ - 1 + (k * 3 + 
06476                     3) * cc_dim1];
06477             cr2 = cc[i__ - 1 + (k * 3 + 1) * cc_dim1] + taur * tr2;
06478             ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = cc[i__ - 1 + (k * 3 + 1) *
06479                      cc_dim1] + tr2;
06480             ti2 = cc[i__ + (k * 3 + 2) * cc_dim1] + cc[i__ + (k * 3 + 3) * 
06481                     cc_dim1];
06482             ci2 = cc[i__ + (k * 3 + 1) * cc_dim1] + taur * ti2;
06483             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * 3 + 1) * 
06484                     cc_dim1] + ti2;
06485             cr3 = taui * (cc[i__ - 1 + (k * 3 + 2) * cc_dim1] - cc[i__ - 1 + (
06486                     k * 3 + 3) * cc_dim1]);
06487             ci3 = taui * (cc[i__ + (k * 3 + 2) * cc_dim1] - cc[i__ + (k * 3 + 
06488                     3) * cc_dim1]);
06489             dr2 = cr2 - ci3;
06490             dr3 = cr2 + ci3;
06491             di2 = ci2 + cr3;
06492             di3 = ci2 - cr3;
06493             ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * di2 - 
06494                     wa1[i__] * dr2;
06495             ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * dr2 
06496                     + wa1[i__] * di2;
06497             ch[i__ + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 1] * di3 - wa2[
06498                     i__] * dr3;
06499             ch[i__ - 1 + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 1] * dr3 + 
06500                     wa2[i__] * di3;
06501 /* L103: */
06502         }
06503 /* L104: */
06504     }
06505     return 0;
06506 } /* fpassf3_ */
06507 
06508 /* Subroutine */ int fpassf2_(integer *ido, integer *l1, real *cc, real *ch, 
06509         real *wa1)
06510 {
06511     /* System generated locals */
06512     integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
06513 
06514     /* Local variables */
06515     static integer i__, k;
06516     static real ti2, tr2;
06517 
06518 /* ----------------------------TJW */
06519 /* ----------------------------TJW */
06520     /* Parameter adjustments */
06521     ch_dim1 = *ido;
06522     ch_dim2 = *l1;
06523     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
06524     ch -= ch_offset;
06525     cc_dim1 = *ido;
06526     cc_offset = cc_dim1 * 3 + 1;
06527     cc -= cc_offset;
06528     --wa1;
06529 
06530     /* Function Body */
06531     if (*ido > 2) {
06532         goto L102;
06533     }
06534     i__1 = *l1;
06535     for (k = 1; k <= i__1; ++k) {
06536         ch[(k + ch_dim2) * ch_dim1 + 1] = cc[((k << 1) + 1) * cc_dim1 + 1] + 
06537                 cc[((k << 1) + 2) * cc_dim1 + 1];
06538         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = cc[((k << 1) + 1) * cc_dim1 
06539                 + 1] - cc[((k << 1) + 2) * cc_dim1 + 1];
06540         ch[(k + ch_dim2) * ch_dim1 + 2] = cc[((k << 1) + 1) * cc_dim1 + 2] + 
06541                 cc[((k << 1) + 2) * cc_dim1 + 2];
06542         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 2] = cc[((k << 1) + 1) * cc_dim1 
06543                 + 2] - cc[((k << 1) + 2) * cc_dim1 + 2];
06544 /* L101: */
06545     }
06546     return 0;
06547 L102:
06548     i__1 = *l1;
06549     for (k = 1; k <= i__1; ++k) {
06550         i__2 = *ido;
06551         for (i__ = 2; i__ <= i__2; i__ += 2) {
06552             ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = cc[i__ - 1 + ((k << 1) + 
06553                     1) * cc_dim1] + cc[i__ - 1 + ((k << 1) + 2) * cc_dim1];
06554             tr2 = cc[i__ - 1 + ((k << 1) + 1) * cc_dim1] - cc[i__ - 1 + ((k <<
06555                      1) + 2) * cc_dim1];
06556             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + ((k << 1) + 1) * 
06557                     cc_dim1] + cc[i__ + ((k << 1) + 2) * cc_dim1];
06558             ti2 = cc[i__ + ((k << 1) + 1) * cc_dim1] - cc[i__ + ((k << 1) + 2)
06559                      * cc_dim1];
06560             ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * ti2 - 
06561                     wa1[i__] * tr2;
06562             ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * tr2 
06563                     + wa1[i__] * ti2;
06564 /* L103: */
06565         }
06566 /* L104: */
06567     }
06568     return 0;
06569 } /* fpassf2_ */
06570 
06571 /* Subroutine */ int fpassf4_(integer *ido, integer *l1, real *cc, real *ch, 
06572         real *wa1, real *wa2, real *wa3)
06573 {
06574     /* System generated locals */
06575     integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
06576 
06577     /* Local variables */
06578     static integer i__, k;
06579     static real ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, 
06580             tr3, tr4;
06581 
06582 /* ----------------------------TJW */
06583 /* ----------------------------TJW */
06584     /* Parameter adjustments */
06585     ch_dim1 = *ido;
06586     ch_dim2 = *l1;
06587     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
06588     ch -= ch_offset;
06589     cc_dim1 = *ido;
06590     cc_offset = cc_dim1 * 5 + 1;
06591     cc -= cc_offset;
06592     --wa1;
06593     --wa2;
06594     --wa3;
06595 
06596     /* Function Body */
06597     if (*ido != 2) {
06598         goto L102;
06599     }
06600     i__1 = *l1;
06601     for (k = 1; k <= i__1; ++k) {
06602         ti1 = cc[((k << 2) + 1) * cc_dim1 + 2] - cc[((k << 2) + 3) * cc_dim1 
06603                 + 2];
06604         ti2 = cc[((k << 2) + 1) * cc_dim1 + 2] + cc[((k << 2) + 3) * cc_dim1 
06605                 + 2];
06606         tr4 = cc[((k << 2) + 2) * cc_dim1 + 2] - cc[((k << 2) + 4) * cc_dim1 
06607                 + 2];
06608         ti3 = cc[((k << 2) + 2) * cc_dim1 + 2] + cc[((k << 2) + 4) * cc_dim1 
06609                 + 2];
06610         tr1 = cc[((k << 2) + 1) * cc_dim1 + 1] - cc[((k << 2) + 3) * cc_dim1 
06611                 + 1];
06612         tr2 = cc[((k << 2) + 1) * cc_dim1 + 1] + cc[((k << 2) + 3) * cc_dim1 
06613                 + 1];
06614         ti4 = cc[((k << 2) + 4) * cc_dim1 + 1] - cc[((k << 2) + 2) * cc_dim1 
06615                 + 1];
06616         tr3 = cc[((k << 2) + 2) * cc_dim1 + 1] + cc[((k << 2) + 4) * cc_dim1 
06617                 + 1];
06618         ch[(k + ch_dim2) * ch_dim1 + 1] = tr2 + tr3;
06619         ch[(k + ch_dim2 * 3) * ch_dim1 + 1] = tr2 - tr3;
06620         ch[(k + ch_dim2) * ch_dim1 + 2] = ti2 + ti3;
06621         ch[(k + ch_dim2 * 3) * ch_dim1 + 2] = ti2 - ti3;
06622         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = tr1 + tr4;
06623         ch[(k + (ch_dim2 << 2)) * ch_dim1 + 1] = tr1 - tr4;
06624         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 2] = ti1 + ti4;
06625         ch[(k + (ch_dim2 << 2)) * ch_dim1 + 2] = ti1 - ti4;
06626 /* L101: */
06627     }
06628     return 0;
06629 L102:
06630     i__1 = *l1;
06631     for (k = 1; k <= i__1; ++k) {
06632         i__2 = *ido;
06633         for (i__ = 2; i__ <= i__2; i__ += 2) {
06634             ti1 = cc[i__ + ((k << 2) + 1) * cc_dim1] - cc[i__ + ((k << 2) + 3)
06635                      * cc_dim1];
06636             ti2 = cc[i__ + ((k << 2) + 1) * cc_dim1] + cc[i__ + ((k << 2) + 3)
06637                      * cc_dim1];
06638             ti3 = cc[i__ + ((k << 2) + 2) * cc_dim1] + cc[i__ + ((k << 2) + 4)
06639                      * cc_dim1];
06640             tr4 = cc[i__ + ((k << 2) + 2) * cc_dim1] - cc[i__ + ((k << 2) + 4)
06641                      * cc_dim1];
06642             tr1 = cc[i__ - 1 + ((k << 2) + 1) * cc_dim1] - cc[i__ - 1 + ((k <<
06643                      2) + 3) * cc_dim1];
06644             tr2 = cc[i__ - 1 + ((k << 2) + 1) * cc_dim1] + cc[i__ - 1 + ((k <<
06645                      2) + 3) * cc_dim1];
06646             ti4 = cc[i__ - 1 + ((k << 2) + 4) * cc_dim1] - cc[i__ - 1 + ((k <<
06647                      2) + 2) * cc_dim1];
06648             tr3 = cc[i__ - 1 + ((k << 2) + 2) * cc_dim1] + cc[i__ - 1 + ((k <<
06649                      2) + 4) * cc_dim1];
06650             ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = tr2 + tr3;
06651             cr3 = tr2 - tr3;
06652             ch[i__ + (k + ch_dim2) * ch_dim1] = ti2 + ti3;
06653             ci3 = ti2 - ti3;
06654             cr2 = tr1 + tr4;
06655             cr4 = tr1 - tr4;
06656             ci2 = ti1 + ti4;
06657             ci4 = ti1 - ti4;
06658             ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * cr2 
06659                     + wa1[i__] * ci2;
06660             ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * ci2 - 
06661                     wa1[i__] * cr2;
06662             ch[i__ - 1 + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 1] * cr3 + 
06663                     wa2[i__] * ci3;
06664             ch[i__ + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 1] * ci3 - wa2[
06665                     i__] * cr3;
06666             ch[i__ - 1 + (k + (ch_dim2 << 2)) * ch_dim1] = wa3[i__ - 1] * cr4 
06667                     + wa3[i__] * ci4;
06668             ch[i__ + (k + (ch_dim2 << 2)) * ch_dim1] = wa3[i__ - 1] * ci4 - 
06669                     wa3[i__] * cr4;
06670 /* L103: */
06671         }
06672 /* L104: */
06673     }
06674     return 0;
06675 } /* fpassf4_ */
06676 
06677 /* Subroutine */ int fcfftb_(integer *n, real *c__, real *wsave)
06678 {
06679     extern /* Subroutine */ int fcfftb1_(integer *, real *, real *, real *, 
06680             real *);
06681     static integer iw1, iw2;
06682 
06683 /* ----------------------------TJW */
06684 /* ----------------------------TJW */
06685     /* Parameter adjustments */
06686     --wsave;
06687     --c__;
06688 
06689     /* Function Body */
06690     if (*n == 1) {
06691         return 0;
06692     }
06693     iw1 = *n + *n + 1;
06694     iw2 = iw1 + *n + *n;
06695     fcfftb1_(n, &c__[1], &wsave[1], &wsave[iw1], &wsave[iw2]);
06696     return 0;
06697 } /* fcfftb_ */
06698 
06699 /* Subroutine */ int fcfftb1_(integer *n, real *c__, real *ch, real *wa, 
06700         integer *ifac)
06701 {
06702     /* System generated locals */
06703     integer i__1;
06704 
06705     /* Local variables */
06706     static integer idot, i__, k1, l1, l2, n2, na, nf, ip, iw;
06707     extern /* Subroutine */ int fpassb_(integer *, integer *, integer *, 
06708             integer *, integer *, real *, real *, real *, real *, real *, 
06709             real *);
06710     static integer ix2, ix3, ix4;
06711     extern /* Subroutine */ int fpassb2_(integer *, integer *, real *, real *,
06712              real *), fpassb3_(integer *, integer *, real *, real *, real *, 
06713             real *), fpassb4_(integer *, integer *, real *, real *, real *, 
06714             real *, real *), fpassb5_(integer *, integer *, real *, real *, 
06715             real *, real *, real *, real *);
06716     static integer nac, ido, idl1;
06717 
06718 /* ----------------------------TJW */
06719 /* ----------------------------TJW */
06720     /* Parameter adjustments */
06721     --ifac;
06722     --wa;
06723     --ch;
06724     --c__;
06725 
06726     /* Function Body */
06727     nf = ifac[2];
06728     na = 0;
06729     l1 = 1;
06730     iw = 1;
06731     i__1 = nf;
06732     for (k1 = 1; k1 <= i__1; ++k1) {
06733         ip = ifac[k1 + 2];
06734         l2 = ip * l1;
06735         ido = *n / l2;
06736         idot = ido + ido;
06737         idl1 = idot * l1;
06738         if (ip != 4) {
06739             goto L103;
06740         }
06741         ix2 = iw + idot;
06742         ix3 = ix2 + idot;
06743         if (na != 0) {
06744             goto L101;
06745         }
06746         fpassb4_(&idot, &l1, &c__[1], &ch[1], &wa[iw], &wa[ix2], &wa[ix3]);
06747         goto L102;
06748 L101:
06749         fpassb4_(&idot, &l1, &ch[1], &c__[1], &wa[iw], &wa[ix2], &wa[ix3]);
06750 L102:
06751         na = 1 - na;
06752         goto L115;
06753 L103:
06754         if (ip != 2) {
06755             goto L106;
06756         }
06757         if (na != 0) {
06758             goto L104;
06759         }
06760         fpassb2_(&idot, &l1, &c__[1], &ch[1], &wa[iw]);
06761         goto L105;
06762 L104:
06763         fpassb2_(&idot, &l1, &ch[1], &c__[1], &wa[iw]);
06764 L105:
06765         na = 1 - na;
06766         goto L115;
06767 L106:
06768         if (ip != 3) {
06769             goto L109;
06770         }
06771         ix2 = iw + idot;
06772         if (na != 0) {
06773             goto L107;
06774         }
06775         fpassb3_(&idot, &l1, &c__[1], &ch[1], &wa[iw], &wa[ix2]);
06776         goto L108;
06777 L107:
06778         fpassb3_(&idot, &l1, &ch[1], &c__[1], &wa[iw], &wa[ix2]);
06779 L108:
06780         na = 1 - na;
06781         goto L115;
06782 L109:
06783         if (ip != 5) {
06784             goto L112;
06785         }
06786         ix2 = iw + idot;
06787         ix3 = ix2 + idot;
06788         ix4 = ix3 + idot;
06789         if (na != 0) {
06790             goto L110;
06791         }
06792         fpassb5_(&idot, &l1, &c__[1], &ch[1], &wa[iw], &wa[ix2], &wa[ix3], &
06793                 wa[ix4]);
06794         goto L111;
06795 L110:
06796         fpassb5_(&idot, &l1, &ch[1], &c__[1], &wa[iw], &wa[ix2], &wa[ix3], &
06797                 wa[ix4]);
06798 L111:
06799         na = 1 - na;
06800         goto L115;
06801 L112:
06802         if (na != 0) {
06803             goto L113;
06804         }
06805         fpassb_(&nac, &idot, &ip, &l1, &idl1, &c__[1], &c__[1], &c__[1], &ch[
06806                 1], &ch[1], &wa[iw]);
06807         goto L114;
06808 L113:
06809         fpassb_(&nac, &idot, &ip, &l1, &idl1, &ch[1], &ch[1], &ch[1], &c__[1],
06810                  &c__[1], &wa[iw]);
06811 L114:
06812         if (nac != 0) {
06813             na = 1 - na;
06814         }
06815 L115:
06816         l1 = l2;
06817         iw += (ip - 1) * idot;
06818 /* L116: */
06819     }
06820     if (na == 0) {
06821         return 0;
06822     }
06823     n2 = *n + *n;
06824     i__1 = n2;
06825     for (i__ = 1; i__ <= i__1; ++i__) {
06826         c__[i__] = ch[i__];
06827 /* L117: */
06828     }
06829     return 0;
06830 } /* fcfftb1_ */
06831 
06832 /* Subroutine */ int fpassb_(integer *nac, integer *ido, integer *ip, integer 
06833         *l1, integer *idl1, real *cc, real *c1, real *c2, real *ch, real *ch2,
06834          real *wa)
06835 {
06836     /* System generated locals */
06837     integer ch_dim1, ch_dim2, ch_offset, cc_dim1, cc_dim2, cc_offset, c1_dim1,
06838              c1_dim2, c1_offset, c2_dim1, c2_offset, ch2_dim1, ch2_offset, 
06839             i__1, i__2, i__3;
06840 
06841     /* Local variables */
06842     static integer idij, idlj, idot, ipph, i__, j, k, l, jc, lc, ik, nt, idj, 
06843             idl, inc, idp;
06844     static real wai, war;
06845     static integer ipp2;
06846 
06847 /* ----------------------------TJW */
06848 /* ----------------------------TJW */
06849     /* Parameter adjustments */
06850     ch_dim1 = *ido;
06851     ch_dim2 = *l1;
06852     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
06853     ch -= ch_offset;
06854     c1_dim1 = *ido;
06855     c1_dim2 = *l1;
06856     c1_offset = c1_dim1 * (c1_dim2 + 1) + 1;
06857     c1 -= c1_offset;
06858     cc_dim1 = *ido;
06859     cc_dim2 = *ip;
06860     cc_offset = cc_dim1 * (cc_dim2 + 1) + 1;
06861     cc -= cc_offset;
06862     ch2_dim1 = *idl1;
06863     ch2_offset = ch2_dim1 + 1;
06864     ch2 -= ch2_offset;
06865     c2_dim1 = *idl1;
06866     c2_offset = c2_dim1 + 1;
06867     c2 -= c2_offset;
06868     --wa;
06869 
06870     /* Function Body */
06871     idot = *ido / 2;
06872     nt = *ip * *idl1;
06873     ipp2 = *ip + 2;
06874     ipph = (*ip + 1) / 2;
06875     idp = *ip * *ido;
06876 
06877     if (*ido < *l1) {
06878         goto L106;
06879     }
06880     i__1 = ipph;
06881     for (j = 2; j <= i__1; ++j) {
06882         jc = ipp2 - j;
06883         i__2 = *l1;
06884         for (k = 1; k <= i__2; ++k) {
06885             i__3 = *ido;
06886             for (i__ = 1; i__ <= i__3; ++i__) {
06887                 ch[i__ + (k + j * ch_dim2) * ch_dim1] = cc[i__ + (j + k * 
06888                         cc_dim2) * cc_dim1] + cc[i__ + (jc + k * cc_dim2) * 
06889                         cc_dim1];
06890                 ch[i__ + (k + jc * ch_dim2) * ch_dim1] = cc[i__ + (j + k * 
06891                         cc_dim2) * cc_dim1] - cc[i__ + (jc + k * cc_dim2) * 
06892                         cc_dim1];
06893 /* L101: */
06894             }
06895 /* L102: */
06896         }
06897 /* L103: */
06898     }
06899     i__1 = *l1;
06900     for (k = 1; k <= i__1; ++k) {
06901         i__2 = *ido;
06902         for (i__ = 1; i__ <= i__2; ++i__) {
06903             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * cc_dim2 + 1) * 
06904                     cc_dim1];
06905 /* L104: */
06906         }
06907 /* L105: */
06908     }
06909     goto L112;
06910 L106:
06911     i__1 = ipph;
06912     for (j = 2; j <= i__1; ++j) {
06913         jc = ipp2 - j;
06914         i__2 = *ido;
06915         for (i__ = 1; i__ <= i__2; ++i__) {
06916             i__3 = *l1;
06917             for (k = 1; k <= i__3; ++k) {
06918                 ch[i__ + (k + j * ch_dim2) * ch_dim1] = cc[i__ + (j + k * 
06919                         cc_dim2) * cc_dim1] + cc[i__ + (jc + k * cc_dim2) * 
06920                         cc_dim1];
06921                 ch[i__ + (k + jc * ch_dim2) * ch_dim1] = cc[i__ + (j + k * 
06922                         cc_dim2) * cc_dim1] - cc[i__ + (jc + k * cc_dim2) * 
06923                         cc_dim1];
06924 /* L107: */
06925             }
06926 /* L108: */
06927         }
06928 /* L109: */
06929     }
06930     i__1 = *ido;
06931     for (i__ = 1; i__ <= i__1; ++i__) {
06932         i__2 = *l1;
06933         for (k = 1; k <= i__2; ++k) {
06934             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * cc_dim2 + 1) * 
06935                     cc_dim1];
06936 /* L110: */
06937         }
06938 /* L111: */
06939     }
06940 L112:
06941     idl = 2 - *ido;
06942     inc = 0;
06943     i__1 = ipph;
06944     for (l = 2; l <= i__1; ++l) {
06945         lc = ipp2 - l;
06946         idl += *ido;
06947         i__2 = *idl1;
06948         for (ik = 1; ik <= i__2; ++ik) {
06949             c2[ik + l * c2_dim1] = ch2[ik + ch2_dim1] + wa[idl - 1] * ch2[ik 
06950                     + (ch2_dim1 << 1)];
06951             c2[ik + lc * c2_dim1] = wa[idl] * ch2[ik + *ip * ch2_dim1];
06952 /* L113: */
06953         }
06954         idlj = idl;
06955         inc += *ido;
06956         i__2 = ipph;
06957         for (j = 3; j <= i__2; ++j) {
06958             jc = ipp2 - j;
06959             idlj += inc;
06960             if (idlj > idp) {
06961                 idlj -= idp;
06962             }
06963             war = wa[idlj - 1];
06964             wai = wa[idlj];
06965             i__3 = *idl1;
06966             for (ik = 1; ik <= i__3; ++ik) {
06967                 c2[ik + l * c2_dim1] += war * ch2[ik + j * ch2_dim1];
06968                 c2[ik + lc * c2_dim1] += wai * ch2[ik + jc * ch2_dim1];
06969 /* L114: */
06970             }
06971 /* L115: */
06972         }
06973 /* L116: */
06974     }
06975     i__1 = ipph;
06976     for (j = 2; j <= i__1; ++j) {
06977         i__2 = *idl1;
06978         for (ik = 1; ik <= i__2; ++ik) {
06979             ch2[ik + ch2_dim1] += ch2[ik + j * ch2_dim1];
06980 /* L117: */
06981         }
06982 /* L118: */
06983     }
06984     i__1 = ipph;
06985     for (j = 2; j <= i__1; ++j) {
06986         jc = ipp2 - j;
06987         i__2 = *idl1;
06988         for (ik = 2; ik <= i__2; ik += 2) {
06989             ch2[ik - 1 + j * ch2_dim1] = c2[ik - 1 + j * c2_dim1] - c2[ik + 
06990                     jc * c2_dim1];
06991             ch2[ik - 1 + jc * ch2_dim1] = c2[ik - 1 + j * c2_dim1] + c2[ik + 
06992                     jc * c2_dim1];
06993             ch2[ik + j * ch2_dim1] = c2[ik + j * c2_dim1] + c2[ik - 1 + jc * 
06994                     c2_dim1];
06995             ch2[ik + jc * ch2_dim1] = c2[ik + j * c2_dim1] - c2[ik - 1 + jc * 
06996                     c2_dim1];
06997 /* L119: */
06998         }
06999 /* L120: */
07000     }
07001     *nac = 1;
07002     if (*ido == 2) {
07003         return 0;
07004     }
07005     *nac = 0;
07006     i__1 = *idl1;
07007     for (ik = 1; ik <= i__1; ++ik) {
07008         c2[ik + c2_dim1] = ch2[ik + ch2_dim1];
07009 /* L121: */
07010     }
07011     i__1 = *ip;
07012     for (j = 2; j <= i__1; ++j) {
07013         i__2 = *l1;
07014         for (k = 1; k <= i__2; ++k) {
07015             c1[(k + j * c1_dim2) * c1_dim1 + 1] = ch[(k + j * ch_dim2) * 
07016                     ch_dim1 + 1];
07017             c1[(k + j * c1_dim2) * c1_dim1 + 2] = ch[(k + j * ch_dim2) * 
07018                     ch_dim1 + 2];
07019 /* L122: */
07020         }
07021 /* L123: */
07022     }
07023     if (idot > *l1) {
07024         goto L127;
07025     }
07026     idij = 0;
07027     i__1 = *ip;
07028     for (j = 2; j <= i__1; ++j) {
07029         idij += 2;
07030         i__2 = *ido;
07031         for (i__ = 4; i__ <= i__2; i__ += 2) {
07032             idij += 2;
07033             i__3 = *l1;
07034             for (k = 1; k <= i__3; ++k) {
07035                 c1[i__ - 1 + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[
07036                         i__ - 1 + (k + j * ch_dim2) * ch_dim1] - wa[idij] * 
07037                         ch[i__ + (k + j * ch_dim2) * ch_dim1];
07038                 c1[i__ + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[i__ 
07039                         + (k + j * ch_dim2) * ch_dim1] + wa[idij] * ch[i__ - 
07040                         1 + (k + j * ch_dim2) * ch_dim1];
07041 /* L124: */
07042             }
07043 /* L125: */
07044         }
07045 /* L126: */
07046     }
07047     return 0;
07048 L127:
07049     idj = 2 - *ido;
07050     i__1 = *ip;
07051     for (j = 2; j <= i__1; ++j) {
07052         idj += *ido;
07053         i__2 = *l1;
07054         for (k = 1; k <= i__2; ++k) {
07055             idij = idj;
07056             i__3 = *ido;
07057             for (i__ = 4; i__ <= i__3; i__ += 2) {
07058                 idij += 2;
07059                 c1[i__ - 1 + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[
07060                         i__ - 1 + (k + j * ch_dim2) * ch_dim1] - wa[idij] * 
07061                         ch[i__ + (k + j * ch_dim2) * ch_dim1];
07062                 c1[i__ + (k + j * c1_dim2) * c1_dim1] = wa[idij - 1] * ch[i__ 
07063                         + (k + j * ch_dim2) * ch_dim1] + wa[idij] * ch[i__ - 
07064                         1 + (k + j * ch_dim2) * ch_dim1];
07065 /* L128: */
07066             }
07067 /* L129: */
07068         }
07069 /* L130: */
07070     }
07071     return 0;
07072 } /* fpassb_ */
07073 
07074 /* Subroutine */ int fpassb5_(integer *ido, integer *l1, real *cc, real *ch, 
07075         real *wa1, real *wa2, real *wa3, real *wa4)
07076 {
07077     /* Initialized data */
07078 
07079     static real tr11 = (float).309016994374947;
07080     static real ti11 = (float).951056516295154;
07081     static real tr12 = (float)-.809016994374947;
07082     static real ti12 = (float).587785252292473;
07083 
07084     /* System generated locals */
07085     integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
07086 
07087     /* Local variables */
07088     static integer i__, k;
07089     static real ci2, ci3, ci4, ci5, di3, di4, di5, di2, cr2, cr3, cr5, cr4, 
07090             ti2, ti3, ti4, ti5, dr3, dr4, dr5, dr2, tr2, tr3, tr4, tr5;
07091 
07092 /* ----------------------------TJW */
07093 /* ----------------------------TJW */
07094     /* Parameter adjustments */
07095     ch_dim1 = *ido;
07096     ch_dim2 = *l1;
07097     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
07098     ch -= ch_offset;
07099     cc_dim1 = *ido;
07100     cc_offset = cc_dim1 * 6 + 1;
07101     cc -= cc_offset;
07102     --wa1;
07103     --wa2;
07104     --wa3;
07105     --wa4;
07106 
07107     /* Function Body */
07108     if (*ido != 2) {
07109         goto L102;
07110     }
07111     i__1 = *l1;
07112     for (k = 1; k <= i__1; ++k) {
07113         ti5 = cc[(k * 5 + 2) * cc_dim1 + 2] - cc[(k * 5 + 5) * cc_dim1 + 2];
07114         ti2 = cc[(k * 5 + 2) * cc_dim1 + 2] + cc[(k * 5 + 5) * cc_dim1 + 2];
07115         ti4 = cc[(k * 5 + 3) * cc_dim1 + 2] - cc[(k * 5 + 4) * cc_dim1 + 2];
07116         ti3 = cc[(k * 5 + 3) * cc_dim1 + 2] + cc[(k * 5 + 4) * cc_dim1 + 2];
07117         tr5 = cc[(k * 5 + 2) * cc_dim1 + 1] - cc[(k * 5 + 5) * cc_dim1 + 1];
07118         tr2 = cc[(k * 5 + 2) * cc_dim1 + 1] + cc[(k * 5 + 5) * cc_dim1 + 1];
07119         tr4 = cc[(k * 5 + 3) * cc_dim1 + 1] - cc[(k * 5 + 4) * cc_dim1 + 1];
07120         tr3 = cc[(k * 5 + 3) * cc_dim1 + 1] + cc[(k * 5 + 4) * cc_dim1 + 1];
07121         ch[(k + ch_dim2) * ch_dim1 + 1] = cc[(k * 5 + 1) * cc_dim1 + 1] + tr2 
07122                 + tr3;
07123         ch[(k + ch_dim2) * ch_dim1 + 2] = cc[(k * 5 + 1) * cc_dim1 + 2] + ti2 
07124                 + ti3;
07125         cr2 = cc[(k * 5 + 1) * cc_dim1 + 1] + tr11 * tr2 + tr12 * tr3;
07126         ci2 = cc[(k * 5 + 1) * cc_dim1 + 2] + tr11 * ti2 + tr12 * ti3;
07127         cr3 = cc[(k * 5 + 1) * cc_dim1 + 1] + tr12 * tr2 + tr11 * tr3;
07128         ci3 = cc[(k * 5 + 1) * cc_dim1 + 2] + tr12 * ti2 + tr11 * ti3;
07129         cr5 = ti11 * tr5 + ti12 * tr4;
07130         ci5 = ti11 * ti5 + ti12 * ti4;
07131         cr4 = ti12 * tr5 - ti11 * tr4;
07132         ci4 = ti12 * ti5 - ti11 * ti4;
07133         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = cr2 - ci5;
07134         ch[(k + ch_dim2 * 5) * ch_dim1 + 1] = cr2 + ci5;
07135         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 2] = ci2 + cr5;
07136         ch[(k + ch_dim2 * 3) * ch_dim1 + 2] = ci3 + cr4;
07137         ch[(k + ch_dim2 * 3) * ch_dim1 + 1] = cr3 - ci4;
07138         ch[(k + (ch_dim2 << 2)) * ch_dim1 + 1] = cr3 + ci4;
07139         ch[(k + (ch_dim2 << 2)) * ch_dim1 + 2] = ci3 - cr4;
07140         ch[(k + ch_dim2 * 5) * ch_dim1 + 2] = ci2 - cr5;
07141 /* L101: */
07142     }
07143     return 0;
07144 L102:
07145     i__1 = *l1;
07146     for (k = 1; k <= i__1; ++k) {
07147         i__2 = *ido;
07148         for (i__ = 2; i__ <= i__2; i__ += 2) {
07149             ti5 = cc[i__ + (k * 5 + 2) * cc_dim1] - cc[i__ + (k * 5 + 5) * 
07150                     cc_dim1];
07151             ti2 = cc[i__ + (k * 5 + 2) * cc_dim1] + cc[i__ + (k * 5 + 5) * 
07152                     cc_dim1];
07153             ti4 = cc[i__ + (k * 5 + 3) * cc_dim1] - cc[i__ + (k * 5 + 4) * 
07154                     cc_dim1];
07155             ti3 = cc[i__ + (k * 5 + 3) * cc_dim1] + cc[i__ + (k * 5 + 4) * 
07156                     cc_dim1];
07157             tr5 = cc[i__ - 1 + (k * 5 + 2) * cc_dim1] - cc[i__ - 1 + (k * 5 + 
07158                     5) * cc_dim1];
07159             tr2 = cc[i__ - 1 + (k * 5 + 2) * cc_dim1] + cc[i__ - 1 + (k * 5 + 
07160                     5) * cc_dim1];
07161             tr4 = cc[i__ - 1 + (k * 5 + 3) * cc_dim1] - cc[i__ - 1 + (k * 5 + 
07162                     4) * cc_dim1];
07163             tr3 = cc[i__ - 1 + (k * 5 + 3) * cc_dim1] + cc[i__ - 1 + (k * 5 + 
07164                     4) * cc_dim1];
07165             ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = cc[i__ - 1 + (k * 5 + 1) *
07166                      cc_dim1] + tr2 + tr3;
07167             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * 5 + 1) * 
07168                     cc_dim1] + ti2 + ti3;
07169             cr2 = cc[i__ - 1 + (k * 5 + 1) * cc_dim1] + tr11 * tr2 + tr12 * 
07170                     tr3;
07171             ci2 = cc[i__ + (k * 5 + 1) * cc_dim1] + tr11 * ti2 + tr12 * ti3;
07172             cr3 = cc[i__ - 1 + (k * 5 + 1) * cc_dim1] + tr12 * tr2 + tr11 * 
07173                     tr3;
07174             ci3 = cc[i__ + (k * 5 + 1) * cc_dim1] + tr12 * ti2 + tr11 * ti3;
07175             cr5 = ti11 * tr5 + ti12 * tr4;
07176             ci5 = ti11 * ti5 + ti12 * ti4;
07177             cr4 = ti12 * tr5 - ti11 * tr4;
07178             ci4 = ti12 * ti5 - ti11 * ti4;
07179             dr3 = cr3 - ci4;
07180             dr4 = cr3 + ci4;
07181             di3 = ci3 + cr4;
07182             di4 = ci3 - cr4;
07183             dr5 = cr2 + ci5;
07184             dr2 = cr2 - ci5;
07185             di5 = ci2 - cr5;
07186             di2 = ci2 + cr5;
07187             ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * dr2 
07188                     - wa1[i__] * di2;
07189             ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * di2 + 
07190                     wa1[i__] * dr2;
07191             ch[i__ - 1 + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 1] * dr3 - 
07192                     wa2[i__] * di3;
07193             ch[i__ + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 1] * di3 + wa2[
07194                     i__] * dr3;
07195             ch[i__ - 1 + (k + (ch_dim2 << 2)) * ch_dim1] = wa3[i__ - 1] * dr4 
07196                     - wa3[i__] * di4;
07197             ch[i__ + (k + (ch_dim2 << 2)) * ch_dim1] = wa3[i__ - 1] * di4 + 
07198                     wa3[i__] * dr4;
07199             ch[i__ - 1 + (k + ch_dim2 * 5) * ch_dim1] = wa4[i__ - 1] * dr5 - 
07200                     wa4[i__] * di5;
07201             ch[i__ + (k + ch_dim2 * 5) * ch_dim1] = wa4[i__ - 1] * di5 + wa4[
07202                     i__] * dr5;
07203 /* L103: */
07204         }
07205 /* L104: */
07206     }
07207     return 0;
07208 } /* fpassb5_ */
07209 
07210 /* Subroutine */ int fpassb3_(integer *ido, integer *l1, real *cc, real *ch, 
07211         real *wa1, real *wa2)
07212 {
07213     /* Initialized data */
07214 
07215     static real taur = (float)-.5;
07216     static real taui = (float).866025403784439;
07217 
07218     /* System generated locals */
07219     integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
07220 
07221     /* Local variables */
07222     static integer i__, k;
07223     static real ci2, ci3, di2, di3, cr2, cr3, dr2, dr3, ti2, tr2;
07224 
07225 /* ----------------------------TJW */
07226 /* ----------------------------TJW */
07227     /* Parameter adjustments */
07228     ch_dim1 = *ido;
07229     ch_dim2 = *l1;
07230     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
07231     ch -= ch_offset;
07232     cc_dim1 = *ido;
07233     cc_offset = (cc_dim1 << 2) + 1;
07234     cc -= cc_offset;
07235     --wa1;
07236     --wa2;
07237 
07238     /* Function Body */
07239     if (*ido != 2) {
07240         goto L102;
07241     }
07242     i__1 = *l1;
07243     for (k = 1; k <= i__1; ++k) {
07244         tr2 = cc[(k * 3 + 2) * cc_dim1 + 1] + cc[(k * 3 + 3) * cc_dim1 + 1];
07245         cr2 = cc[(k * 3 + 1) * cc_dim1 + 1] + taur * tr2;
07246         ch[(k + ch_dim2) * ch_dim1 + 1] = cc[(k * 3 + 1) * cc_dim1 + 1] + tr2;
07247         ti2 = cc[(k * 3 + 2) * cc_dim1 + 2] + cc[(k * 3 + 3) * cc_dim1 + 2];
07248         ci2 = cc[(k * 3 + 1) * cc_dim1 + 2] + taur * ti2;
07249         ch[(k + ch_dim2) * ch_dim1 + 2] = cc[(k * 3 + 1) * cc_dim1 + 2] + ti2;
07250         cr3 = taui * (cc[(k * 3 + 2) * cc_dim1 + 1] - cc[(k * 3 + 3) * 
07251                 cc_dim1 + 1]);
07252         ci3 = taui * (cc[(k * 3 + 2) * cc_dim1 + 2] - cc[(k * 3 + 3) * 
07253                 cc_dim1 + 2]);
07254         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = cr2 - ci3;
07255         ch[(k + ch_dim2 * 3) * ch_dim1 + 1] = cr2 + ci3;
07256         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 2] = ci2 + cr3;
07257         ch[(k + ch_dim2 * 3) * ch_dim1 + 2] = ci2 - cr3;
07258 /* L101: */
07259     }
07260     return 0;
07261 L102:
07262     i__1 = *l1;
07263     for (k = 1; k <= i__1; ++k) {
07264         i__2 = *ido;
07265         for (i__ = 2; i__ <= i__2; i__ += 2) {
07266             tr2 = cc[i__ - 1 + (k * 3 + 2) * cc_dim1] + cc[i__ - 1 + (k * 3 + 
07267                     3) * cc_dim1];
07268             cr2 = cc[i__ - 1 + (k * 3 + 1) * cc_dim1] + taur * tr2;
07269             ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = cc[i__ - 1 + (k * 3 + 1) *
07270                      cc_dim1] + tr2;
07271             ti2 = cc[i__ + (k * 3 + 2) * cc_dim1] + cc[i__ + (k * 3 + 3) * 
07272                     cc_dim1];
07273             ci2 = cc[i__ + (k * 3 + 1) * cc_dim1] + taur * ti2;
07274             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + (k * 3 + 1) * 
07275                     cc_dim1] + ti2;
07276             cr3 = taui * (cc[i__ - 1 + (k * 3 + 2) * cc_dim1] - cc[i__ - 1 + (
07277                     k * 3 + 3) * cc_dim1]);
07278             ci3 = taui * (cc[i__ + (k * 3 + 2) * cc_dim1] - cc[i__ + (k * 3 + 
07279                     3) * cc_dim1]);
07280             dr2 = cr2 - ci3;
07281             dr3 = cr2 + ci3;
07282             di2 = ci2 + cr3;
07283             di3 = ci2 - cr3;
07284             ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * di2 + 
07285                     wa1[i__] * dr2;
07286             ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * dr2 
07287                     - wa1[i__] * di2;
07288             ch[i__ + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 1] * di3 + wa2[
07289                     i__] * dr3;
07290             ch[i__ - 1 + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 1] * dr3 - 
07291                     wa2[i__] * di3;
07292 /* L103: */
07293         }
07294 /* L104: */
07295     }
07296     return 0;
07297 } /* fpassb3_ */
07298 
07299 /* Subroutine */ int fpassb2_(integer *ido, integer *l1, real *cc, real *ch, 
07300         real *wa1)
07301 {
07302     /* System generated locals */
07303     integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
07304 
07305     /* Local variables */
07306     static integer i__, k;
07307     static real ti2, tr2;
07308 
07309 /* ----------------------------TJW */
07310 /* ----------------------------TJW */
07311     /* Parameter adjustments */
07312     ch_dim1 = *ido;
07313     ch_dim2 = *l1;
07314     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
07315     ch -= ch_offset;
07316     cc_dim1 = *ido;
07317     cc_offset = cc_dim1 * 3 + 1;
07318     cc -= cc_offset;
07319     --wa1;
07320 
07321     /* Function Body */
07322     if (*ido > 2) {
07323         goto L102;
07324     }
07325     i__1 = *l1;
07326     for (k = 1; k <= i__1; ++k) {
07327         ch[(k + ch_dim2) * ch_dim1 + 1] = cc[((k << 1) + 1) * cc_dim1 + 1] + 
07328                 cc[((k << 1) + 2) * cc_dim1 + 1];
07329         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = cc[((k << 1) + 1) * cc_dim1 
07330                 + 1] - cc[((k << 1) + 2) * cc_dim1 + 1];
07331         ch[(k + ch_dim2) * ch_dim1 + 2] = cc[((k << 1) + 1) * cc_dim1 + 2] + 
07332                 cc[((k << 1) + 2) * cc_dim1 + 2];
07333         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 2] = cc[((k << 1) + 1) * cc_dim1 
07334                 + 2] - cc[((k << 1) + 2) * cc_dim1 + 2];
07335 /* L101: */
07336     }
07337     return 0;
07338 L102:
07339     i__1 = *l1;
07340     for (k = 1; k <= i__1; ++k) {
07341         i__2 = *ido;
07342         for (i__ = 2; i__ <= i__2; i__ += 2) {
07343             ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = cc[i__ - 1 + ((k << 1) + 
07344                     1) * cc_dim1] + cc[i__ - 1 + ((k << 1) + 2) * cc_dim1];
07345             tr2 = cc[i__ - 1 + ((k << 1) + 1) * cc_dim1] - cc[i__ - 1 + ((k <<
07346                      1) + 2) * cc_dim1];
07347             ch[i__ + (k + ch_dim2) * ch_dim1] = cc[i__ + ((k << 1) + 1) * 
07348                     cc_dim1] + cc[i__ + ((k << 1) + 2) * cc_dim1];
07349             ti2 = cc[i__ + ((k << 1) + 1) * cc_dim1] - cc[i__ + ((k << 1) + 2)
07350                      * cc_dim1];
07351             ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * ti2 + 
07352                     wa1[i__] * tr2;
07353             ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * tr2 
07354                     - wa1[i__] * ti2;
07355 /* L103: */
07356         }
07357 /* L104: */
07358     }
07359     return 0;
07360 } /* fpassb2_ */
07361 
07362 /* Subroutine */ int fpassb4_(integer *ido, integer *l1, real *cc, real *ch, 
07363         real *wa1, real *wa2, real *wa3)
07364 {
07365     /* System generated locals */
07366     integer cc_dim1, cc_offset, ch_dim1, ch_dim2, ch_offset, i__1, i__2;
07367 
07368     /* Local variables */
07369     static integer i__, k;
07370     static real ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, 
07371             tr3, tr4;
07372 
07373 /* ----------------------------TJW */
07374 /* ----------------------------TJW */
07375     /* Parameter adjustments */
07376     ch_dim1 = *ido;
07377     ch_dim2 = *l1;
07378     ch_offset = ch_dim1 * (ch_dim2 + 1) + 1;
07379     ch -= ch_offset;
07380     cc_dim1 = *ido;
07381     cc_offset = cc_dim1 * 5 + 1;
07382     cc -= cc_offset;
07383     --wa1;
07384     --wa2;
07385     --wa3;
07386 
07387     /* Function Body */
07388     if (*ido != 2) {
07389         goto L102;
07390     }
07391     i__1 = *l1;
07392     for (k = 1; k <= i__1; ++k) {
07393         ti1 = cc[((k << 2) + 1) * cc_dim1 + 2] - cc[((k << 2) + 3) * cc_dim1 
07394                 + 2];
07395         ti2 = cc[((k << 2) + 1) * cc_dim1 + 2] + cc[((k << 2) + 3) * cc_dim1 
07396                 + 2];
07397         tr4 = cc[((k << 2) + 4) * cc_dim1 + 2] - cc[((k << 2) + 2) * cc_dim1 
07398                 + 2];
07399         ti3 = cc[((k << 2) + 2) * cc_dim1 + 2] + cc[((k << 2) + 4) * cc_dim1 
07400                 + 2];
07401         tr1 = cc[((k << 2) + 1) * cc_dim1 + 1] - cc[((k << 2) + 3) * cc_dim1 
07402                 + 1];
07403         tr2 = cc[((k << 2) + 1) * cc_dim1 + 1] + cc[((k << 2) + 3) * cc_dim1 
07404                 + 1];
07405         ti4 = cc[((k << 2) + 2) * cc_dim1 + 1] - cc[((k << 2) + 4) * cc_dim1 
07406                 + 1];
07407         tr3 = cc[((k << 2) + 2) * cc_dim1 + 1] + cc[((k << 2) + 4) * cc_dim1 
07408                 + 1];
07409         ch[(k + ch_dim2) * ch_dim1 + 1] = tr2 + tr3;
07410         ch[(k + ch_dim2 * 3) * ch_dim1 + 1] = tr2 - tr3;
07411         ch[(k + ch_dim2) * ch_dim1 + 2] = ti2 + ti3;
07412         ch[(k + ch_dim2 * 3) * ch_dim1 + 2] = ti2 - ti3;
07413         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 1] = tr1 + tr4;
07414         ch[(k + (ch_dim2 << 2)) * ch_dim1 + 1] = tr1 - tr4;
07415         ch[(k + (ch_dim2 << 1)) * ch_dim1 + 2] = ti1 + ti4;
07416         ch[(k + (ch_dim2 << 2)) * ch_dim1 + 2] = ti1 - ti4;
07417 /* L101: */
07418     }
07419     return 0;
07420 L102:
07421     i__1 = *l1;
07422     for (k = 1; k <= i__1; ++k) {
07423         i__2 = *ido;
07424         for (i__ = 2; i__ <= i__2; i__ += 2) {
07425             ti1 = cc[i__ + ((k << 2) + 1) * cc_dim1] - cc[i__ + ((k << 2) + 3)
07426                      * cc_dim1];
07427             ti2 = cc[i__ + ((k << 2) + 1) * cc_dim1] + cc[i__ + ((k << 2) + 3)
07428                      * cc_dim1];
07429             ti3 = cc[i__ + ((k << 2) + 2) * cc_dim1] + cc[i__ + ((k << 2) + 4)
07430                      * cc_dim1];
07431             tr4 = cc[i__ + ((k << 2) + 4) * cc_dim1] - cc[i__ + ((k << 2) + 2)
07432                      * cc_dim1];
07433             tr1 = cc[i__ - 1 + ((k << 2) + 1) * cc_dim1] - cc[i__ - 1 + ((k <<
07434                      2) + 3) * cc_dim1];
07435             tr2 = cc[i__ - 1 + ((k << 2) + 1) * cc_dim1] + cc[i__ - 1 + ((k <<
07436                      2) + 3) * cc_dim1];
07437             ti4 = cc[i__ - 1 + ((k << 2) + 2) * cc_dim1] - cc[i__ - 1 + ((k <<
07438                      2) + 4) * cc_dim1];
07439             tr3 = cc[i__ - 1 + ((k << 2) + 2) * cc_dim1] + cc[i__ - 1 + ((k <<
07440                      2) + 4) * cc_dim1];
07441             ch[i__ - 1 + (k + ch_dim2) * ch_dim1] = tr2 + tr3;
07442             cr3 = tr2 - tr3;
07443             ch[i__ + (k + ch_dim2) * ch_dim1] = ti2 + ti3;
07444             ci3 = ti2 - ti3;
07445             cr2 = tr1 + tr4;
07446             cr4 = tr1 - tr4;
07447             ci2 = ti1 + ti4;
07448             ci4 = ti1 - ti4;
07449             ch[i__ - 1 + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * cr2 
07450                     - wa1[i__] * ci2;
07451             ch[i__ + (k + (ch_dim2 << 1)) * ch_dim1] = wa1[i__ - 1] * ci2 + 
07452                     wa1[i__] * cr2;
07453             ch[i__ - 1 + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 1] * cr3 - 
07454                     wa2[i__] * ci3;
07455             ch[i__ + (k + ch_dim2 * 3) * ch_dim1] = wa2[i__ - 1] * ci3 + wa2[
07456                     i__] * cr3;
07457             ch[i__ - 1 + (k + (ch_dim2 << 2)) * ch_dim1] = wa3[i__ - 1] * cr4 
07458                     - wa3[i__] * ci4;
07459             ch[i__ + (k + (ch_dim2 << 2)) * ch_dim1] = wa3[i__ - 1] * ci4 + 
07460                     wa3[i__] * cr4;
07461 /* L103: */
07462         }
07463 /* L104: */
07464     }
07465     return 0;
07466 } /* fpassb4_ */
07467 
07468 /* Subroutine */ int fsinti_(integer *n, real *wsave)
07469 {
07470     /* Initialized data */
07471 
07472     static real pi = (float)3.14159265358979;
07473 
07474     /* System generated locals */
07475     integer i__1;
07476 
07477     /* Builtin functions */
07478     double sin(doublereal);
07479 
07480     /* Local variables */
07481     static integer k;
07482     static real dt;
07483     extern /* Subroutine */ int frffti_(integer *, real *);
07484     static integer np1, ns2;
07485 
07486 /* ----------------------------TJW */
07487 /* ----------------------------TJW */
07488     /* Parameter adjustments */
07489     --wsave;
07490 
07491     /* Function Body */
07492     if (*n <= 1) {
07493         return 0;
07494     }
07495     ns2 = *n / 2;
07496     np1 = *n + 1;
07497     dt = pi / (real) np1;
07498     i__1 = ns2;
07499     for (k = 1; k <= i__1; ++k) {
07500         wsave[k] = sin(k * dt) * (float)2.;
07501 /* L101: */
07502     }
07503     frffti_(&np1, &wsave[ns2 + 1]);
07504     return 0;
07505 } /* fsinti_ */
07506 
07507 /* Subroutine */ int fsint_(integer *n, real *x, real *wsave)
07508 {
07509     extern /* Subroutine */ int fsint1_(integer *, real *, real *, real *, 
07510             real *, real *);
07511     static integer np1, iw1, iw2, iw3;
07512 
07513 /* ----------------------------TJW */
07514 /* ----------------------------TJW */
07515     /* Parameter adjustments */
07516     --wsave;
07517     --x;
07518 
07519     /* Function Body */
07520     np1 = *n + 1;
07521     iw1 = *n / 2 + 1;
07522     iw2 = iw1 + np1;
07523     iw3 = iw2 + np1;
07524     fsint1_(n, &x[1], &wsave[1], &wsave[iw1], &wsave[iw2], &wsave[iw3]);
07525     return 0;
07526 } /* fsint_ */
07527 
07528 /* Subroutine */ int fsint1_(integer *n, real *war, real *was, real *xh, real 
07529         *x, integer *ifac)
07530 {
07531     /* Initialized data */
07532 
07533     static real sqrt3 = (float)1.73205080756888;
07534 
07535     /* System generated locals */
07536     integer i__1;
07537 
07538     /* Local variables */
07539     static integer modn, i__, k;
07540     static real xhold, t1, t2;
07541     static integer kc, np1, ns2;
07542     extern /* Subroutine */ int frfftf1_(integer *, real *, real *, real *, 
07543             integer *);
07544 
07545 /* ----------------------------TJW */
07546 /* ----------------------------TJW */
07547     /* Parameter adjustments */
07548     --ifac;
07549     --x;
07550     --xh;
07551     --was;
07552     --war;
07553 
07554     /* Function Body */
07555     i__1 = *n;
07556     for (i__ = 1; i__ <= i__1; ++i__) {
07557         xh[i__] = war[i__];
07558         war[i__] = x[i__];
07559 /* L100: */
07560     }
07561     if ((i__1 = *n - 2) < 0) {
07562         goto L101;
07563     } else if (i__1 == 0) {
07564         goto L102;
07565     } else {
07566         goto L103;
07567     }
07568 L101:
07569     xh[1] += xh[1];
07570     goto L106;
07571 L102:
07572     xhold = sqrt3 * (xh[1] + xh[2]);
07573     xh[2] = sqrt3 * (xh[1] - xh[2]);
07574     xh[1] = xhold;
07575     goto L106;
07576 L103:
07577     np1 = *n + 1;
07578     ns2 = *n / 2;
07579     x[1] = (float)0.;
07580     i__1 = ns2;
07581     for (k = 1; k <= i__1; ++k) {
07582         kc = np1 - k;
07583         t1 = xh[k] - xh[kc];
07584         t2 = was[k] * (xh[k] + xh[kc]);
07585         x[k + 1] = t1 + t2;
07586         x[kc + 1] = t2 - t1;
07587 /* L104: */
07588     }
07589     modn = *n % 2;
07590     if (modn != 0) {
07591         x[ns2 + 2] = xh[ns2 + 1] * (float)4.;
07592     }
07593     frfftf1_(&np1, &x[1], &xh[1], &war[1], &ifac[1]);
07594     xh[1] = x[1] * (float).5;
07595     i__1 = *n;
07596     for (i__ = 3; i__ <= i__1; i__ += 2) {
07597         xh[i__ - 1] = -x[i__];
07598         xh[i__] = xh[i__ - 2] + x[i__ - 1];
07599 /* L105: */
07600     }
07601     if (modn != 0) {
07602         goto L106;
07603     }
07604     xh[*n] = -x[*n + 1];
07605 L106:
07606     i__1 = *n;
07607     for (i__ = 1; i__ <= i__1; ++i__) {
07608         x[i__] = war[i__];
07609         war[i__] = xh[i__];
07610 /* L107: */
07611     }
07612     return 0;
07613 } /* fsint1_ */
07614 
07615 #ifdef __cplusplus
07616         }
07617 #endif
07618 
07619 /***************************************************************************
07620  * $RCSfile: addheaderfooter,v $   $Author: adelmann $
07621  * $Revision: 1.1.1.1 $   $Date: 2003/01/23 07:40:17 $
07622  * IPPL_VERSION_ID: $Id: addheaderfooter,v 1.1.1.1 2003/01/23 07:40:17 adelmann Exp $ 
07623  ***************************************************************************/
07624 

Generated on Mon Jan 16 13:23:42 2006 for IPPL by  doxygen 1.4.6