1*3f1979aaSAndroid Build Coastguard Worker /*
2*3f1979aaSAndroid Build Coastguard Worker compile with cc -DTESTING_FFTPACK fftpack.c in order to build the
3*3f1979aaSAndroid Build Coastguard Worker test application.
4*3f1979aaSAndroid Build Coastguard Worker
5*3f1979aaSAndroid Build Coastguard Worker This is an f2c translation of the full fftpack sources as found on
6*3f1979aaSAndroid Build Coastguard Worker http://www.netlib.org/fftpack/ The translated code has been
7*3f1979aaSAndroid Build Coastguard Worker slightlty edited to remove the ugliest artefacts of the translation
8*3f1979aaSAndroid Build Coastguard Worker (a hundred of wild GOTOs were wiped during that operation).
9*3f1979aaSAndroid Build Coastguard Worker
10*3f1979aaSAndroid Build Coastguard Worker The original fftpack file was written by Paul N. Swarztrauber
11*3f1979aaSAndroid Build Coastguard Worker (Version 4, 1985), in fortran 77.
12*3f1979aaSAndroid Build Coastguard Worker
13*3f1979aaSAndroid Build Coastguard Worker FFTPACK license:
14*3f1979aaSAndroid Build Coastguard Worker
15*3f1979aaSAndroid Build Coastguard Worker http://www.cisl.ucar.edu/css/software/fftpack5/ftpk.html
16*3f1979aaSAndroid Build Coastguard Worker
17*3f1979aaSAndroid Build Coastguard Worker Copyright (c) 2004 the University Corporation for Atmospheric
18*3f1979aaSAndroid Build Coastguard Worker Research ("UCAR"). All rights reserved. Developed by NCAR's
19*3f1979aaSAndroid Build Coastguard Worker Computational and Information Systems Laboratory, UCAR,
20*3f1979aaSAndroid Build Coastguard Worker www.cisl.ucar.edu.
21*3f1979aaSAndroid Build Coastguard Worker
22*3f1979aaSAndroid Build Coastguard Worker Redistribution and use of the Software in source and binary forms,
23*3f1979aaSAndroid Build Coastguard Worker with or without modification, is permitted provided that the
24*3f1979aaSAndroid Build Coastguard Worker following conditions are met:
25*3f1979aaSAndroid Build Coastguard Worker
26*3f1979aaSAndroid Build Coastguard Worker - Neither the names of NCAR's Computational and Information Systems
27*3f1979aaSAndroid Build Coastguard Worker Laboratory, the University Corporation for Atmospheric Research,
28*3f1979aaSAndroid Build Coastguard Worker nor the names of its sponsors or contributors may be used to
29*3f1979aaSAndroid Build Coastguard Worker endorse or promote products derived from this Software without
30*3f1979aaSAndroid Build Coastguard Worker specific prior written permission.
31*3f1979aaSAndroid Build Coastguard Worker
32*3f1979aaSAndroid Build Coastguard Worker - Redistributions of source code must retain the above copyright
33*3f1979aaSAndroid Build Coastguard Worker notices, this list of conditions, and the disclaimer below.
34*3f1979aaSAndroid Build Coastguard Worker
35*3f1979aaSAndroid Build Coastguard Worker - Redistributions in binary form must reproduce the above copyright
36*3f1979aaSAndroid Build Coastguard Worker notice, this list of conditions, and the disclaimer below in the
37*3f1979aaSAndroid Build Coastguard Worker documentation and/or other materials provided with the
38*3f1979aaSAndroid Build Coastguard Worker distribution.
39*3f1979aaSAndroid Build Coastguard Worker
40*3f1979aaSAndroid Build Coastguard Worker THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
41*3f1979aaSAndroid Build Coastguard Worker EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF
42*3f1979aaSAndroid Build Coastguard Worker MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
43*3f1979aaSAndroid Build Coastguard Worker NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT
44*3f1979aaSAndroid Build Coastguard Worker HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL,
45*3f1979aaSAndroid Build Coastguard Worker EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN
46*3f1979aaSAndroid Build Coastguard Worker ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
47*3f1979aaSAndroid Build Coastguard Worker CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE
48*3f1979aaSAndroid Build Coastguard Worker SOFTWARE.
49*3f1979aaSAndroid Build Coastguard Worker
50*3f1979aaSAndroid Build Coastguard Worker ChangeLog:
51*3f1979aaSAndroid Build Coastguard Worker 2011/10/02: this is my first release of this file.
52*3f1979aaSAndroid Build Coastguard Worker */
53*3f1979aaSAndroid Build Coastguard Worker
54*3f1979aaSAndroid Build Coastguard Worker #include "fftpack.h"
55*3f1979aaSAndroid Build Coastguard Worker #include <math.h>
56*3f1979aaSAndroid Build Coastguard Worker
57*3f1979aaSAndroid Build Coastguard Worker typedef fftpack_real real;
58*3f1979aaSAndroid Build Coastguard Worker typedef fftpack_int integer;
59*3f1979aaSAndroid Build Coastguard Worker
60*3f1979aaSAndroid Build Coastguard Worker typedef struct f77complex {
61*3f1979aaSAndroid Build Coastguard Worker real r, i;
62*3f1979aaSAndroid Build Coastguard Worker } f77complex;
63*3f1979aaSAndroid Build Coastguard Worker
64*3f1979aaSAndroid Build Coastguard Worker #ifdef TESTING_FFTPACK
c_abs(f77complex * c)65*3f1979aaSAndroid Build Coastguard Worker static real c_abs(f77complex *c) { return sqrt(c->r*c->r + c->i*c->i); }
dmax(double a,double b)66*3f1979aaSAndroid Build Coastguard Worker static double dmax(double a, double b) { return a < b ? b : a; }
67*3f1979aaSAndroid Build Coastguard Worker #endif
68*3f1979aaSAndroid Build Coastguard Worker
69*3f1979aaSAndroid Build Coastguard Worker /* define own constants required to turn off g++ extensions .. */
70*3f1979aaSAndroid Build Coastguard Worker #ifndef M_PI
71*3f1979aaSAndroid Build Coastguard Worker #define M_PI 3.14159265358979323846 /* pi */
72*3f1979aaSAndroid Build Coastguard Worker #endif
73*3f1979aaSAndroid Build Coastguard Worker
74*3f1979aaSAndroid Build Coastguard Worker #ifndef M_SQRT2
75*3f1979aaSAndroid Build Coastguard Worker #define M_SQRT2 1.41421356237309504880 /* sqrt(2) */
76*3f1979aaSAndroid Build Coastguard Worker #endif
77*3f1979aaSAndroid Build Coastguard Worker
78*3f1979aaSAndroid Build Coastguard Worker
79*3f1979aaSAndroid Build Coastguard Worker /* translated by f2c (version 20061008), and slightly edited */
80*3f1979aaSAndroid Build Coastguard Worker
passfb(integer * nac,integer ido,integer ip,integer l1,integer idl1,real * cc,real * c1,real * c2,real * ch,real * ch2,const real * wa,real fsign)81*3f1979aaSAndroid Build Coastguard Worker static void passfb(integer *nac, integer ido, integer ip, integer l1, integer idl1,
82*3f1979aaSAndroid Build Coastguard Worker real *cc, real *c1, real *c2, real *ch, real *ch2, const real *wa, real fsign)
83*3f1979aaSAndroid Build Coastguard Worker {
84*3f1979aaSAndroid Build Coastguard Worker /* System generated locals */
85*3f1979aaSAndroid Build Coastguard Worker integer ch_offset, cc_offset,
86*3f1979aaSAndroid Build Coastguard Worker c1_offset, c2_offset, ch2_offset;
87*3f1979aaSAndroid Build Coastguard Worker
88*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
89*3f1979aaSAndroid Build Coastguard Worker integer i, j, k, l, jc, lc, ik, idj, idl, inc, idp;
90*3f1979aaSAndroid Build Coastguard Worker real wai, war;
91*3f1979aaSAndroid Build Coastguard Worker integer ipp2, idij, idlj, idot, ipph;
92*3f1979aaSAndroid Build Coastguard Worker
93*3f1979aaSAndroid Build Coastguard Worker
94*3f1979aaSAndroid Build Coastguard Worker #define c1_ref(a_1,a_2,a_3) c1[((a_3)*l1 + (a_2))*ido + a_1]
95*3f1979aaSAndroid Build Coastguard Worker #define c2_ref(a_1,a_2) c2[(a_2)*idl1 + a_1]
96*3f1979aaSAndroid Build Coastguard Worker #define cc_ref(a_1,a_2,a_3) cc[((a_3)*ip + (a_2))*ido + a_1]
97*3f1979aaSAndroid Build Coastguard Worker #define ch_ref(a_1,a_2,a_3) ch[((a_3)*l1 + (a_2))*ido + a_1]
98*3f1979aaSAndroid Build Coastguard Worker #define ch2_ref(a_1,a_2) ch2[(a_2)*idl1 + a_1]
99*3f1979aaSAndroid Build Coastguard Worker
100*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
101*3f1979aaSAndroid Build Coastguard Worker ch_offset = 1 + ido * (1 + l1);
102*3f1979aaSAndroid Build Coastguard Worker ch -= ch_offset;
103*3f1979aaSAndroid Build Coastguard Worker c1_offset = 1 + ido * (1 + l1);
104*3f1979aaSAndroid Build Coastguard Worker c1 -= c1_offset;
105*3f1979aaSAndroid Build Coastguard Worker cc_offset = 1 + ido * (1 + ip);
106*3f1979aaSAndroid Build Coastguard Worker cc -= cc_offset;
107*3f1979aaSAndroid Build Coastguard Worker ch2_offset = 1 + idl1;
108*3f1979aaSAndroid Build Coastguard Worker ch2 -= ch2_offset;
109*3f1979aaSAndroid Build Coastguard Worker c2_offset = 1 + idl1;
110*3f1979aaSAndroid Build Coastguard Worker c2 -= c2_offset;
111*3f1979aaSAndroid Build Coastguard Worker --wa;
112*3f1979aaSAndroid Build Coastguard Worker
113*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
114*3f1979aaSAndroid Build Coastguard Worker idot = ido / 2;
115*3f1979aaSAndroid Build Coastguard Worker ipp2 = ip + 2;
116*3f1979aaSAndroid Build Coastguard Worker ipph = (ip + 1) / 2;
117*3f1979aaSAndroid Build Coastguard Worker idp = ip * ido;
118*3f1979aaSAndroid Build Coastguard Worker
119*3f1979aaSAndroid Build Coastguard Worker if (ido >= l1) {
120*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ipph; ++j) {
121*3f1979aaSAndroid Build Coastguard Worker jc = ipp2 - j;
122*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
123*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= ido; ++i) {
124*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, j) = cc_ref(i, j, k) + cc_ref(i, jc, k);
125*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, jc) = cc_ref(i, j, k) - cc_ref(i, jc, k);
126*3f1979aaSAndroid Build Coastguard Worker }
127*3f1979aaSAndroid Build Coastguard Worker }
128*3f1979aaSAndroid Build Coastguard Worker }
129*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
130*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= ido; ++i) {
131*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 1) = cc_ref(i, 1, k);
132*3f1979aaSAndroid Build Coastguard Worker }
133*3f1979aaSAndroid Build Coastguard Worker }
134*3f1979aaSAndroid Build Coastguard Worker } else {
135*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ipph; ++j) {
136*3f1979aaSAndroid Build Coastguard Worker jc = ipp2 - j;
137*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= ido; ++i) {
138*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
139*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, j) = cc_ref(i, j, k) + cc_ref(i, jc, k);
140*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, jc) = cc_ref(i, j, k) - cc_ref(i, jc, k);
141*3f1979aaSAndroid Build Coastguard Worker }
142*3f1979aaSAndroid Build Coastguard Worker }
143*3f1979aaSAndroid Build Coastguard Worker }
144*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= ido; ++i) {
145*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
146*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 1) = cc_ref(i, 1, k);
147*3f1979aaSAndroid Build Coastguard Worker }
148*3f1979aaSAndroid Build Coastguard Worker }
149*3f1979aaSAndroid Build Coastguard Worker }
150*3f1979aaSAndroid Build Coastguard Worker idl = 2 - ido;
151*3f1979aaSAndroid Build Coastguard Worker inc = 0;
152*3f1979aaSAndroid Build Coastguard Worker for (l = 2; l <= ipph; ++l) {
153*3f1979aaSAndroid Build Coastguard Worker lc = ipp2 - l;
154*3f1979aaSAndroid Build Coastguard Worker idl += ido;
155*3f1979aaSAndroid Build Coastguard Worker for (ik = 1; ik <= idl1; ++ik) {
156*3f1979aaSAndroid Build Coastguard Worker c2_ref(ik, l) = ch2_ref(ik, 1) + wa[idl - 1] * ch2_ref(ik, 2);
157*3f1979aaSAndroid Build Coastguard Worker c2_ref(ik, lc) = fsign*wa[idl] * ch2_ref(ik, ip);
158*3f1979aaSAndroid Build Coastguard Worker }
159*3f1979aaSAndroid Build Coastguard Worker idlj = idl;
160*3f1979aaSAndroid Build Coastguard Worker inc += ido;
161*3f1979aaSAndroid Build Coastguard Worker for (j = 3; j <= ipph; ++j) {
162*3f1979aaSAndroid Build Coastguard Worker jc = ipp2 - j;
163*3f1979aaSAndroid Build Coastguard Worker idlj += inc;
164*3f1979aaSAndroid Build Coastguard Worker if (idlj > idp) {
165*3f1979aaSAndroid Build Coastguard Worker idlj -= idp;
166*3f1979aaSAndroid Build Coastguard Worker }
167*3f1979aaSAndroid Build Coastguard Worker war = wa[idlj - 1];
168*3f1979aaSAndroid Build Coastguard Worker wai = wa[idlj];
169*3f1979aaSAndroid Build Coastguard Worker for (ik = 1; ik <= idl1; ++ik) {
170*3f1979aaSAndroid Build Coastguard Worker c2_ref(ik, l) = c2_ref(ik, l) + war * ch2_ref(ik, j);
171*3f1979aaSAndroid Build Coastguard Worker c2_ref(ik, lc) = c2_ref(ik, lc) + fsign*wai * ch2_ref(ik, jc);
172*3f1979aaSAndroid Build Coastguard Worker }
173*3f1979aaSAndroid Build Coastguard Worker }
174*3f1979aaSAndroid Build Coastguard Worker }
175*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ipph; ++j) {
176*3f1979aaSAndroid Build Coastguard Worker for (ik = 1; ik <= idl1; ++ik) {
177*3f1979aaSAndroid Build Coastguard Worker ch2_ref(ik, 1) = ch2_ref(ik, 1) + ch2_ref(ik, j);
178*3f1979aaSAndroid Build Coastguard Worker }
179*3f1979aaSAndroid Build Coastguard Worker }
180*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ipph; ++j) {
181*3f1979aaSAndroid Build Coastguard Worker jc = ipp2 - j;
182*3f1979aaSAndroid Build Coastguard Worker for (ik = 2; ik <= idl1; ik += 2) {
183*3f1979aaSAndroid Build Coastguard Worker ch2_ref(ik - 1, j) = c2_ref(ik - 1, j) - c2_ref(ik, jc);
184*3f1979aaSAndroid Build Coastguard Worker ch2_ref(ik - 1, jc) = c2_ref(ik - 1, j) + c2_ref(ik, jc);
185*3f1979aaSAndroid Build Coastguard Worker ch2_ref(ik, j) = c2_ref(ik, j) + c2_ref(ik - 1, jc);
186*3f1979aaSAndroid Build Coastguard Worker ch2_ref(ik, jc) = c2_ref(ik, j) - c2_ref(ik - 1, jc);
187*3f1979aaSAndroid Build Coastguard Worker }
188*3f1979aaSAndroid Build Coastguard Worker }
189*3f1979aaSAndroid Build Coastguard Worker *nac = 1;
190*3f1979aaSAndroid Build Coastguard Worker if (ido == 2) {
191*3f1979aaSAndroid Build Coastguard Worker return;
192*3f1979aaSAndroid Build Coastguard Worker }
193*3f1979aaSAndroid Build Coastguard Worker *nac = 0;
194*3f1979aaSAndroid Build Coastguard Worker for (ik = 1; ik <= idl1; ++ik) {
195*3f1979aaSAndroid Build Coastguard Worker c2_ref(ik, 1) = ch2_ref(ik, 1);
196*3f1979aaSAndroid Build Coastguard Worker }
197*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ip; ++j) {
198*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
199*3f1979aaSAndroid Build Coastguard Worker c1_ref(1, k, j) = ch_ref(1, k, j);
200*3f1979aaSAndroid Build Coastguard Worker c1_ref(2, k, j) = ch_ref(2, k, j);
201*3f1979aaSAndroid Build Coastguard Worker }
202*3f1979aaSAndroid Build Coastguard Worker }
203*3f1979aaSAndroid Build Coastguard Worker if (idot <= l1) {
204*3f1979aaSAndroid Build Coastguard Worker idij = 0;
205*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ip; ++j) {
206*3f1979aaSAndroid Build Coastguard Worker idij += 2;
207*3f1979aaSAndroid Build Coastguard Worker for (i = 4; i <= ido; i += 2) {
208*3f1979aaSAndroid Build Coastguard Worker idij += 2;
209*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
210*3f1979aaSAndroid Build Coastguard Worker c1_ref(i - 1, k, j) = wa[idij - 1] * ch_ref(i - 1, k, j) - fsign*wa[idij] * ch_ref(i, k, j);
211*3f1979aaSAndroid Build Coastguard Worker c1_ref(i, k, j) = wa[idij - 1] * ch_ref(i, k, j) + fsign*wa[idij] * ch_ref(i - 1, k, j);
212*3f1979aaSAndroid Build Coastguard Worker }
213*3f1979aaSAndroid Build Coastguard Worker }
214*3f1979aaSAndroid Build Coastguard Worker }
215*3f1979aaSAndroid Build Coastguard Worker return;
216*3f1979aaSAndroid Build Coastguard Worker }
217*3f1979aaSAndroid Build Coastguard Worker idj = 2 - ido;
218*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ip; ++j) {
219*3f1979aaSAndroid Build Coastguard Worker idj += ido;
220*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
221*3f1979aaSAndroid Build Coastguard Worker idij = idj;
222*3f1979aaSAndroid Build Coastguard Worker for (i = 4; i <= ido; i += 2) {
223*3f1979aaSAndroid Build Coastguard Worker idij += 2;
224*3f1979aaSAndroid Build Coastguard Worker c1_ref(i - 1, k, j) = wa[idij - 1] * ch_ref(i - 1, k, j) - fsign*wa[idij] * ch_ref(i, k, j);
225*3f1979aaSAndroid Build Coastguard Worker c1_ref(i, k, j) = wa[idij - 1] * ch_ref(i, k, j) + fsign*wa[idij] * ch_ref(i - 1, k, j);
226*3f1979aaSAndroid Build Coastguard Worker }
227*3f1979aaSAndroid Build Coastguard Worker }
228*3f1979aaSAndroid Build Coastguard Worker }
229*3f1979aaSAndroid Build Coastguard Worker } /* passb */
230*3f1979aaSAndroid Build Coastguard Worker
231*3f1979aaSAndroid Build Coastguard Worker #undef ch2_ref
232*3f1979aaSAndroid Build Coastguard Worker #undef ch_ref
233*3f1979aaSAndroid Build Coastguard Worker #undef cc_ref
234*3f1979aaSAndroid Build Coastguard Worker #undef c2_ref
235*3f1979aaSAndroid Build Coastguard Worker #undef c1_ref
236*3f1979aaSAndroid Build Coastguard Worker
237*3f1979aaSAndroid Build Coastguard Worker
passb2(integer ido,integer l1,const real * cc,real * ch,const real * wa1)238*3f1979aaSAndroid Build Coastguard Worker static void passb2(integer ido, integer l1, const real *cc, real *ch, const real *wa1)
239*3f1979aaSAndroid Build Coastguard Worker {
240*3f1979aaSAndroid Build Coastguard Worker /* System generated locals */
241*3f1979aaSAndroid Build Coastguard Worker integer cc_offset, ch_offset;
242*3f1979aaSAndroid Build Coastguard Worker
243*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
244*3f1979aaSAndroid Build Coastguard Worker integer i, k;
245*3f1979aaSAndroid Build Coastguard Worker real ti2, tr2;
246*3f1979aaSAndroid Build Coastguard Worker
247*3f1979aaSAndroid Build Coastguard Worker
248*3f1979aaSAndroid Build Coastguard Worker #define cc_ref(a_1,a_2,a_3) cc[((a_3)*2 + (a_2))*ido + a_1]
249*3f1979aaSAndroid Build Coastguard Worker #define ch_ref(a_1,a_2,a_3) ch[((a_3)*l1 + (a_2))*ido + a_1]
250*3f1979aaSAndroid Build Coastguard Worker
251*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
252*3f1979aaSAndroid Build Coastguard Worker ch_offset = 1 + ido * (1 + l1);
253*3f1979aaSAndroid Build Coastguard Worker ch -= ch_offset;
254*3f1979aaSAndroid Build Coastguard Worker cc_offset = 1 + ido * 3;
255*3f1979aaSAndroid Build Coastguard Worker cc -= cc_offset;
256*3f1979aaSAndroid Build Coastguard Worker --wa1;
257*3f1979aaSAndroid Build Coastguard Worker
258*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
259*3f1979aaSAndroid Build Coastguard Worker if (ido <= 2) {
260*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
261*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 1) = cc_ref(1, 1, k) + cc_ref(1, 2, k);
262*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 2) = cc_ref(1, 1, k) - cc_ref(1, 2, k);
263*3f1979aaSAndroid Build Coastguard Worker ch_ref(2, k, 1) = cc_ref(2, 1, k) + cc_ref(2, 2, k);
264*3f1979aaSAndroid Build Coastguard Worker ch_ref(2, k, 2) = cc_ref(2, 1, k) - cc_ref(2, 2, k);
265*3f1979aaSAndroid Build Coastguard Worker }
266*3f1979aaSAndroid Build Coastguard Worker return;
267*3f1979aaSAndroid Build Coastguard Worker }
268*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
269*3f1979aaSAndroid Build Coastguard Worker for (i = 2; i <= ido; i += 2) {
270*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 1) = cc_ref(i - 1, 1, k) + cc_ref(i - 1, 2, k);
271*3f1979aaSAndroid Build Coastguard Worker tr2 = cc_ref(i - 1, 1, k) - cc_ref(i - 1, 2, k);
272*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 1) = cc_ref(i, 1, k) + cc_ref(i, 2, k);
273*3f1979aaSAndroid Build Coastguard Worker ti2 = cc_ref(i, 1, k) - cc_ref(i, 2, k);
274*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 2) = wa1[i - 1] * ti2 + wa1[i] * tr2;
275*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 2) = wa1[i - 1] * tr2 - wa1[i] * ti2;
276*3f1979aaSAndroid Build Coastguard Worker }
277*3f1979aaSAndroid Build Coastguard Worker }
278*3f1979aaSAndroid Build Coastguard Worker } /* passb2 */
279*3f1979aaSAndroid Build Coastguard Worker
280*3f1979aaSAndroid Build Coastguard Worker #undef ch_ref
281*3f1979aaSAndroid Build Coastguard Worker #undef cc_ref
282*3f1979aaSAndroid Build Coastguard Worker
283*3f1979aaSAndroid Build Coastguard Worker
passb3(integer ido,integer l1,const real * cc,real * ch,const real * wa1,const real * wa2)284*3f1979aaSAndroid Build Coastguard Worker static void passb3(integer ido, integer l1, const real *cc, real *ch, const real *wa1, const real *wa2)
285*3f1979aaSAndroid Build Coastguard Worker {
286*3f1979aaSAndroid Build Coastguard Worker static const real taur = -.5f;
287*3f1979aaSAndroid Build Coastguard Worker static const real taui = .866025403784439f;
288*3f1979aaSAndroid Build Coastguard Worker
289*3f1979aaSAndroid Build Coastguard Worker /* System generated locals */
290*3f1979aaSAndroid Build Coastguard Worker integer cc_offset, ch_offset;
291*3f1979aaSAndroid Build Coastguard Worker
292*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
293*3f1979aaSAndroid Build Coastguard Worker integer i, k;
294*3f1979aaSAndroid Build Coastguard Worker real ci2, ci3, di2, di3, cr2, cr3, dr2, dr3, ti2, tr2;
295*3f1979aaSAndroid Build Coastguard Worker
296*3f1979aaSAndroid Build Coastguard Worker
297*3f1979aaSAndroid Build Coastguard Worker #define cc_ref(a_1,a_2,a_3) cc[((a_3)*3 + (a_2))*ido + a_1]
298*3f1979aaSAndroid Build Coastguard Worker #define ch_ref(a_1,a_2,a_3) ch[((a_3)*l1 + (a_2))*ido + a_1]
299*3f1979aaSAndroid Build Coastguard Worker
300*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
301*3f1979aaSAndroid Build Coastguard Worker ch_offset = 1 + ido * (1 + l1);
302*3f1979aaSAndroid Build Coastguard Worker ch -= ch_offset;
303*3f1979aaSAndroid Build Coastguard Worker cc_offset = 1 + (ido << 2);
304*3f1979aaSAndroid Build Coastguard Worker cc -= cc_offset;
305*3f1979aaSAndroid Build Coastguard Worker --wa1;
306*3f1979aaSAndroid Build Coastguard Worker --wa2;
307*3f1979aaSAndroid Build Coastguard Worker
308*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
309*3f1979aaSAndroid Build Coastguard Worker if (ido == 2) {
310*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
311*3f1979aaSAndroid Build Coastguard Worker tr2 = cc_ref(1, 2, k) + cc_ref(1, 3, k);
312*3f1979aaSAndroid Build Coastguard Worker cr2 = cc_ref(1, 1, k) + taur * tr2;
313*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 1) = cc_ref(1, 1, k) + tr2;
314*3f1979aaSAndroid Build Coastguard Worker ti2 = cc_ref(2, 2, k) + cc_ref(2, 3, k);
315*3f1979aaSAndroid Build Coastguard Worker ci2 = cc_ref(2, 1, k) + taur * ti2;
316*3f1979aaSAndroid Build Coastguard Worker ch_ref(2, k, 1) = cc_ref(2, 1, k) + ti2;
317*3f1979aaSAndroid Build Coastguard Worker cr3 = taui * (cc_ref(1, 2, k) - cc_ref(1, 3, k));
318*3f1979aaSAndroid Build Coastguard Worker ci3 = taui * (cc_ref(2, 2, k) - cc_ref(2, 3, k));
319*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 2) = cr2 - ci3;
320*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 3) = cr2 + ci3;
321*3f1979aaSAndroid Build Coastguard Worker ch_ref(2, k, 2) = ci2 + cr3;
322*3f1979aaSAndroid Build Coastguard Worker ch_ref(2, k, 3) = ci2 - cr3;
323*3f1979aaSAndroid Build Coastguard Worker }
324*3f1979aaSAndroid Build Coastguard Worker } else {
325*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
326*3f1979aaSAndroid Build Coastguard Worker for (i = 2; i <= ido; i += 2) {
327*3f1979aaSAndroid Build Coastguard Worker tr2 = cc_ref(i - 1, 2, k) + cc_ref(i - 1, 3, k);
328*3f1979aaSAndroid Build Coastguard Worker cr2 = cc_ref(i - 1, 1, k) + taur * tr2;
329*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 1) = cc_ref(i - 1, 1, k) + tr2;
330*3f1979aaSAndroid Build Coastguard Worker ti2 = cc_ref(i, 2, k) + cc_ref(i, 3, k);
331*3f1979aaSAndroid Build Coastguard Worker ci2 = cc_ref(i, 1, k) + taur * ti2;
332*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 1) = cc_ref(i, 1, k) + ti2;
333*3f1979aaSAndroid Build Coastguard Worker cr3 = taui * (cc_ref(i - 1, 2, k) - cc_ref(i - 1, 3, k));
334*3f1979aaSAndroid Build Coastguard Worker ci3 = taui * (cc_ref(i, 2, k) - cc_ref(i, 3, k));
335*3f1979aaSAndroid Build Coastguard Worker dr2 = cr2 - ci3;
336*3f1979aaSAndroid Build Coastguard Worker dr3 = cr2 + ci3;
337*3f1979aaSAndroid Build Coastguard Worker di2 = ci2 + cr3;
338*3f1979aaSAndroid Build Coastguard Worker di3 = ci2 - cr3;
339*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 2) = wa1[i - 1] * di2 + wa1[i] * dr2;
340*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 2) = wa1[i - 1] * dr2 - wa1[i] * di2;
341*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 3) = wa2[i - 1] * di3 + wa2[i] * dr3;
342*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 3) = wa2[i - 1] * dr3 - wa2[i] * di3;
343*3f1979aaSAndroid Build Coastguard Worker }
344*3f1979aaSAndroid Build Coastguard Worker }
345*3f1979aaSAndroid Build Coastguard Worker }
346*3f1979aaSAndroid Build Coastguard Worker } /* passb3 */
347*3f1979aaSAndroid Build Coastguard Worker
348*3f1979aaSAndroid Build Coastguard Worker #undef ch_ref
349*3f1979aaSAndroid Build Coastguard Worker #undef cc_ref
350*3f1979aaSAndroid Build Coastguard Worker
351*3f1979aaSAndroid Build Coastguard Worker
passb4(integer ido,integer l1,const real * cc,real * ch,const real * wa1,const real * wa2,const real * wa3)352*3f1979aaSAndroid Build Coastguard Worker static void passb4(integer ido, integer l1, const real *cc, real *ch,
353*3f1979aaSAndroid Build Coastguard Worker const real *wa1, const real *wa2, const real *wa3)
354*3f1979aaSAndroid Build Coastguard Worker {
355*3f1979aaSAndroid Build Coastguard Worker /* System generated locals */
356*3f1979aaSAndroid Build Coastguard Worker integer cc_offset, ch_offset;
357*3f1979aaSAndroid Build Coastguard Worker
358*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
359*3f1979aaSAndroid Build Coastguard Worker integer i, k;
360*3f1979aaSAndroid Build Coastguard Worker real ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, tr3, tr4;
361*3f1979aaSAndroid Build Coastguard Worker
362*3f1979aaSAndroid Build Coastguard Worker
363*3f1979aaSAndroid Build Coastguard Worker #define cc_ref(a_1,a_2,a_3) cc[((a_3)*4 + (a_2))*ido + a_1]
364*3f1979aaSAndroid Build Coastguard Worker #define ch_ref(a_1,a_2,a_3) ch[((a_3)*l1 + (a_2))*ido + a_1]
365*3f1979aaSAndroid Build Coastguard Worker
366*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
367*3f1979aaSAndroid Build Coastguard Worker ch_offset = 1 + ido * (1 + l1);
368*3f1979aaSAndroid Build Coastguard Worker ch -= ch_offset;
369*3f1979aaSAndroid Build Coastguard Worker cc_offset = 1 + ido * 5;
370*3f1979aaSAndroid Build Coastguard Worker cc -= cc_offset;
371*3f1979aaSAndroid Build Coastguard Worker --wa1;
372*3f1979aaSAndroid Build Coastguard Worker --wa2;
373*3f1979aaSAndroid Build Coastguard Worker --wa3;
374*3f1979aaSAndroid Build Coastguard Worker
375*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
376*3f1979aaSAndroid Build Coastguard Worker if (ido == 2) {
377*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
378*3f1979aaSAndroid Build Coastguard Worker ti1 = cc_ref(2, 1, k) - cc_ref(2, 3, k);
379*3f1979aaSAndroid Build Coastguard Worker ti2 = cc_ref(2, 1, k) + cc_ref(2, 3, k);
380*3f1979aaSAndroid Build Coastguard Worker tr4 = cc_ref(2, 4, k) - cc_ref(2, 2, k);
381*3f1979aaSAndroid Build Coastguard Worker ti3 = cc_ref(2, 2, k) + cc_ref(2, 4, k);
382*3f1979aaSAndroid Build Coastguard Worker tr1 = cc_ref(1, 1, k) - cc_ref(1, 3, k);
383*3f1979aaSAndroid Build Coastguard Worker tr2 = cc_ref(1, 1, k) + cc_ref(1, 3, k);
384*3f1979aaSAndroid Build Coastguard Worker ti4 = cc_ref(1, 2, k) - cc_ref(1, 4, k);
385*3f1979aaSAndroid Build Coastguard Worker tr3 = cc_ref(1, 2, k) + cc_ref(1, 4, k);
386*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 1) = tr2 + tr3;
387*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 3) = tr2 - tr3;
388*3f1979aaSAndroid Build Coastguard Worker ch_ref(2, k, 1) = ti2 + ti3;
389*3f1979aaSAndroid Build Coastguard Worker ch_ref(2, k, 3) = ti2 - ti3;
390*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 2) = tr1 + tr4;
391*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 4) = tr1 - tr4;
392*3f1979aaSAndroid Build Coastguard Worker ch_ref(2, k, 2) = ti1 + ti4;
393*3f1979aaSAndroid Build Coastguard Worker ch_ref(2, k, 4) = ti1 - ti4;
394*3f1979aaSAndroid Build Coastguard Worker }
395*3f1979aaSAndroid Build Coastguard Worker } else {
396*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
397*3f1979aaSAndroid Build Coastguard Worker for (i = 2; i <= ido; i += 2) {
398*3f1979aaSAndroid Build Coastguard Worker ti1 = cc_ref(i, 1, k) - cc_ref(i, 3, k);
399*3f1979aaSAndroid Build Coastguard Worker ti2 = cc_ref(i, 1, k) + cc_ref(i, 3, k);
400*3f1979aaSAndroid Build Coastguard Worker ti3 = cc_ref(i, 2, k) + cc_ref(i, 4, k);
401*3f1979aaSAndroid Build Coastguard Worker tr4 = cc_ref(i, 4, k) - cc_ref(i, 2, k);
402*3f1979aaSAndroid Build Coastguard Worker tr1 = cc_ref(i - 1, 1, k) - cc_ref(i - 1, 3, k);
403*3f1979aaSAndroid Build Coastguard Worker tr2 = cc_ref(i - 1, 1, k) + cc_ref(i - 1, 3, k);
404*3f1979aaSAndroid Build Coastguard Worker ti4 = cc_ref(i - 1, 2, k) - cc_ref(i - 1, 4, k);
405*3f1979aaSAndroid Build Coastguard Worker tr3 = cc_ref(i - 1, 2, k) + cc_ref(i - 1, 4, k);
406*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 1) = tr2 + tr3;
407*3f1979aaSAndroid Build Coastguard Worker cr3 = tr2 - tr3;
408*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 1) = ti2 + ti3;
409*3f1979aaSAndroid Build Coastguard Worker ci3 = ti2 - ti3;
410*3f1979aaSAndroid Build Coastguard Worker cr2 = tr1 + tr4;
411*3f1979aaSAndroid Build Coastguard Worker cr4 = tr1 - tr4;
412*3f1979aaSAndroid Build Coastguard Worker ci2 = ti1 + ti4;
413*3f1979aaSAndroid Build Coastguard Worker ci4 = ti1 - ti4;
414*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 2) = wa1[i - 1] * cr2 - wa1[i] * ci2;
415*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 2) = wa1[i - 1] * ci2 + wa1[i] * cr2;
416*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 3) = wa2[i - 1] * cr3 - wa2[i] * ci3;
417*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 3) = wa2[i - 1] * ci3 + wa2[i] * cr3;
418*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 4) = wa3[i - 1] * cr4 - wa3[i] * ci4;
419*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 4) = wa3[i - 1] * ci4 + wa3[i] * cr4;
420*3f1979aaSAndroid Build Coastguard Worker }
421*3f1979aaSAndroid Build Coastguard Worker }
422*3f1979aaSAndroid Build Coastguard Worker }
423*3f1979aaSAndroid Build Coastguard Worker } /* passb4 */
424*3f1979aaSAndroid Build Coastguard Worker
425*3f1979aaSAndroid Build Coastguard Worker #undef ch_ref
426*3f1979aaSAndroid Build Coastguard Worker #undef cc_ref
427*3f1979aaSAndroid Build Coastguard Worker
428*3f1979aaSAndroid Build Coastguard Worker /* passf5 and passb5 merged */
passfb5(integer ido,integer l1,const real * cc,real * ch,const real * wa1,const real * wa2,const real * wa3,const real * wa4,real fsign)429*3f1979aaSAndroid Build Coastguard Worker static void passfb5(integer ido, integer l1, const real *cc, real *ch,
430*3f1979aaSAndroid Build Coastguard Worker const real *wa1, const real *wa2, const real *wa3, const real *wa4, real fsign)
431*3f1979aaSAndroid Build Coastguard Worker {
432*3f1979aaSAndroid Build Coastguard Worker const real tr11 = .309016994374947f;
433*3f1979aaSAndroid Build Coastguard Worker const real ti11 = .951056516295154f*fsign;
434*3f1979aaSAndroid Build Coastguard Worker const real tr12 = -.809016994374947f;
435*3f1979aaSAndroid Build Coastguard Worker const real ti12 = .587785252292473f*fsign;
436*3f1979aaSAndroid Build Coastguard Worker
437*3f1979aaSAndroid Build Coastguard Worker /* System generated locals */
438*3f1979aaSAndroid Build Coastguard Worker integer cc_offset, ch_offset;
439*3f1979aaSAndroid Build Coastguard Worker
440*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
441*3f1979aaSAndroid Build Coastguard Worker integer i, k;
442*3f1979aaSAndroid Build Coastguard Worker real ci2, ci3, ci4, ci5, di3, di4, di5, di2, cr2, cr3, cr5, cr4, ti2, ti3,
443*3f1979aaSAndroid Build Coastguard Worker ti4, ti5, dr3, dr4, dr5, dr2, tr2, tr3, tr4, tr5;
444*3f1979aaSAndroid Build Coastguard Worker
445*3f1979aaSAndroid Build Coastguard Worker
446*3f1979aaSAndroid Build Coastguard Worker #define cc_ref(a_1,a_2,a_3) cc[((a_3)*5 + (a_2))*ido + a_1]
447*3f1979aaSAndroid Build Coastguard Worker #define ch_ref(a_1,a_2,a_3) ch[((a_3)*l1 + (a_2))*ido + a_1]
448*3f1979aaSAndroid Build Coastguard Worker
449*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
450*3f1979aaSAndroid Build Coastguard Worker ch_offset = 1 + ido * (1 + l1);
451*3f1979aaSAndroid Build Coastguard Worker ch -= ch_offset;
452*3f1979aaSAndroid Build Coastguard Worker cc_offset = 1 + ido * 6;
453*3f1979aaSAndroid Build Coastguard Worker cc -= cc_offset;
454*3f1979aaSAndroid Build Coastguard Worker --wa1;
455*3f1979aaSAndroid Build Coastguard Worker --wa2;
456*3f1979aaSAndroid Build Coastguard Worker --wa3;
457*3f1979aaSAndroid Build Coastguard Worker --wa4;
458*3f1979aaSAndroid Build Coastguard Worker
459*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
460*3f1979aaSAndroid Build Coastguard Worker if (ido == 2) {
461*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
462*3f1979aaSAndroid Build Coastguard Worker ti5 = cc_ref(2, 2, k) - cc_ref(2, 5, k);
463*3f1979aaSAndroid Build Coastguard Worker ti2 = cc_ref(2, 2, k) + cc_ref(2, 5, k);
464*3f1979aaSAndroid Build Coastguard Worker ti4 = cc_ref(2, 3, k) - cc_ref(2, 4, k);
465*3f1979aaSAndroid Build Coastguard Worker ti3 = cc_ref(2, 3, k) + cc_ref(2, 4, k);
466*3f1979aaSAndroid Build Coastguard Worker tr5 = cc_ref(1, 2, k) - cc_ref(1, 5, k);
467*3f1979aaSAndroid Build Coastguard Worker tr2 = cc_ref(1, 2, k) + cc_ref(1, 5, k);
468*3f1979aaSAndroid Build Coastguard Worker tr4 = cc_ref(1, 3, k) - cc_ref(1, 4, k);
469*3f1979aaSAndroid Build Coastguard Worker tr3 = cc_ref(1, 3, k) + cc_ref(1, 4, k);
470*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 1) = cc_ref(1, 1, k) + tr2 + tr3;
471*3f1979aaSAndroid Build Coastguard Worker ch_ref(2, k, 1) = cc_ref(2, 1, k) + ti2 + ti3;
472*3f1979aaSAndroid Build Coastguard Worker cr2 = cc_ref(1, 1, k) + tr11 * tr2 + tr12 * tr3;
473*3f1979aaSAndroid Build Coastguard Worker ci2 = cc_ref(2, 1, k) + tr11 * ti2 + tr12 * ti3;
474*3f1979aaSAndroid Build Coastguard Worker cr3 = cc_ref(1, 1, k) + tr12 * tr2 + tr11 * tr3;
475*3f1979aaSAndroid Build Coastguard Worker ci3 = cc_ref(2, 1, k) + tr12 * ti2 + tr11 * ti3;
476*3f1979aaSAndroid Build Coastguard Worker cr5 = ti11 * tr5 + ti12 * tr4;
477*3f1979aaSAndroid Build Coastguard Worker ci5 = ti11 * ti5 + ti12 * ti4;
478*3f1979aaSAndroid Build Coastguard Worker cr4 = ti12 * tr5 - ti11 * tr4;
479*3f1979aaSAndroid Build Coastguard Worker ci4 = ti12 * ti5 - ti11 * ti4;
480*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 2) = cr2 - ci5;
481*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 5) = cr2 + ci5;
482*3f1979aaSAndroid Build Coastguard Worker ch_ref(2, k, 2) = ci2 + cr5;
483*3f1979aaSAndroid Build Coastguard Worker ch_ref(2, k, 3) = ci3 + cr4;
484*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 3) = cr3 - ci4;
485*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 4) = cr3 + ci4;
486*3f1979aaSAndroid Build Coastguard Worker ch_ref(2, k, 4) = ci3 - cr4;
487*3f1979aaSAndroid Build Coastguard Worker ch_ref(2, k, 5) = ci2 - cr5;
488*3f1979aaSAndroid Build Coastguard Worker }
489*3f1979aaSAndroid Build Coastguard Worker } else {
490*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
491*3f1979aaSAndroid Build Coastguard Worker for (i = 2; i <= ido; i += 2) {
492*3f1979aaSAndroid Build Coastguard Worker ti5 = cc_ref(i, 2, k) - cc_ref(i, 5, k);
493*3f1979aaSAndroid Build Coastguard Worker ti2 = cc_ref(i, 2, k) + cc_ref(i, 5, k);
494*3f1979aaSAndroid Build Coastguard Worker ti4 = cc_ref(i, 3, k) - cc_ref(i, 4, k);
495*3f1979aaSAndroid Build Coastguard Worker ti3 = cc_ref(i, 3, k) + cc_ref(i, 4, k);
496*3f1979aaSAndroid Build Coastguard Worker tr5 = cc_ref(i - 1, 2, k) - cc_ref(i - 1, 5, k);
497*3f1979aaSAndroid Build Coastguard Worker tr2 = cc_ref(i - 1, 2, k) + cc_ref(i - 1, 5, k);
498*3f1979aaSAndroid Build Coastguard Worker tr4 = cc_ref(i - 1, 3, k) - cc_ref(i - 1, 4, k);
499*3f1979aaSAndroid Build Coastguard Worker tr3 = cc_ref(i - 1, 3, k) + cc_ref(i - 1, 4, k);
500*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 1) = cc_ref(i - 1, 1, k) + tr2 + tr3;
501*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 1) = cc_ref(i, 1, k) + ti2 + ti3;
502*3f1979aaSAndroid Build Coastguard Worker cr2 = cc_ref(i - 1, 1, k) + tr11 * tr2 + tr12 * tr3;
503*3f1979aaSAndroid Build Coastguard Worker ci2 = cc_ref(i, 1, k) + tr11 * ti2 + tr12 * ti3;
504*3f1979aaSAndroid Build Coastguard Worker cr3 = cc_ref(i - 1, 1, k) + tr12 * tr2 + tr11 * tr3;
505*3f1979aaSAndroid Build Coastguard Worker ci3 = cc_ref(i, 1, k) + tr12 * ti2 + tr11 * ti3;
506*3f1979aaSAndroid Build Coastguard Worker cr5 = ti11 * tr5 + ti12 * tr4;
507*3f1979aaSAndroid Build Coastguard Worker ci5 = ti11 * ti5 + ti12 * ti4;
508*3f1979aaSAndroid Build Coastguard Worker cr4 = ti12 * tr5 - ti11 * tr4;
509*3f1979aaSAndroid Build Coastguard Worker ci4 = ti12 * ti5 - ti11 * ti4;
510*3f1979aaSAndroid Build Coastguard Worker dr3 = cr3 - ci4;
511*3f1979aaSAndroid Build Coastguard Worker dr4 = cr3 + ci4;
512*3f1979aaSAndroid Build Coastguard Worker di3 = ci3 + cr4;
513*3f1979aaSAndroid Build Coastguard Worker di4 = ci3 - cr4;
514*3f1979aaSAndroid Build Coastguard Worker dr5 = cr2 + ci5;
515*3f1979aaSAndroid Build Coastguard Worker dr2 = cr2 - ci5;
516*3f1979aaSAndroid Build Coastguard Worker di5 = ci2 - cr5;
517*3f1979aaSAndroid Build Coastguard Worker di2 = ci2 + cr5;
518*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 2) = wa1[i - 1] * dr2 - fsign*wa1[i] * di2;
519*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 2) = wa1[i - 1] * di2 + fsign*wa1[i] * dr2;
520*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 3) = wa2[i - 1] * dr3 - fsign*wa2[i] * di3;
521*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 3) = wa2[i - 1] * di3 + fsign*wa2[i] * dr3;
522*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 4) = wa3[i - 1] * dr4 - fsign*wa3[i] * di4;
523*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 4) = wa3[i - 1] * di4 + fsign*wa3[i] * dr4;
524*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 5) = wa4[i - 1] * dr5 - fsign*wa4[i] * di5;
525*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 5) = wa4[i - 1] * di5 + fsign*wa4[i] * dr5;
526*3f1979aaSAndroid Build Coastguard Worker }
527*3f1979aaSAndroid Build Coastguard Worker }
528*3f1979aaSAndroid Build Coastguard Worker }
529*3f1979aaSAndroid Build Coastguard Worker } /* passb5 */
530*3f1979aaSAndroid Build Coastguard Worker
531*3f1979aaSAndroid Build Coastguard Worker #undef ch_ref
532*3f1979aaSAndroid Build Coastguard Worker #undef cc_ref
533*3f1979aaSAndroid Build Coastguard Worker
passf2(integer ido,integer l1,const real * cc,real * ch,const real * wa1)534*3f1979aaSAndroid Build Coastguard Worker static void passf2(integer ido, integer l1, const real *cc, real *ch, const real *wa1)
535*3f1979aaSAndroid Build Coastguard Worker {
536*3f1979aaSAndroid Build Coastguard Worker /* System generated locals */
537*3f1979aaSAndroid Build Coastguard Worker integer cc_offset, ch_offset;
538*3f1979aaSAndroid Build Coastguard Worker
539*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
540*3f1979aaSAndroid Build Coastguard Worker integer i, k;
541*3f1979aaSAndroid Build Coastguard Worker real ti2, tr2;
542*3f1979aaSAndroid Build Coastguard Worker
543*3f1979aaSAndroid Build Coastguard Worker
544*3f1979aaSAndroid Build Coastguard Worker #define cc_ref(a_1,a_2,a_3) cc[((a_3)*2 + (a_2))*ido + a_1]
545*3f1979aaSAndroid Build Coastguard Worker #define ch_ref(a_1,a_2,a_3) ch[((a_3)*l1 + (a_2))*ido + a_1]
546*3f1979aaSAndroid Build Coastguard Worker
547*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
548*3f1979aaSAndroid Build Coastguard Worker ch_offset = 1 + ido * (1 + l1);
549*3f1979aaSAndroid Build Coastguard Worker ch -= ch_offset;
550*3f1979aaSAndroid Build Coastguard Worker cc_offset = 1 + ido * 3;
551*3f1979aaSAndroid Build Coastguard Worker cc -= cc_offset;
552*3f1979aaSAndroid Build Coastguard Worker --wa1;
553*3f1979aaSAndroid Build Coastguard Worker
554*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
555*3f1979aaSAndroid Build Coastguard Worker if (ido == 2) {
556*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
557*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 1) = cc_ref(1, 1, k) + cc_ref(1, 2, k);
558*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 2) = cc_ref(1, 1, k) - cc_ref(1, 2, k);
559*3f1979aaSAndroid Build Coastguard Worker ch_ref(2, k, 1) = cc_ref(2, 1, k) + cc_ref(2, 2, k);
560*3f1979aaSAndroid Build Coastguard Worker ch_ref(2, k, 2) = cc_ref(2, 1, k) - cc_ref(2, 2, k);
561*3f1979aaSAndroid Build Coastguard Worker }
562*3f1979aaSAndroid Build Coastguard Worker } else {
563*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
564*3f1979aaSAndroid Build Coastguard Worker for (i = 2; i <= ido; i += 2) {
565*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 1) = cc_ref(i - 1, 1, k) + cc_ref(i - 1, 2,
566*3f1979aaSAndroid Build Coastguard Worker k);
567*3f1979aaSAndroid Build Coastguard Worker tr2 = cc_ref(i - 1, 1, k) - cc_ref(i - 1, 2, k);
568*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 1) = cc_ref(i, 1, k) + cc_ref(i, 2, k);
569*3f1979aaSAndroid Build Coastguard Worker ti2 = cc_ref(i, 1, k) - cc_ref(i, 2, k);
570*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 2) = wa1[i - 1] * ti2 - wa1[i] * tr2;
571*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 2) = wa1[i - 1] * tr2 + wa1[i] * ti2;
572*3f1979aaSAndroid Build Coastguard Worker }
573*3f1979aaSAndroid Build Coastguard Worker }
574*3f1979aaSAndroid Build Coastguard Worker }
575*3f1979aaSAndroid Build Coastguard Worker } /* passf2 */
576*3f1979aaSAndroid Build Coastguard Worker
577*3f1979aaSAndroid Build Coastguard Worker #undef ch_ref
578*3f1979aaSAndroid Build Coastguard Worker #undef cc_ref
579*3f1979aaSAndroid Build Coastguard Worker
580*3f1979aaSAndroid Build Coastguard Worker
passf3(integer ido,integer l1,const real * cc,real * ch,const real * wa1,const real * wa2)581*3f1979aaSAndroid Build Coastguard Worker static void passf3(integer ido, integer l1, const real *cc, real *ch,
582*3f1979aaSAndroid Build Coastguard Worker const real *wa1, const real *wa2)
583*3f1979aaSAndroid Build Coastguard Worker {
584*3f1979aaSAndroid Build Coastguard Worker static const real taur = -.5f;
585*3f1979aaSAndroid Build Coastguard Worker static const real taui = -.866025403784439f;
586*3f1979aaSAndroid Build Coastguard Worker
587*3f1979aaSAndroid Build Coastguard Worker /* System generated locals */
588*3f1979aaSAndroid Build Coastguard Worker integer cc_offset, ch_offset;
589*3f1979aaSAndroid Build Coastguard Worker
590*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
591*3f1979aaSAndroid Build Coastguard Worker integer i, k;
592*3f1979aaSAndroid Build Coastguard Worker real ci2, ci3, di2, di3, cr2, cr3, dr2, dr3, ti2, tr2;
593*3f1979aaSAndroid Build Coastguard Worker
594*3f1979aaSAndroid Build Coastguard Worker
595*3f1979aaSAndroid Build Coastguard Worker #define cc_ref(a_1,a_2,a_3) cc[((a_3)*3 + (a_2))*ido + a_1]
596*3f1979aaSAndroid Build Coastguard Worker #define ch_ref(a_1,a_2,a_3) ch[((a_3)*l1 + (a_2))*ido + a_1]
597*3f1979aaSAndroid Build Coastguard Worker
598*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
599*3f1979aaSAndroid Build Coastguard Worker ch_offset = 1 + ido * (1 + l1);
600*3f1979aaSAndroid Build Coastguard Worker ch -= ch_offset;
601*3f1979aaSAndroid Build Coastguard Worker cc_offset = 1 + (ido << 2);
602*3f1979aaSAndroid Build Coastguard Worker cc -= cc_offset;
603*3f1979aaSAndroid Build Coastguard Worker --wa1;
604*3f1979aaSAndroid Build Coastguard Worker --wa2;
605*3f1979aaSAndroid Build Coastguard Worker
606*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
607*3f1979aaSAndroid Build Coastguard Worker if (ido == 2) {
608*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
609*3f1979aaSAndroid Build Coastguard Worker tr2 = cc_ref(1, 2, k) + cc_ref(1, 3, k);
610*3f1979aaSAndroid Build Coastguard Worker cr2 = cc_ref(1, 1, k) + taur * tr2;
611*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 1) = cc_ref(1, 1, k) + tr2;
612*3f1979aaSAndroid Build Coastguard Worker ti2 = cc_ref(2, 2, k) + cc_ref(2, 3, k);
613*3f1979aaSAndroid Build Coastguard Worker ci2 = cc_ref(2, 1, k) + taur * ti2;
614*3f1979aaSAndroid Build Coastguard Worker ch_ref(2, k, 1) = cc_ref(2, 1, k) + ti2;
615*3f1979aaSAndroid Build Coastguard Worker cr3 = taui * (cc_ref(1, 2, k) - cc_ref(1, 3, k));
616*3f1979aaSAndroid Build Coastguard Worker ci3 = taui * (cc_ref(2, 2, k) - cc_ref(2, 3, k));
617*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 2) = cr2 - ci3;
618*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 3) = cr2 + ci3;
619*3f1979aaSAndroid Build Coastguard Worker ch_ref(2, k, 2) = ci2 + cr3;
620*3f1979aaSAndroid Build Coastguard Worker ch_ref(2, k, 3) = ci2 - cr3;
621*3f1979aaSAndroid Build Coastguard Worker }
622*3f1979aaSAndroid Build Coastguard Worker } else {
623*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
624*3f1979aaSAndroid Build Coastguard Worker for (i = 2; i <= ido; i += 2) {
625*3f1979aaSAndroid Build Coastguard Worker tr2 = cc_ref(i - 1, 2, k) + cc_ref(i - 1, 3, k);
626*3f1979aaSAndroid Build Coastguard Worker cr2 = cc_ref(i - 1, 1, k) + taur * tr2;
627*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 1) = cc_ref(i - 1, 1, k) + tr2;
628*3f1979aaSAndroid Build Coastguard Worker ti2 = cc_ref(i, 2, k) + cc_ref(i, 3, k);
629*3f1979aaSAndroid Build Coastguard Worker ci2 = cc_ref(i, 1, k) + taur * ti2;
630*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 1) = cc_ref(i, 1, k) + ti2;
631*3f1979aaSAndroid Build Coastguard Worker cr3 = taui * (cc_ref(i - 1, 2, k) - cc_ref(i - 1, 3, k));
632*3f1979aaSAndroid Build Coastguard Worker ci3 = taui * (cc_ref(i, 2, k) - cc_ref(i, 3, k));
633*3f1979aaSAndroid Build Coastguard Worker dr2 = cr2 - ci3;
634*3f1979aaSAndroid Build Coastguard Worker dr3 = cr2 + ci3;
635*3f1979aaSAndroid Build Coastguard Worker di2 = ci2 + cr3;
636*3f1979aaSAndroid Build Coastguard Worker di3 = ci2 - cr3;
637*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 2) = wa1[i - 1] * di2 - wa1[i] * dr2;
638*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 2) = wa1[i - 1] * dr2 + wa1[i] * di2;
639*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 3) = wa2[i - 1] * di3 - wa2[i] * dr3;
640*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 3) = wa2[i - 1] * dr3 + wa2[i] * di3;
641*3f1979aaSAndroid Build Coastguard Worker }
642*3f1979aaSAndroid Build Coastguard Worker }
643*3f1979aaSAndroid Build Coastguard Worker }
644*3f1979aaSAndroid Build Coastguard Worker } /* passf3 */
645*3f1979aaSAndroid Build Coastguard Worker
646*3f1979aaSAndroid Build Coastguard Worker #undef ch_ref
647*3f1979aaSAndroid Build Coastguard Worker #undef cc_ref
648*3f1979aaSAndroid Build Coastguard Worker
649*3f1979aaSAndroid Build Coastguard Worker
passf4(integer ido,integer l1,const real * cc,real * ch,const real * wa1,const real * wa2,const real * wa3)650*3f1979aaSAndroid Build Coastguard Worker static void passf4(integer ido, integer l1, const real *cc, real *ch,
651*3f1979aaSAndroid Build Coastguard Worker const real *wa1, const real *wa2, const real *wa3)
652*3f1979aaSAndroid Build Coastguard Worker {
653*3f1979aaSAndroid Build Coastguard Worker /* System generated locals */
654*3f1979aaSAndroid Build Coastguard Worker integer cc_offset, ch_offset;
655*3f1979aaSAndroid Build Coastguard Worker
656*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
657*3f1979aaSAndroid Build Coastguard Worker integer i, k;
658*3f1979aaSAndroid Build Coastguard Worker real ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, tr3, tr4;
659*3f1979aaSAndroid Build Coastguard Worker
660*3f1979aaSAndroid Build Coastguard Worker
661*3f1979aaSAndroid Build Coastguard Worker #define cc_ref(a_1,a_2,a_3) cc[((a_3)*4 + (a_2))*ido + a_1]
662*3f1979aaSAndroid Build Coastguard Worker #define ch_ref(a_1,a_2,a_3) ch[((a_3)*l1 + (a_2))*ido + a_1]
663*3f1979aaSAndroid Build Coastguard Worker
664*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
665*3f1979aaSAndroid Build Coastguard Worker ch_offset = 1 + ido * (1 + l1);
666*3f1979aaSAndroid Build Coastguard Worker ch -= ch_offset;
667*3f1979aaSAndroid Build Coastguard Worker cc_offset = 1 + ido * 5;
668*3f1979aaSAndroid Build Coastguard Worker cc -= cc_offset;
669*3f1979aaSAndroid Build Coastguard Worker --wa1;
670*3f1979aaSAndroid Build Coastguard Worker --wa2;
671*3f1979aaSAndroid Build Coastguard Worker --wa3;
672*3f1979aaSAndroid Build Coastguard Worker
673*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
674*3f1979aaSAndroid Build Coastguard Worker if (ido == 2) {
675*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
676*3f1979aaSAndroid Build Coastguard Worker ti1 = cc_ref(2, 1, k) - cc_ref(2, 3, k);
677*3f1979aaSAndroid Build Coastguard Worker ti2 = cc_ref(2, 1, k) + cc_ref(2, 3, k);
678*3f1979aaSAndroid Build Coastguard Worker tr4 = cc_ref(2, 2, k) - cc_ref(2, 4, k);
679*3f1979aaSAndroid Build Coastguard Worker ti3 = cc_ref(2, 2, k) + cc_ref(2, 4, k);
680*3f1979aaSAndroid Build Coastguard Worker tr1 = cc_ref(1, 1, k) - cc_ref(1, 3, k);
681*3f1979aaSAndroid Build Coastguard Worker tr2 = cc_ref(1, 1, k) + cc_ref(1, 3, k);
682*3f1979aaSAndroid Build Coastguard Worker ti4 = cc_ref(1, 4, k) - cc_ref(1, 2, k);
683*3f1979aaSAndroid Build Coastguard Worker tr3 = cc_ref(1, 2, k) + cc_ref(1, 4, k);
684*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 1) = tr2 + tr3;
685*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 3) = tr2 - tr3;
686*3f1979aaSAndroid Build Coastguard Worker ch_ref(2, k, 1) = ti2 + ti3;
687*3f1979aaSAndroid Build Coastguard Worker ch_ref(2, k, 3) = ti2 - ti3;
688*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 2) = tr1 + tr4;
689*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 4) = tr1 - tr4;
690*3f1979aaSAndroid Build Coastguard Worker ch_ref(2, k, 2) = ti1 + ti4;
691*3f1979aaSAndroid Build Coastguard Worker ch_ref(2, k, 4) = ti1 - ti4;
692*3f1979aaSAndroid Build Coastguard Worker }
693*3f1979aaSAndroid Build Coastguard Worker } else {
694*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
695*3f1979aaSAndroid Build Coastguard Worker for (i = 2; i <= ido; i += 2) {
696*3f1979aaSAndroid Build Coastguard Worker ti1 = cc_ref(i, 1, k) - cc_ref(i, 3, k);
697*3f1979aaSAndroid Build Coastguard Worker ti2 = cc_ref(i, 1, k) + cc_ref(i, 3, k);
698*3f1979aaSAndroid Build Coastguard Worker ti3 = cc_ref(i, 2, k) + cc_ref(i, 4, k);
699*3f1979aaSAndroid Build Coastguard Worker tr4 = cc_ref(i, 2, k) - cc_ref(i, 4, k);
700*3f1979aaSAndroid Build Coastguard Worker tr1 = cc_ref(i - 1, 1, k) - cc_ref(i - 1, 3, k);
701*3f1979aaSAndroid Build Coastguard Worker tr2 = cc_ref(i - 1, 1, k) + cc_ref(i - 1, 3, k);
702*3f1979aaSAndroid Build Coastguard Worker ti4 = cc_ref(i - 1, 4, k) - cc_ref(i - 1, 2, k);
703*3f1979aaSAndroid Build Coastguard Worker tr3 = cc_ref(i - 1, 2, k) + cc_ref(i - 1, 4, k);
704*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 1) = tr2 + tr3;
705*3f1979aaSAndroid Build Coastguard Worker cr3 = tr2 - tr3;
706*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 1) = ti2 + ti3;
707*3f1979aaSAndroid Build Coastguard Worker ci3 = ti2 - ti3;
708*3f1979aaSAndroid Build Coastguard Worker cr2 = tr1 + tr4;
709*3f1979aaSAndroid Build Coastguard Worker cr4 = tr1 - tr4;
710*3f1979aaSAndroid Build Coastguard Worker ci2 = ti1 + ti4;
711*3f1979aaSAndroid Build Coastguard Worker ci4 = ti1 - ti4;
712*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 2) = wa1[i - 1] * cr2 + wa1[i] * ci2;
713*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 2) = wa1[i - 1] * ci2 - wa1[i] * cr2;
714*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 3) = wa2[i - 1] * cr3 + wa2[i] * ci3;
715*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 3) = wa2[i - 1] * ci3 - wa2[i] * cr3;
716*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 4) = wa3[i - 1] * cr4 + wa3[i] * ci4;
717*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 4) = wa3[i - 1] * ci4 - wa3[i] * cr4;
718*3f1979aaSAndroid Build Coastguard Worker }
719*3f1979aaSAndroid Build Coastguard Worker }
720*3f1979aaSAndroid Build Coastguard Worker }
721*3f1979aaSAndroid Build Coastguard Worker } /* passf4 */
722*3f1979aaSAndroid Build Coastguard Worker
723*3f1979aaSAndroid Build Coastguard Worker #undef ch_ref
724*3f1979aaSAndroid Build Coastguard Worker #undef cc_ref
725*3f1979aaSAndroid Build Coastguard Worker
radb2(integer ido,integer l1,const real * cc,real * ch,const real * wa1)726*3f1979aaSAndroid Build Coastguard Worker static void radb2(integer ido, integer l1, const real *cc, real *ch, const real *wa1)
727*3f1979aaSAndroid Build Coastguard Worker {
728*3f1979aaSAndroid Build Coastguard Worker /* System generated locals */
729*3f1979aaSAndroid Build Coastguard Worker integer cc_offset, ch_offset;
730*3f1979aaSAndroid Build Coastguard Worker
731*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
732*3f1979aaSAndroid Build Coastguard Worker integer i, k, ic;
733*3f1979aaSAndroid Build Coastguard Worker real ti2, tr2;
734*3f1979aaSAndroid Build Coastguard Worker integer idp2;
735*3f1979aaSAndroid Build Coastguard Worker
736*3f1979aaSAndroid Build Coastguard Worker
737*3f1979aaSAndroid Build Coastguard Worker #define cc_ref(a_1,a_2,a_3) cc[((a_3)*2 + (a_2))*ido + a_1]
738*3f1979aaSAndroid Build Coastguard Worker #define ch_ref(a_1,a_2,a_3) ch[((a_3)*l1 + (a_2))*ido + a_1]
739*3f1979aaSAndroid Build Coastguard Worker
740*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
741*3f1979aaSAndroid Build Coastguard Worker ch_offset = 1 + ido * (1 + l1);
742*3f1979aaSAndroid Build Coastguard Worker ch -= ch_offset;
743*3f1979aaSAndroid Build Coastguard Worker cc_offset = 1 + ido * 3;
744*3f1979aaSAndroid Build Coastguard Worker cc -= cc_offset;
745*3f1979aaSAndroid Build Coastguard Worker --wa1;
746*3f1979aaSAndroid Build Coastguard Worker
747*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
748*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
749*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 1) = cc_ref(1, 1, k) + cc_ref(ido, 2, k);
750*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 2) = cc_ref(1, 1, k) - cc_ref(ido, 2, k);
751*3f1979aaSAndroid Build Coastguard Worker }
752*3f1979aaSAndroid Build Coastguard Worker if (ido < 2) return;
753*3f1979aaSAndroid Build Coastguard Worker else if (ido != 2) {
754*3f1979aaSAndroid Build Coastguard Worker idp2 = ido + 2;
755*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
756*3f1979aaSAndroid Build Coastguard Worker for (i = 3; i <= ido; i += 2) {
757*3f1979aaSAndroid Build Coastguard Worker ic = idp2 - i;
758*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 1) = cc_ref(i - 1, 1, k) + cc_ref(ic - 1, 2,
759*3f1979aaSAndroid Build Coastguard Worker k);
760*3f1979aaSAndroid Build Coastguard Worker tr2 = cc_ref(i - 1, 1, k) - cc_ref(ic - 1, 2, k);
761*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 1) = cc_ref(i, 1, k) - cc_ref(ic, 2, k);
762*3f1979aaSAndroid Build Coastguard Worker ti2 = cc_ref(i, 1, k) + cc_ref(ic, 2, k);
763*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 2) = wa1[i - 2] * tr2 - wa1[i - 1] * ti2;
764*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 2) = wa1[i - 2] * ti2 + wa1[i - 1] * tr2;
765*3f1979aaSAndroid Build Coastguard Worker }
766*3f1979aaSAndroid Build Coastguard Worker }
767*3f1979aaSAndroid Build Coastguard Worker if (ido % 2 == 1) return;
768*3f1979aaSAndroid Build Coastguard Worker }
769*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
770*3f1979aaSAndroid Build Coastguard Worker ch_ref(ido, k, 1) = cc_ref(ido, 1, k) + cc_ref(ido, 1, k);
771*3f1979aaSAndroid Build Coastguard Worker ch_ref(ido, k, 2) = -(cc_ref(1, 2, k) + cc_ref(1, 2, k));
772*3f1979aaSAndroid Build Coastguard Worker }
773*3f1979aaSAndroid Build Coastguard Worker } /* radb2 */
774*3f1979aaSAndroid Build Coastguard Worker
775*3f1979aaSAndroid Build Coastguard Worker #undef ch_ref
776*3f1979aaSAndroid Build Coastguard Worker #undef cc_ref
777*3f1979aaSAndroid Build Coastguard Worker
778*3f1979aaSAndroid Build Coastguard Worker
radb3(integer ido,integer l1,const real * cc,real * ch,const real * wa1,const real * wa2)779*3f1979aaSAndroid Build Coastguard Worker static void radb3(integer ido, integer l1, const real *cc, real *ch,
780*3f1979aaSAndroid Build Coastguard Worker const real *wa1, const real *wa2)
781*3f1979aaSAndroid Build Coastguard Worker {
782*3f1979aaSAndroid Build Coastguard Worker /* Initialized data */
783*3f1979aaSAndroid Build Coastguard Worker
784*3f1979aaSAndroid Build Coastguard Worker static const real taur = -.5f;
785*3f1979aaSAndroid Build Coastguard Worker static const real taui = .866025403784439f;
786*3f1979aaSAndroid Build Coastguard Worker
787*3f1979aaSAndroid Build Coastguard Worker /* System generated locals */
788*3f1979aaSAndroid Build Coastguard Worker integer cc_offset, ch_offset;
789*3f1979aaSAndroid Build Coastguard Worker
790*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
791*3f1979aaSAndroid Build Coastguard Worker integer i, k, ic;
792*3f1979aaSAndroid Build Coastguard Worker real ci2, ci3, di2, di3, cr2, cr3, dr2, dr3, ti2, tr2;
793*3f1979aaSAndroid Build Coastguard Worker integer idp2;
794*3f1979aaSAndroid Build Coastguard Worker
795*3f1979aaSAndroid Build Coastguard Worker
796*3f1979aaSAndroid Build Coastguard Worker #define cc_ref(a_1,a_2,a_3) cc[((a_3)*3 + (a_2))*ido + a_1]
797*3f1979aaSAndroid Build Coastguard Worker #define ch_ref(a_1,a_2,a_3) ch[((a_3)*l1 + (a_2))*ido + a_1]
798*3f1979aaSAndroid Build Coastguard Worker
799*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
800*3f1979aaSAndroid Build Coastguard Worker ch_offset = 1 + ido * (1 + l1);
801*3f1979aaSAndroid Build Coastguard Worker ch -= ch_offset;
802*3f1979aaSAndroid Build Coastguard Worker cc_offset = 1 + (ido << 2);
803*3f1979aaSAndroid Build Coastguard Worker cc -= cc_offset;
804*3f1979aaSAndroid Build Coastguard Worker --wa1;
805*3f1979aaSAndroid Build Coastguard Worker --wa2;
806*3f1979aaSAndroid Build Coastguard Worker
807*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
808*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
809*3f1979aaSAndroid Build Coastguard Worker tr2 = cc_ref(ido, 2, k) + cc_ref(ido, 2, k);
810*3f1979aaSAndroid Build Coastguard Worker cr2 = cc_ref(1, 1, k) + taur * tr2;
811*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 1) = cc_ref(1, 1, k) + tr2;
812*3f1979aaSAndroid Build Coastguard Worker ci3 = taui * (cc_ref(1, 3, k) + cc_ref(1, 3, k));
813*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 2) = cr2 - ci3;
814*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 3) = cr2 + ci3;
815*3f1979aaSAndroid Build Coastguard Worker }
816*3f1979aaSAndroid Build Coastguard Worker if (ido == 1) {
817*3f1979aaSAndroid Build Coastguard Worker return;
818*3f1979aaSAndroid Build Coastguard Worker }
819*3f1979aaSAndroid Build Coastguard Worker idp2 = ido + 2;
820*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
821*3f1979aaSAndroid Build Coastguard Worker for (i = 3; i <= ido; i += 2) {
822*3f1979aaSAndroid Build Coastguard Worker ic = idp2 - i;
823*3f1979aaSAndroid Build Coastguard Worker tr2 = cc_ref(i - 1, 3, k) + cc_ref(ic - 1, 2, k);
824*3f1979aaSAndroid Build Coastguard Worker cr2 = cc_ref(i - 1, 1, k) + taur * tr2;
825*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 1) = cc_ref(i - 1, 1, k) + tr2;
826*3f1979aaSAndroid Build Coastguard Worker ti2 = cc_ref(i, 3, k) - cc_ref(ic, 2, k);
827*3f1979aaSAndroid Build Coastguard Worker ci2 = cc_ref(i, 1, k) + taur * ti2;
828*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 1) = cc_ref(i, 1, k) + ti2;
829*3f1979aaSAndroid Build Coastguard Worker cr3 = taui * (cc_ref(i - 1, 3, k) - cc_ref(ic - 1, 2, k));
830*3f1979aaSAndroid Build Coastguard Worker ci3 = taui * (cc_ref(i, 3, k) + cc_ref(ic, 2, k));
831*3f1979aaSAndroid Build Coastguard Worker dr2 = cr2 - ci3;
832*3f1979aaSAndroid Build Coastguard Worker dr3 = cr2 + ci3;
833*3f1979aaSAndroid Build Coastguard Worker di2 = ci2 + cr3;
834*3f1979aaSAndroid Build Coastguard Worker di3 = ci2 - cr3;
835*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 2) = wa1[i - 2] * dr2 - wa1[i - 1] * di2;
836*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 2) = wa1[i - 2] * di2 + wa1[i - 1] * dr2;
837*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 3) = wa2[i - 2] * dr3 - wa2[i - 1] * di3;
838*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 3) = wa2[i - 2] * di3 + wa2[i - 1] * dr3;
839*3f1979aaSAndroid Build Coastguard Worker }
840*3f1979aaSAndroid Build Coastguard Worker }
841*3f1979aaSAndroid Build Coastguard Worker } /* radb3 */
842*3f1979aaSAndroid Build Coastguard Worker
843*3f1979aaSAndroid Build Coastguard Worker #undef ch_ref
844*3f1979aaSAndroid Build Coastguard Worker #undef cc_ref
845*3f1979aaSAndroid Build Coastguard Worker
846*3f1979aaSAndroid Build Coastguard Worker
radb4(integer ido,integer l1,const real * cc,real * ch,const real * wa1,const real * wa2,const real * wa3)847*3f1979aaSAndroid Build Coastguard Worker static void radb4(integer ido, integer l1, const real *cc, real *ch,
848*3f1979aaSAndroid Build Coastguard Worker const real *wa1, const real *wa2, const real *wa3)
849*3f1979aaSAndroid Build Coastguard Worker {
850*3f1979aaSAndroid Build Coastguard Worker /* Initialized data */
851*3f1979aaSAndroid Build Coastguard Worker
852*3f1979aaSAndroid Build Coastguard Worker static const real sqrt2 = 1.414213562373095f;
853*3f1979aaSAndroid Build Coastguard Worker
854*3f1979aaSAndroid Build Coastguard Worker /* System generated locals */
855*3f1979aaSAndroid Build Coastguard Worker integer cc_offset, ch_offset;
856*3f1979aaSAndroid Build Coastguard Worker
857*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
858*3f1979aaSAndroid Build Coastguard Worker integer i, k, ic;
859*3f1979aaSAndroid Build Coastguard Worker real ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, tr3, tr4;
860*3f1979aaSAndroid Build Coastguard Worker integer idp2;
861*3f1979aaSAndroid Build Coastguard Worker
862*3f1979aaSAndroid Build Coastguard Worker
863*3f1979aaSAndroid Build Coastguard Worker #define cc_ref(a_1,a_2,a_3) cc[((a_3)*4 + (a_2))*ido + a_1]
864*3f1979aaSAndroid Build Coastguard Worker #define ch_ref(a_1,a_2,a_3) ch[((a_3)*l1 + (a_2))*ido + a_1]
865*3f1979aaSAndroid Build Coastguard Worker
866*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
867*3f1979aaSAndroid Build Coastguard Worker ch_offset = 1 + ido * (1 + l1);
868*3f1979aaSAndroid Build Coastguard Worker ch -= ch_offset;
869*3f1979aaSAndroid Build Coastguard Worker cc_offset = 1 + ido * 5;
870*3f1979aaSAndroid Build Coastguard Worker cc -= cc_offset;
871*3f1979aaSAndroid Build Coastguard Worker --wa1;
872*3f1979aaSAndroid Build Coastguard Worker --wa2;
873*3f1979aaSAndroid Build Coastguard Worker --wa3;
874*3f1979aaSAndroid Build Coastguard Worker
875*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
876*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
877*3f1979aaSAndroid Build Coastguard Worker tr1 = cc_ref(1, 1, k) - cc_ref(ido, 4, k);
878*3f1979aaSAndroid Build Coastguard Worker tr2 = cc_ref(1, 1, k) + cc_ref(ido, 4, k);
879*3f1979aaSAndroid Build Coastguard Worker tr3 = cc_ref(ido, 2, k) + cc_ref(ido, 2, k);
880*3f1979aaSAndroid Build Coastguard Worker tr4 = cc_ref(1, 3, k) + cc_ref(1, 3, k);
881*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 1) = tr2 + tr3;
882*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 2) = tr1 - tr4;
883*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 3) = tr2 - tr3;
884*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 4) = tr1 + tr4;
885*3f1979aaSAndroid Build Coastguard Worker }
886*3f1979aaSAndroid Build Coastguard Worker if (ido < 2) return;
887*3f1979aaSAndroid Build Coastguard Worker if (ido != 2) {
888*3f1979aaSAndroid Build Coastguard Worker idp2 = ido + 2;
889*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
890*3f1979aaSAndroid Build Coastguard Worker for (i = 3; i <= ido; i += 2) {
891*3f1979aaSAndroid Build Coastguard Worker ic = idp2 - i;
892*3f1979aaSAndroid Build Coastguard Worker ti1 = cc_ref(i, 1, k) + cc_ref(ic, 4, k);
893*3f1979aaSAndroid Build Coastguard Worker ti2 = cc_ref(i, 1, k) - cc_ref(ic, 4, k);
894*3f1979aaSAndroid Build Coastguard Worker ti3 = cc_ref(i, 3, k) - cc_ref(ic, 2, k);
895*3f1979aaSAndroid Build Coastguard Worker tr4 = cc_ref(i, 3, k) + cc_ref(ic, 2, k);
896*3f1979aaSAndroid Build Coastguard Worker tr1 = cc_ref(i - 1, 1, k) - cc_ref(ic - 1, 4, k);
897*3f1979aaSAndroid Build Coastguard Worker tr2 = cc_ref(i - 1, 1, k) + cc_ref(ic - 1, 4, k);
898*3f1979aaSAndroid Build Coastguard Worker ti4 = cc_ref(i - 1, 3, k) - cc_ref(ic - 1, 2, k);
899*3f1979aaSAndroid Build Coastguard Worker tr3 = cc_ref(i - 1, 3, k) + cc_ref(ic - 1, 2, k);
900*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 1) = tr2 + tr3;
901*3f1979aaSAndroid Build Coastguard Worker cr3 = tr2 - tr3;
902*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 1) = ti2 + ti3;
903*3f1979aaSAndroid Build Coastguard Worker ci3 = ti2 - ti3;
904*3f1979aaSAndroid Build Coastguard Worker cr2 = tr1 - tr4;
905*3f1979aaSAndroid Build Coastguard Worker cr4 = tr1 + tr4;
906*3f1979aaSAndroid Build Coastguard Worker ci2 = ti1 + ti4;
907*3f1979aaSAndroid Build Coastguard Worker ci4 = ti1 - ti4;
908*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 2) = wa1[i - 2] * cr2 - wa1[i - 1] * ci2;
909*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 2) = wa1[i - 2] * ci2 + wa1[i - 1] * cr2;
910*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 3) = wa2[i - 2] * cr3 - wa2[i - 1] * ci3;
911*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 3) = wa2[i - 2] * ci3 + wa2[i - 1] * cr3;
912*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 4) = wa3[i - 2] * cr4 - wa3[i - 1] * ci4;
913*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 4) = wa3[i - 2] * ci4 + wa3[i - 1] * cr4;
914*3f1979aaSAndroid Build Coastguard Worker }
915*3f1979aaSAndroid Build Coastguard Worker }
916*3f1979aaSAndroid Build Coastguard Worker if (ido % 2 == 1) return;
917*3f1979aaSAndroid Build Coastguard Worker }
918*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
919*3f1979aaSAndroid Build Coastguard Worker ti1 = cc_ref(1, 2, k) + cc_ref(1, 4, k);
920*3f1979aaSAndroid Build Coastguard Worker ti2 = cc_ref(1, 4, k) - cc_ref(1, 2, k);
921*3f1979aaSAndroid Build Coastguard Worker tr1 = cc_ref(ido, 1, k) - cc_ref(ido, 3, k);
922*3f1979aaSAndroid Build Coastguard Worker tr2 = cc_ref(ido, 1, k) + cc_ref(ido, 3, k);
923*3f1979aaSAndroid Build Coastguard Worker ch_ref(ido, k, 1) = tr2 + tr2;
924*3f1979aaSAndroid Build Coastguard Worker ch_ref(ido, k, 2) = sqrt2 * (tr1 - ti1);
925*3f1979aaSAndroid Build Coastguard Worker ch_ref(ido, k, 3) = ti2 + ti2;
926*3f1979aaSAndroid Build Coastguard Worker ch_ref(ido, k, 4) = -sqrt2 * (tr1 + ti1);
927*3f1979aaSAndroid Build Coastguard Worker }
928*3f1979aaSAndroid Build Coastguard Worker } /* radb4 */
929*3f1979aaSAndroid Build Coastguard Worker
930*3f1979aaSAndroid Build Coastguard Worker #undef ch_ref
931*3f1979aaSAndroid Build Coastguard Worker #undef cc_ref
932*3f1979aaSAndroid Build Coastguard Worker
933*3f1979aaSAndroid Build Coastguard Worker
radb5(integer ido,integer l1,const real * cc,real * ch,const real * wa1,const real * wa2,const real * wa3,const real * wa4)934*3f1979aaSAndroid Build Coastguard Worker static void radb5(integer ido, integer l1, const real *cc, real *ch,
935*3f1979aaSAndroid Build Coastguard Worker const real *wa1, const real *wa2, const real *wa3, const real *wa4)
936*3f1979aaSAndroid Build Coastguard Worker {
937*3f1979aaSAndroid Build Coastguard Worker /* Initialized data */
938*3f1979aaSAndroid Build Coastguard Worker
939*3f1979aaSAndroid Build Coastguard Worker static const real tr11 = .309016994374947f;
940*3f1979aaSAndroid Build Coastguard Worker static const real ti11 = .951056516295154f;
941*3f1979aaSAndroid Build Coastguard Worker static const real tr12 = -.809016994374947f;
942*3f1979aaSAndroid Build Coastguard Worker static const real ti12 = .587785252292473f;
943*3f1979aaSAndroid Build Coastguard Worker
944*3f1979aaSAndroid Build Coastguard Worker /* System generated locals */
945*3f1979aaSAndroid Build Coastguard Worker integer cc_offset, ch_offset;
946*3f1979aaSAndroid Build Coastguard Worker
947*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
948*3f1979aaSAndroid Build Coastguard Worker integer i, k, ic;
949*3f1979aaSAndroid Build Coastguard Worker real ci2, ci3, ci4, ci5, di3, di4, di5, di2, cr2, cr3, cr5, cr4, ti2, ti3,
950*3f1979aaSAndroid Build Coastguard Worker ti4, ti5, dr3, dr4, dr5, dr2, tr2, tr3, tr4, tr5;
951*3f1979aaSAndroid Build Coastguard Worker integer idp2;
952*3f1979aaSAndroid Build Coastguard Worker
953*3f1979aaSAndroid Build Coastguard Worker
954*3f1979aaSAndroid Build Coastguard Worker #define cc_ref(a_1,a_2,a_3) cc[((a_3)*5 + (a_2))*ido + a_1]
955*3f1979aaSAndroid Build Coastguard Worker #define ch_ref(a_1,a_2,a_3) ch[((a_3)*l1 + (a_2))*ido + a_1]
956*3f1979aaSAndroid Build Coastguard Worker
957*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
958*3f1979aaSAndroid Build Coastguard Worker ch_offset = 1 + ido * (1 + l1);
959*3f1979aaSAndroid Build Coastguard Worker ch -= ch_offset;
960*3f1979aaSAndroid Build Coastguard Worker cc_offset = 1 + ido * 6;
961*3f1979aaSAndroid Build Coastguard Worker cc -= cc_offset;
962*3f1979aaSAndroid Build Coastguard Worker --wa1;
963*3f1979aaSAndroid Build Coastguard Worker --wa2;
964*3f1979aaSAndroid Build Coastguard Worker --wa3;
965*3f1979aaSAndroid Build Coastguard Worker --wa4;
966*3f1979aaSAndroid Build Coastguard Worker
967*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
968*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
969*3f1979aaSAndroid Build Coastguard Worker ti5 = cc_ref(1, 3, k) + cc_ref(1, 3, k);
970*3f1979aaSAndroid Build Coastguard Worker ti4 = cc_ref(1, 5, k) + cc_ref(1, 5, k);
971*3f1979aaSAndroid Build Coastguard Worker tr2 = cc_ref(ido, 2, k) + cc_ref(ido, 2, k);
972*3f1979aaSAndroid Build Coastguard Worker tr3 = cc_ref(ido, 4, k) + cc_ref(ido, 4, k);
973*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 1) = cc_ref(1, 1, k) + tr2 + tr3;
974*3f1979aaSAndroid Build Coastguard Worker cr2 = cc_ref(1, 1, k) + tr11 * tr2 + tr12 * tr3;
975*3f1979aaSAndroid Build Coastguard Worker cr3 = cc_ref(1, 1, k) + tr12 * tr2 + tr11 * tr3;
976*3f1979aaSAndroid Build Coastguard Worker ci5 = ti11 * ti5 + ti12 * ti4;
977*3f1979aaSAndroid Build Coastguard Worker ci4 = ti12 * ti5 - ti11 * ti4;
978*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 2) = cr2 - ci5;
979*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 3) = cr3 - ci4;
980*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 4) = cr3 + ci4;
981*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, 5) = cr2 + ci5;
982*3f1979aaSAndroid Build Coastguard Worker }
983*3f1979aaSAndroid Build Coastguard Worker if (ido == 1) {
984*3f1979aaSAndroid Build Coastguard Worker return;
985*3f1979aaSAndroid Build Coastguard Worker }
986*3f1979aaSAndroid Build Coastguard Worker idp2 = ido + 2;
987*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
988*3f1979aaSAndroid Build Coastguard Worker for (i = 3; i <= ido; i += 2) {
989*3f1979aaSAndroid Build Coastguard Worker ic = idp2 - i;
990*3f1979aaSAndroid Build Coastguard Worker ti5 = cc_ref(i, 3, k) + cc_ref(ic, 2, k);
991*3f1979aaSAndroid Build Coastguard Worker ti2 = cc_ref(i, 3, k) - cc_ref(ic, 2, k);
992*3f1979aaSAndroid Build Coastguard Worker ti4 = cc_ref(i, 5, k) + cc_ref(ic, 4, k);
993*3f1979aaSAndroid Build Coastguard Worker ti3 = cc_ref(i, 5, k) - cc_ref(ic, 4, k);
994*3f1979aaSAndroid Build Coastguard Worker tr5 = cc_ref(i - 1, 3, k) - cc_ref(ic - 1, 2, k);
995*3f1979aaSAndroid Build Coastguard Worker tr2 = cc_ref(i - 1, 3, k) + cc_ref(ic - 1, 2, k);
996*3f1979aaSAndroid Build Coastguard Worker tr4 = cc_ref(i - 1, 5, k) - cc_ref(ic - 1, 4, k);
997*3f1979aaSAndroid Build Coastguard Worker tr3 = cc_ref(i - 1, 5, k) + cc_ref(ic - 1, 4, k);
998*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 1) = cc_ref(i - 1, 1, k) + tr2 + tr3;
999*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 1) = cc_ref(i, 1, k) + ti2 + ti3;
1000*3f1979aaSAndroid Build Coastguard Worker cr2 = cc_ref(i - 1, 1, k) + tr11 * tr2 + tr12 * tr3;
1001*3f1979aaSAndroid Build Coastguard Worker ci2 = cc_ref(i, 1, k) + tr11 * ti2 + tr12 * ti3;
1002*3f1979aaSAndroid Build Coastguard Worker cr3 = cc_ref(i - 1, 1, k) + tr12 * tr2 + tr11 * tr3;
1003*3f1979aaSAndroid Build Coastguard Worker ci3 = cc_ref(i, 1, k) + tr12 * ti2 + tr11 * ti3;
1004*3f1979aaSAndroid Build Coastguard Worker cr5 = ti11 * tr5 + ti12 * tr4;
1005*3f1979aaSAndroid Build Coastguard Worker ci5 = ti11 * ti5 + ti12 * ti4;
1006*3f1979aaSAndroid Build Coastguard Worker cr4 = ti12 * tr5 - ti11 * tr4;
1007*3f1979aaSAndroid Build Coastguard Worker ci4 = ti12 * ti5 - ti11 * ti4;
1008*3f1979aaSAndroid Build Coastguard Worker dr3 = cr3 - ci4;
1009*3f1979aaSAndroid Build Coastguard Worker dr4 = cr3 + ci4;
1010*3f1979aaSAndroid Build Coastguard Worker di3 = ci3 + cr4;
1011*3f1979aaSAndroid Build Coastguard Worker di4 = ci3 - cr4;
1012*3f1979aaSAndroid Build Coastguard Worker dr5 = cr2 + ci5;
1013*3f1979aaSAndroid Build Coastguard Worker dr2 = cr2 - ci5;
1014*3f1979aaSAndroid Build Coastguard Worker di5 = ci2 - cr5;
1015*3f1979aaSAndroid Build Coastguard Worker di2 = ci2 + cr5;
1016*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 2) = wa1[i - 2] * dr2 - wa1[i - 1] * di2;
1017*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 2) = wa1[i - 2] * di2 + wa1[i - 1] * dr2;
1018*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 3) = wa2[i - 2] * dr3 - wa2[i - 1] * di3;
1019*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 3) = wa2[i - 2] * di3 + wa2[i - 1] * dr3;
1020*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 4) = wa3[i - 2] * dr4 - wa3[i - 1] * di4;
1021*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 4) = wa3[i - 2] * di4 + wa3[i - 1] * dr4;
1022*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, 5) = wa4[i - 2] * dr5 - wa4[i - 1] * di5;
1023*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 5) = wa4[i - 2] * di5 + wa4[i - 1] * dr5;
1024*3f1979aaSAndroid Build Coastguard Worker }
1025*3f1979aaSAndroid Build Coastguard Worker }
1026*3f1979aaSAndroid Build Coastguard Worker } /* radb5 */
1027*3f1979aaSAndroid Build Coastguard Worker
1028*3f1979aaSAndroid Build Coastguard Worker #undef ch_ref
1029*3f1979aaSAndroid Build Coastguard Worker #undef cc_ref
1030*3f1979aaSAndroid Build Coastguard Worker
1031*3f1979aaSAndroid Build Coastguard Worker
radbg(integer ido,integer ip,integer l1,integer idl1,const real * cc,real * c1,real * c2,real * ch,real * ch2,const real * wa)1032*3f1979aaSAndroid Build Coastguard Worker static void radbg(integer ido, integer ip, integer l1, integer idl1,
1033*3f1979aaSAndroid Build Coastguard Worker const real *cc, real *c1, real *c2, real *ch, real *ch2, const real *wa)
1034*3f1979aaSAndroid Build Coastguard Worker {
1035*3f1979aaSAndroid Build Coastguard Worker /* System generated locals */
1036*3f1979aaSAndroid Build Coastguard Worker integer ch_offset, cc_offset,
1037*3f1979aaSAndroid Build Coastguard Worker c1_offset, c2_offset, ch2_offset;
1038*3f1979aaSAndroid Build Coastguard Worker
1039*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
1040*3f1979aaSAndroid Build Coastguard Worker integer i, j, k, l, j2, ic, jc, lc, ik, is;
1041*3f1979aaSAndroid Build Coastguard Worker real dc2, ai1, ai2, ar1, ar2, ds2;
1042*3f1979aaSAndroid Build Coastguard Worker integer nbd;
1043*3f1979aaSAndroid Build Coastguard Worker real dcp, arg, dsp, ar1h, ar2h;
1044*3f1979aaSAndroid Build Coastguard Worker integer idp2, ipp2, idij, ipph;
1045*3f1979aaSAndroid Build Coastguard Worker
1046*3f1979aaSAndroid Build Coastguard Worker
1047*3f1979aaSAndroid Build Coastguard Worker #define c1_ref(a_1,a_2,a_3) c1[((a_3)*l1 + (a_2))*ido + a_1]
1048*3f1979aaSAndroid Build Coastguard Worker #define c2_ref(a_1,a_2) c2[(a_2)*idl1 + a_1]
1049*3f1979aaSAndroid Build Coastguard Worker #define cc_ref(a_1,a_2,a_3) cc[((a_3)*ip + (a_2))*ido + a_1]
1050*3f1979aaSAndroid Build Coastguard Worker #define ch_ref(a_1,a_2,a_3) ch[((a_3)*l1 + (a_2))*ido + a_1]
1051*3f1979aaSAndroid Build Coastguard Worker #define ch2_ref(a_1,a_2) ch2[(a_2)*idl1 + a_1]
1052*3f1979aaSAndroid Build Coastguard Worker
1053*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
1054*3f1979aaSAndroid Build Coastguard Worker ch_offset = 1 + ido * (1 + l1);
1055*3f1979aaSAndroid Build Coastguard Worker ch -= ch_offset;
1056*3f1979aaSAndroid Build Coastguard Worker c1_offset = 1 + ido * (1 + l1);
1057*3f1979aaSAndroid Build Coastguard Worker c1 -= c1_offset;
1058*3f1979aaSAndroid Build Coastguard Worker cc_offset = 1 + ido * (1 + ip);
1059*3f1979aaSAndroid Build Coastguard Worker cc -= cc_offset;
1060*3f1979aaSAndroid Build Coastguard Worker ch2_offset = 1 + idl1;
1061*3f1979aaSAndroid Build Coastguard Worker ch2 -= ch2_offset;
1062*3f1979aaSAndroid Build Coastguard Worker c2_offset = 1 + idl1;
1063*3f1979aaSAndroid Build Coastguard Worker c2 -= c2_offset;
1064*3f1979aaSAndroid Build Coastguard Worker --wa;
1065*3f1979aaSAndroid Build Coastguard Worker
1066*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
1067*3f1979aaSAndroid Build Coastguard Worker arg = (2*M_PI) / (real) (ip);
1068*3f1979aaSAndroid Build Coastguard Worker dcp = cos(arg);
1069*3f1979aaSAndroid Build Coastguard Worker dsp = sin(arg);
1070*3f1979aaSAndroid Build Coastguard Worker idp2 = ido + 2;
1071*3f1979aaSAndroid Build Coastguard Worker nbd = (ido - 1) / 2;
1072*3f1979aaSAndroid Build Coastguard Worker ipp2 = ip + 2;
1073*3f1979aaSAndroid Build Coastguard Worker ipph = (ip + 1) / 2;
1074*3f1979aaSAndroid Build Coastguard Worker if (ido >= l1) {
1075*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1076*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= ido; ++i) {
1077*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 1) = cc_ref(i, 1, k);
1078*3f1979aaSAndroid Build Coastguard Worker }
1079*3f1979aaSAndroid Build Coastguard Worker }
1080*3f1979aaSAndroid Build Coastguard Worker } else {
1081*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= ido; ++i) {
1082*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1083*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, 1) = cc_ref(i, 1, k);
1084*3f1979aaSAndroid Build Coastguard Worker }
1085*3f1979aaSAndroid Build Coastguard Worker }
1086*3f1979aaSAndroid Build Coastguard Worker }
1087*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ipph; ++j) {
1088*3f1979aaSAndroid Build Coastguard Worker jc = ipp2 - j;
1089*3f1979aaSAndroid Build Coastguard Worker j2 = j + j;
1090*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1091*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, j) = cc_ref(ido, j2 - 2, k) + cc_ref(ido, j2 - 2, k);
1092*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, jc) = cc_ref(1, j2 - 1, k) + cc_ref(1, j2 - 1, k);
1093*3f1979aaSAndroid Build Coastguard Worker }
1094*3f1979aaSAndroid Build Coastguard Worker }
1095*3f1979aaSAndroid Build Coastguard Worker if (ido != 1) {
1096*3f1979aaSAndroid Build Coastguard Worker if (nbd >= l1) {
1097*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ipph; ++j) {
1098*3f1979aaSAndroid Build Coastguard Worker jc = ipp2 - j;
1099*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1100*3f1979aaSAndroid Build Coastguard Worker for (i = 3; i <= ido; i += 2) {
1101*3f1979aaSAndroid Build Coastguard Worker ic = idp2 - i;
1102*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, j) = cc_ref(i - 1, (j << 1) - 1, k) + cc_ref(ic - 1, (j << 1) - 2, k);
1103*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, jc) = cc_ref(i - 1, (j << 1) - 1, k) - cc_ref(ic - 1, (j << 1) - 2, k);
1104*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, j) = cc_ref(i, (j << 1) - 1, k) - cc_ref(ic, (j << 1) - 2, k);
1105*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, jc) = cc_ref(i, (j << 1) - 1, k) + cc_ref(ic, (j << 1) - 2, k);
1106*3f1979aaSAndroid Build Coastguard Worker }
1107*3f1979aaSAndroid Build Coastguard Worker }
1108*3f1979aaSAndroid Build Coastguard Worker }
1109*3f1979aaSAndroid Build Coastguard Worker } else {
1110*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ipph; ++j) {
1111*3f1979aaSAndroid Build Coastguard Worker jc = ipp2 - j;
1112*3f1979aaSAndroid Build Coastguard Worker for (i = 3; i <= ido; i += 2) {
1113*3f1979aaSAndroid Build Coastguard Worker ic = idp2 - i;
1114*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1115*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, j) = cc_ref(i - 1, (j << 1) - 1, k) + cc_ref(ic - 1, (j << 1) - 2, k);
1116*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, jc) = cc_ref(i - 1, (j << 1) - 1, k) - cc_ref(ic - 1, (j << 1) - 2, k);
1117*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, j) = cc_ref(i, (j << 1) - 1, k) - cc_ref(ic, (j << 1) - 2, k);
1118*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, jc) = cc_ref(i, (j << 1) - 1, k) + cc_ref(ic, (j << 1) - 2, k);
1119*3f1979aaSAndroid Build Coastguard Worker }
1120*3f1979aaSAndroid Build Coastguard Worker }
1121*3f1979aaSAndroid Build Coastguard Worker }
1122*3f1979aaSAndroid Build Coastguard Worker }
1123*3f1979aaSAndroid Build Coastguard Worker }
1124*3f1979aaSAndroid Build Coastguard Worker ar1 = 1.f;
1125*3f1979aaSAndroid Build Coastguard Worker ai1 = 0.f;
1126*3f1979aaSAndroid Build Coastguard Worker for (l = 2; l <= ipph; ++l) {
1127*3f1979aaSAndroid Build Coastguard Worker lc = ipp2 - l;
1128*3f1979aaSAndroid Build Coastguard Worker ar1h = dcp * ar1 - dsp * ai1;
1129*3f1979aaSAndroid Build Coastguard Worker ai1 = dcp * ai1 + dsp * ar1;
1130*3f1979aaSAndroid Build Coastguard Worker ar1 = ar1h;
1131*3f1979aaSAndroid Build Coastguard Worker for (ik = 1; ik <= idl1; ++ik) {
1132*3f1979aaSAndroid Build Coastguard Worker c2_ref(ik, l) = ch2_ref(ik, 1) + ar1 * ch2_ref(ik, 2);
1133*3f1979aaSAndroid Build Coastguard Worker c2_ref(ik, lc) = ai1 * ch2_ref(ik, ip);
1134*3f1979aaSAndroid Build Coastguard Worker }
1135*3f1979aaSAndroid Build Coastguard Worker dc2 = ar1;
1136*3f1979aaSAndroid Build Coastguard Worker ds2 = ai1;
1137*3f1979aaSAndroid Build Coastguard Worker ar2 = ar1;
1138*3f1979aaSAndroid Build Coastguard Worker ai2 = ai1;
1139*3f1979aaSAndroid Build Coastguard Worker for (j = 3; j <= ipph; ++j) {
1140*3f1979aaSAndroid Build Coastguard Worker jc = ipp2 - j;
1141*3f1979aaSAndroid Build Coastguard Worker ar2h = dc2 * ar2 - ds2 * ai2;
1142*3f1979aaSAndroid Build Coastguard Worker ai2 = dc2 * ai2 + ds2 * ar2;
1143*3f1979aaSAndroid Build Coastguard Worker ar2 = ar2h;
1144*3f1979aaSAndroid Build Coastguard Worker for (ik = 1; ik <= idl1; ++ik) {
1145*3f1979aaSAndroid Build Coastguard Worker c2_ref(ik, l) = c2_ref(ik, l) + ar2 * ch2_ref(ik, j);
1146*3f1979aaSAndroid Build Coastguard Worker c2_ref(ik, lc) = c2_ref(ik, lc) + ai2 * ch2_ref(ik, jc);
1147*3f1979aaSAndroid Build Coastguard Worker }
1148*3f1979aaSAndroid Build Coastguard Worker }
1149*3f1979aaSAndroid Build Coastguard Worker }
1150*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ipph; ++j) {
1151*3f1979aaSAndroid Build Coastguard Worker for (ik = 1; ik <= idl1; ++ik) {
1152*3f1979aaSAndroid Build Coastguard Worker ch2_ref(ik, 1) = ch2_ref(ik, 1) + ch2_ref(ik, j);
1153*3f1979aaSAndroid Build Coastguard Worker }
1154*3f1979aaSAndroid Build Coastguard Worker }
1155*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ipph; ++j) {
1156*3f1979aaSAndroid Build Coastguard Worker jc = ipp2 - j;
1157*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1158*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, j) = c1_ref(1, k, j) - c1_ref(1, k, jc);
1159*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, jc) = c1_ref(1, k, j) + c1_ref(1, k, jc);
1160*3f1979aaSAndroid Build Coastguard Worker }
1161*3f1979aaSAndroid Build Coastguard Worker }
1162*3f1979aaSAndroid Build Coastguard Worker if (ido != 1) {
1163*3f1979aaSAndroid Build Coastguard Worker if (nbd >= l1) {
1164*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ipph; ++j) {
1165*3f1979aaSAndroid Build Coastguard Worker jc = ipp2 - j;
1166*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1167*3f1979aaSAndroid Build Coastguard Worker for (i = 3; i <= ido; i += 2) {
1168*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, j) = c1_ref(i - 1, k, j) - c1_ref(i, k, jc);
1169*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, jc) = c1_ref(i - 1, k, j) + c1_ref(i, k, jc);
1170*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, j) = c1_ref(i, k, j) + c1_ref(i - 1, k, jc);
1171*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, jc) = c1_ref(i, k, j) - c1_ref(i - 1, k, jc);
1172*3f1979aaSAndroid Build Coastguard Worker }
1173*3f1979aaSAndroid Build Coastguard Worker }
1174*3f1979aaSAndroid Build Coastguard Worker }
1175*3f1979aaSAndroid Build Coastguard Worker } else {
1176*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ipph; ++j) {
1177*3f1979aaSAndroid Build Coastguard Worker jc = ipp2 - j;
1178*3f1979aaSAndroid Build Coastguard Worker for (i = 3; i <= ido; i += 2) {
1179*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1180*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, j) = c1_ref(i - 1, k, j) - c1_ref(i, k, jc);
1181*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, jc) = c1_ref(i - 1, k, j) + c1_ref(i, k, jc);
1182*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, j) = c1_ref(i, k, j) + c1_ref(i - 1, k, jc);
1183*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, jc) = c1_ref(i, k, j) - c1_ref(i - 1, k, jc);
1184*3f1979aaSAndroid Build Coastguard Worker }
1185*3f1979aaSAndroid Build Coastguard Worker }
1186*3f1979aaSAndroid Build Coastguard Worker }
1187*3f1979aaSAndroid Build Coastguard Worker }
1188*3f1979aaSAndroid Build Coastguard Worker }
1189*3f1979aaSAndroid Build Coastguard Worker if (ido == 1) {
1190*3f1979aaSAndroid Build Coastguard Worker return;
1191*3f1979aaSAndroid Build Coastguard Worker }
1192*3f1979aaSAndroid Build Coastguard Worker for (ik = 1; ik <= idl1; ++ik) {
1193*3f1979aaSAndroid Build Coastguard Worker c2_ref(ik, 1) = ch2_ref(ik, 1);
1194*3f1979aaSAndroid Build Coastguard Worker }
1195*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ip; ++j) {
1196*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1197*3f1979aaSAndroid Build Coastguard Worker c1_ref(1, k, j) = ch_ref(1, k, j);
1198*3f1979aaSAndroid Build Coastguard Worker }
1199*3f1979aaSAndroid Build Coastguard Worker }
1200*3f1979aaSAndroid Build Coastguard Worker if (nbd <= l1) {
1201*3f1979aaSAndroid Build Coastguard Worker is = -(ido);
1202*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ip; ++j) {
1203*3f1979aaSAndroid Build Coastguard Worker is += ido;
1204*3f1979aaSAndroid Build Coastguard Worker idij = is;
1205*3f1979aaSAndroid Build Coastguard Worker for (i = 3; i <= ido; i += 2) {
1206*3f1979aaSAndroid Build Coastguard Worker idij += 2;
1207*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1208*3f1979aaSAndroid Build Coastguard Worker c1_ref(i - 1, k, j) = wa[idij - 1] * ch_ref(i - 1, k, j)
1209*3f1979aaSAndroid Build Coastguard Worker - wa[idij] * ch_ref(i, k, j);
1210*3f1979aaSAndroid Build Coastguard Worker c1_ref(i, k, j) = wa[idij - 1] * ch_ref(i, k, j) + wa[idij] * ch_ref(i - 1, k, j);
1211*3f1979aaSAndroid Build Coastguard Worker }
1212*3f1979aaSAndroid Build Coastguard Worker }
1213*3f1979aaSAndroid Build Coastguard Worker }
1214*3f1979aaSAndroid Build Coastguard Worker } else {
1215*3f1979aaSAndroid Build Coastguard Worker is = -(ido);
1216*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ip; ++j) {
1217*3f1979aaSAndroid Build Coastguard Worker is += ido;
1218*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1219*3f1979aaSAndroid Build Coastguard Worker idij = is;
1220*3f1979aaSAndroid Build Coastguard Worker for (i = 3; i <= ido; i += 2) {
1221*3f1979aaSAndroid Build Coastguard Worker idij += 2;
1222*3f1979aaSAndroid Build Coastguard Worker c1_ref(i - 1, k, j) = wa[idij - 1] * ch_ref(i - 1, k, j)
1223*3f1979aaSAndroid Build Coastguard Worker - wa[idij] * ch_ref(i, k, j);
1224*3f1979aaSAndroid Build Coastguard Worker c1_ref(i, k, j) = wa[idij - 1] * ch_ref(i, k, j) + wa[idij] * ch_ref(i - 1, k, j);
1225*3f1979aaSAndroid Build Coastguard Worker }
1226*3f1979aaSAndroid Build Coastguard Worker }
1227*3f1979aaSAndroid Build Coastguard Worker }
1228*3f1979aaSAndroid Build Coastguard Worker }
1229*3f1979aaSAndroid Build Coastguard Worker } /* radbg */
1230*3f1979aaSAndroid Build Coastguard Worker
1231*3f1979aaSAndroid Build Coastguard Worker #undef ch2_ref
1232*3f1979aaSAndroid Build Coastguard Worker #undef ch_ref
1233*3f1979aaSAndroid Build Coastguard Worker #undef cc_ref
1234*3f1979aaSAndroid Build Coastguard Worker #undef c2_ref
1235*3f1979aaSAndroid Build Coastguard Worker #undef c1_ref
1236*3f1979aaSAndroid Build Coastguard Worker
1237*3f1979aaSAndroid Build Coastguard Worker
radf2(integer ido,integer l1,const real * cc,real * ch,const real * wa1)1238*3f1979aaSAndroid Build Coastguard Worker static void radf2(integer ido, integer l1, const real *cc, real *ch,
1239*3f1979aaSAndroid Build Coastguard Worker const real *wa1)
1240*3f1979aaSAndroid Build Coastguard Worker {
1241*3f1979aaSAndroid Build Coastguard Worker /* System generated locals */
1242*3f1979aaSAndroid Build Coastguard Worker integer ch_offset, cc_offset;
1243*3f1979aaSAndroid Build Coastguard Worker
1244*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
1245*3f1979aaSAndroid Build Coastguard Worker integer i, k, ic;
1246*3f1979aaSAndroid Build Coastguard Worker real ti2, tr2;
1247*3f1979aaSAndroid Build Coastguard Worker integer idp2;
1248*3f1979aaSAndroid Build Coastguard Worker
1249*3f1979aaSAndroid Build Coastguard Worker
1250*3f1979aaSAndroid Build Coastguard Worker #define cc_ref(a_1,a_2,a_3) cc[((a_3)*l1 + (a_2))*ido + a_1]
1251*3f1979aaSAndroid Build Coastguard Worker #define ch_ref(a_1,a_2,a_3) ch[((a_3)*2 + (a_2))*ido + a_1]
1252*3f1979aaSAndroid Build Coastguard Worker
1253*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
1254*3f1979aaSAndroid Build Coastguard Worker ch_offset = 1 + ido * 3;
1255*3f1979aaSAndroid Build Coastguard Worker ch -= ch_offset;
1256*3f1979aaSAndroid Build Coastguard Worker cc_offset = 1 + ido * (1 + l1);
1257*3f1979aaSAndroid Build Coastguard Worker cc -= cc_offset;
1258*3f1979aaSAndroid Build Coastguard Worker --wa1;
1259*3f1979aaSAndroid Build Coastguard Worker
1260*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
1261*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1262*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, 1, k) = cc_ref(1, k, 1) + cc_ref(1, k, 2);
1263*3f1979aaSAndroid Build Coastguard Worker ch_ref(ido, 2, k) = cc_ref(1, k, 1) - cc_ref(1, k, 2);
1264*3f1979aaSAndroid Build Coastguard Worker }
1265*3f1979aaSAndroid Build Coastguard Worker if (ido < 2) return;
1266*3f1979aaSAndroid Build Coastguard Worker if (ido != 2) {
1267*3f1979aaSAndroid Build Coastguard Worker idp2 = ido + 2;
1268*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1269*3f1979aaSAndroid Build Coastguard Worker for (i = 3; i <= ido; i += 2) {
1270*3f1979aaSAndroid Build Coastguard Worker ic = idp2 - i;
1271*3f1979aaSAndroid Build Coastguard Worker tr2 = wa1[i - 2] * cc_ref(i - 1, k, 2) + wa1[i - 1] *
1272*3f1979aaSAndroid Build Coastguard Worker cc_ref(i, k, 2);
1273*3f1979aaSAndroid Build Coastguard Worker ti2 = wa1[i - 2] * cc_ref(i, k, 2) - wa1[i - 1] * cc_ref(
1274*3f1979aaSAndroid Build Coastguard Worker i - 1, k, 2);
1275*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, 1, k) = cc_ref(i, k, 1) + ti2;
1276*3f1979aaSAndroid Build Coastguard Worker ch_ref(ic, 2, k) = ti2 - cc_ref(i, k, 1);
1277*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, 1, k) = cc_ref(i - 1, k, 1) + tr2;
1278*3f1979aaSAndroid Build Coastguard Worker ch_ref(ic - 1, 2, k) = cc_ref(i - 1, k, 1) - tr2;
1279*3f1979aaSAndroid Build Coastguard Worker }
1280*3f1979aaSAndroid Build Coastguard Worker }
1281*3f1979aaSAndroid Build Coastguard Worker if (ido % 2 == 1) {
1282*3f1979aaSAndroid Build Coastguard Worker return;
1283*3f1979aaSAndroid Build Coastguard Worker }
1284*3f1979aaSAndroid Build Coastguard Worker }
1285*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1286*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, 2, k) = -cc_ref(ido, k, 2);
1287*3f1979aaSAndroid Build Coastguard Worker ch_ref(ido, 1, k) = cc_ref(ido, k, 1);
1288*3f1979aaSAndroid Build Coastguard Worker }
1289*3f1979aaSAndroid Build Coastguard Worker } /* radf2 */
1290*3f1979aaSAndroid Build Coastguard Worker
1291*3f1979aaSAndroid Build Coastguard Worker #undef ch_ref
1292*3f1979aaSAndroid Build Coastguard Worker #undef cc_ref
1293*3f1979aaSAndroid Build Coastguard Worker
1294*3f1979aaSAndroid Build Coastguard Worker
radf3(integer ido,integer l1,const real * cc,real * ch,const real * wa1,const real * wa2)1295*3f1979aaSAndroid Build Coastguard Worker static void radf3(integer ido, integer l1, const real *cc, real *ch,
1296*3f1979aaSAndroid Build Coastguard Worker const real *wa1, const real *wa2)
1297*3f1979aaSAndroid Build Coastguard Worker {
1298*3f1979aaSAndroid Build Coastguard Worker static const real taur = -.5f;
1299*3f1979aaSAndroid Build Coastguard Worker static const real taui = .866025403784439f;
1300*3f1979aaSAndroid Build Coastguard Worker
1301*3f1979aaSAndroid Build Coastguard Worker /* System generated locals */
1302*3f1979aaSAndroid Build Coastguard Worker integer ch_offset, cc_offset;
1303*3f1979aaSAndroid Build Coastguard Worker
1304*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
1305*3f1979aaSAndroid Build Coastguard Worker integer i, k, ic;
1306*3f1979aaSAndroid Build Coastguard Worker real ci2, di2, di3, cr2, dr2, dr3, ti2, ti3, tr2, tr3;
1307*3f1979aaSAndroid Build Coastguard Worker integer idp2;
1308*3f1979aaSAndroid Build Coastguard Worker
1309*3f1979aaSAndroid Build Coastguard Worker
1310*3f1979aaSAndroid Build Coastguard Worker #define cc_ref(a_1,a_2,a_3) cc[((a_3)*l1 + (a_2))*ido + a_1]
1311*3f1979aaSAndroid Build Coastguard Worker #define ch_ref(a_1,a_2,a_3) ch[((a_3)*3 + (a_2))*ido + a_1]
1312*3f1979aaSAndroid Build Coastguard Worker
1313*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
1314*3f1979aaSAndroid Build Coastguard Worker ch_offset = 1 + (ido << 2);
1315*3f1979aaSAndroid Build Coastguard Worker ch -= ch_offset;
1316*3f1979aaSAndroid Build Coastguard Worker cc_offset = 1 + ido * (1 + l1);
1317*3f1979aaSAndroid Build Coastguard Worker cc -= cc_offset;
1318*3f1979aaSAndroid Build Coastguard Worker --wa1;
1319*3f1979aaSAndroid Build Coastguard Worker --wa2;
1320*3f1979aaSAndroid Build Coastguard Worker
1321*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
1322*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1323*3f1979aaSAndroid Build Coastguard Worker cr2 = cc_ref(1, k, 2) + cc_ref(1, k, 3);
1324*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, 1, k) = cc_ref(1, k, 1) + cr2;
1325*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, 3, k) = taui * (cc_ref(1, k, 3) - cc_ref(1, k, 2));
1326*3f1979aaSAndroid Build Coastguard Worker ch_ref(ido, 2, k) = cc_ref(1, k, 1) + taur * cr2;
1327*3f1979aaSAndroid Build Coastguard Worker }
1328*3f1979aaSAndroid Build Coastguard Worker if (ido == 1) {
1329*3f1979aaSAndroid Build Coastguard Worker return;
1330*3f1979aaSAndroid Build Coastguard Worker }
1331*3f1979aaSAndroid Build Coastguard Worker idp2 = ido + 2;
1332*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1333*3f1979aaSAndroid Build Coastguard Worker for (i = 3; i <= ido; i += 2) {
1334*3f1979aaSAndroid Build Coastguard Worker ic = idp2 - i;
1335*3f1979aaSAndroid Build Coastguard Worker dr2 = wa1[i - 2] * cc_ref(i - 1, k, 2) + wa1[i - 1] *
1336*3f1979aaSAndroid Build Coastguard Worker cc_ref(i, k, 2);
1337*3f1979aaSAndroid Build Coastguard Worker di2 = wa1[i - 2] * cc_ref(i, k, 2) - wa1[i - 1] * cc_ref(
1338*3f1979aaSAndroid Build Coastguard Worker i - 1, k, 2);
1339*3f1979aaSAndroid Build Coastguard Worker dr3 = wa2[i - 2] * cc_ref(i - 1, k, 3) + wa2[i - 1] *
1340*3f1979aaSAndroid Build Coastguard Worker cc_ref(i, k, 3);
1341*3f1979aaSAndroid Build Coastguard Worker di3 = wa2[i - 2] * cc_ref(i, k, 3) - wa2[i - 1] * cc_ref(
1342*3f1979aaSAndroid Build Coastguard Worker i - 1, k, 3);
1343*3f1979aaSAndroid Build Coastguard Worker cr2 = dr2 + dr3;
1344*3f1979aaSAndroid Build Coastguard Worker ci2 = di2 + di3;
1345*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, 1, k) = cc_ref(i - 1, k, 1) + cr2;
1346*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, 1, k) = cc_ref(i, k, 1) + ci2;
1347*3f1979aaSAndroid Build Coastguard Worker tr2 = cc_ref(i - 1, k, 1) + taur * cr2;
1348*3f1979aaSAndroid Build Coastguard Worker ti2 = cc_ref(i, k, 1) + taur * ci2;
1349*3f1979aaSAndroid Build Coastguard Worker tr3 = taui * (di2 - di3);
1350*3f1979aaSAndroid Build Coastguard Worker ti3 = taui * (dr3 - dr2);
1351*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, 3, k) = tr2 + tr3;
1352*3f1979aaSAndroid Build Coastguard Worker ch_ref(ic - 1, 2, k) = tr2 - tr3;
1353*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, 3, k) = ti2 + ti3;
1354*3f1979aaSAndroid Build Coastguard Worker ch_ref(ic, 2, k) = ti3 - ti2;
1355*3f1979aaSAndroid Build Coastguard Worker }
1356*3f1979aaSAndroid Build Coastguard Worker }
1357*3f1979aaSAndroid Build Coastguard Worker } /* radf3 */
1358*3f1979aaSAndroid Build Coastguard Worker
1359*3f1979aaSAndroid Build Coastguard Worker #undef ch_ref
1360*3f1979aaSAndroid Build Coastguard Worker #undef cc_ref
1361*3f1979aaSAndroid Build Coastguard Worker
1362*3f1979aaSAndroid Build Coastguard Worker
radf4(integer ido,integer l1,const real * cc,real * ch,const real * wa1,const real * wa2,const real * wa3)1363*3f1979aaSAndroid Build Coastguard Worker static void radf4(integer ido, integer l1, const real *cc, real *ch,
1364*3f1979aaSAndroid Build Coastguard Worker const real *wa1, const real *wa2, const real *wa3)
1365*3f1979aaSAndroid Build Coastguard Worker {
1366*3f1979aaSAndroid Build Coastguard Worker /* Initialized data */
1367*3f1979aaSAndroid Build Coastguard Worker
1368*3f1979aaSAndroid Build Coastguard Worker static const real hsqt2 = .7071067811865475f;
1369*3f1979aaSAndroid Build Coastguard Worker
1370*3f1979aaSAndroid Build Coastguard Worker /* System generated locals */
1371*3f1979aaSAndroid Build Coastguard Worker integer cc_offset, ch_offset;
1372*3f1979aaSAndroid Build Coastguard Worker
1373*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
1374*3f1979aaSAndroid Build Coastguard Worker integer i, k, ic;
1375*3f1979aaSAndroid Build Coastguard Worker real ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, tr3, tr4;
1376*3f1979aaSAndroid Build Coastguard Worker integer idp2;
1377*3f1979aaSAndroid Build Coastguard Worker
1378*3f1979aaSAndroid Build Coastguard Worker
1379*3f1979aaSAndroid Build Coastguard Worker #define cc_ref(a_1,a_2,a_3) cc[((a_3)*l1 + (a_2))*ido + a_1]
1380*3f1979aaSAndroid Build Coastguard Worker #define ch_ref(a_1,a_2,a_3) ch[((a_3)*4 + (a_2))*ido + a_1]
1381*3f1979aaSAndroid Build Coastguard Worker
1382*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
1383*3f1979aaSAndroid Build Coastguard Worker ch_offset = 1 + ido * 5;
1384*3f1979aaSAndroid Build Coastguard Worker ch -= ch_offset;
1385*3f1979aaSAndroid Build Coastguard Worker cc_offset = 1 + ido * (1 + l1);
1386*3f1979aaSAndroid Build Coastguard Worker cc -= cc_offset;
1387*3f1979aaSAndroid Build Coastguard Worker --wa1;
1388*3f1979aaSAndroid Build Coastguard Worker --wa2;
1389*3f1979aaSAndroid Build Coastguard Worker --wa3;
1390*3f1979aaSAndroid Build Coastguard Worker
1391*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
1392*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1393*3f1979aaSAndroid Build Coastguard Worker tr1 = cc_ref(1, k, 2) + cc_ref(1, k, 4);
1394*3f1979aaSAndroid Build Coastguard Worker tr2 = cc_ref(1, k, 1) + cc_ref(1, k, 3);
1395*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, 1, k) = tr1 + tr2;
1396*3f1979aaSAndroid Build Coastguard Worker ch_ref(ido, 4, k) = tr2 - tr1;
1397*3f1979aaSAndroid Build Coastguard Worker ch_ref(ido, 2, k) = cc_ref(1, k, 1) - cc_ref(1, k, 3);
1398*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, 3, k) = cc_ref(1, k, 4) - cc_ref(1, k, 2);
1399*3f1979aaSAndroid Build Coastguard Worker }
1400*3f1979aaSAndroid Build Coastguard Worker if (ido < 2) return;
1401*3f1979aaSAndroid Build Coastguard Worker if (ido != 2) {
1402*3f1979aaSAndroid Build Coastguard Worker idp2 = ido + 2;
1403*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1404*3f1979aaSAndroid Build Coastguard Worker for (i = 3; i <= ido; i += 2) {
1405*3f1979aaSAndroid Build Coastguard Worker ic = idp2 - i;
1406*3f1979aaSAndroid Build Coastguard Worker cr2 = wa1[i - 2] * cc_ref(i - 1, k, 2) + wa1[i - 1] *
1407*3f1979aaSAndroid Build Coastguard Worker cc_ref(i, k, 2);
1408*3f1979aaSAndroid Build Coastguard Worker ci2 = wa1[i - 2] * cc_ref(i, k, 2) - wa1[i - 1] * cc_ref(
1409*3f1979aaSAndroid Build Coastguard Worker i - 1, k, 2);
1410*3f1979aaSAndroid Build Coastguard Worker cr3 = wa2[i - 2] * cc_ref(i - 1, k, 3) + wa2[i - 1] *
1411*3f1979aaSAndroid Build Coastguard Worker cc_ref(i, k, 3);
1412*3f1979aaSAndroid Build Coastguard Worker ci3 = wa2[i - 2] * cc_ref(i, k, 3) - wa2[i - 1] * cc_ref(
1413*3f1979aaSAndroid Build Coastguard Worker i - 1, k, 3);
1414*3f1979aaSAndroid Build Coastguard Worker cr4 = wa3[i - 2] * cc_ref(i - 1, k, 4) + wa3[i - 1] *
1415*3f1979aaSAndroid Build Coastguard Worker cc_ref(i, k, 4);
1416*3f1979aaSAndroid Build Coastguard Worker ci4 = wa3[i - 2] * cc_ref(i, k, 4) - wa3[i - 1] * cc_ref(
1417*3f1979aaSAndroid Build Coastguard Worker i - 1, k, 4);
1418*3f1979aaSAndroid Build Coastguard Worker tr1 = cr2 + cr4;
1419*3f1979aaSAndroid Build Coastguard Worker tr4 = cr4 - cr2;
1420*3f1979aaSAndroid Build Coastguard Worker ti1 = ci2 + ci4;
1421*3f1979aaSAndroid Build Coastguard Worker ti4 = ci2 - ci4;
1422*3f1979aaSAndroid Build Coastguard Worker ti2 = cc_ref(i, k, 1) + ci3;
1423*3f1979aaSAndroid Build Coastguard Worker ti3 = cc_ref(i, k, 1) - ci3;
1424*3f1979aaSAndroid Build Coastguard Worker tr2 = cc_ref(i - 1, k, 1) + cr3;
1425*3f1979aaSAndroid Build Coastguard Worker tr3 = cc_ref(i - 1, k, 1) - cr3;
1426*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, 1, k) = tr1 + tr2;
1427*3f1979aaSAndroid Build Coastguard Worker ch_ref(ic - 1, 4, k) = tr2 - tr1;
1428*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, 1, k) = ti1 + ti2;
1429*3f1979aaSAndroid Build Coastguard Worker ch_ref(ic, 4, k) = ti1 - ti2;
1430*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, 3, k) = ti4 + tr3;
1431*3f1979aaSAndroid Build Coastguard Worker ch_ref(ic - 1, 2, k) = tr3 - ti4;
1432*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, 3, k) = tr4 + ti3;
1433*3f1979aaSAndroid Build Coastguard Worker ch_ref(ic, 2, k) = tr4 - ti3;
1434*3f1979aaSAndroid Build Coastguard Worker }
1435*3f1979aaSAndroid Build Coastguard Worker }
1436*3f1979aaSAndroid Build Coastguard Worker if (ido % 2 == 1) {
1437*3f1979aaSAndroid Build Coastguard Worker return;
1438*3f1979aaSAndroid Build Coastguard Worker }
1439*3f1979aaSAndroid Build Coastguard Worker }
1440*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1441*3f1979aaSAndroid Build Coastguard Worker ti1 = -hsqt2 * (cc_ref(ido, k, 2) + cc_ref(ido, k, 4));
1442*3f1979aaSAndroid Build Coastguard Worker tr1 = hsqt2 * (cc_ref(ido, k, 2) - cc_ref(ido, k, 4));
1443*3f1979aaSAndroid Build Coastguard Worker ch_ref(ido, 1, k) = tr1 + cc_ref(ido, k, 1);
1444*3f1979aaSAndroid Build Coastguard Worker ch_ref(ido, 3, k) = cc_ref(ido, k, 1) - tr1;
1445*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, 2, k) = ti1 - cc_ref(ido, k, 3);
1446*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, 4, k) = ti1 + cc_ref(ido, k, 3);
1447*3f1979aaSAndroid Build Coastguard Worker }
1448*3f1979aaSAndroid Build Coastguard Worker } /* radf4 */
1449*3f1979aaSAndroid Build Coastguard Worker
1450*3f1979aaSAndroid Build Coastguard Worker #undef ch_ref
1451*3f1979aaSAndroid Build Coastguard Worker #undef cc_ref
1452*3f1979aaSAndroid Build Coastguard Worker
1453*3f1979aaSAndroid Build Coastguard Worker
radf5(integer ido,integer l1,const real * cc,real * ch,const real * wa1,const real * wa2,const real * wa3,const real * wa4)1454*3f1979aaSAndroid Build Coastguard Worker static void radf5(integer ido, integer l1, const real *cc, real *ch,
1455*3f1979aaSAndroid Build Coastguard Worker const real *wa1, const real *wa2, const real *wa3, const real *wa4)
1456*3f1979aaSAndroid Build Coastguard Worker {
1457*3f1979aaSAndroid Build Coastguard Worker /* Initialized data */
1458*3f1979aaSAndroid Build Coastguard Worker
1459*3f1979aaSAndroid Build Coastguard Worker static const real tr11 = .309016994374947f;
1460*3f1979aaSAndroid Build Coastguard Worker static const real ti11 = .951056516295154f;
1461*3f1979aaSAndroid Build Coastguard Worker static const real tr12 = -.809016994374947f;
1462*3f1979aaSAndroid Build Coastguard Worker static const real ti12 = .587785252292473f;
1463*3f1979aaSAndroid Build Coastguard Worker
1464*3f1979aaSAndroid Build Coastguard Worker /* System generated locals */
1465*3f1979aaSAndroid Build Coastguard Worker integer cc_offset, ch_offset;
1466*3f1979aaSAndroid Build Coastguard Worker
1467*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
1468*3f1979aaSAndroid Build Coastguard Worker integer i, k, ic;
1469*3f1979aaSAndroid Build Coastguard Worker real ci2, di2, ci4, ci5, di3, di4, di5, ci3, cr2, cr3, dr2, dr3, dr4, dr5,
1470*3f1979aaSAndroid Build Coastguard Worker cr5, cr4, ti2, ti3, ti5, ti4, tr2, tr3, tr4, tr5;
1471*3f1979aaSAndroid Build Coastguard Worker integer idp2;
1472*3f1979aaSAndroid Build Coastguard Worker
1473*3f1979aaSAndroid Build Coastguard Worker
1474*3f1979aaSAndroid Build Coastguard Worker #define cc_ref(a_1,a_2,a_3) cc[((a_3)*l1 + (a_2))*ido + a_1]
1475*3f1979aaSAndroid Build Coastguard Worker #define ch_ref(a_1,a_2,a_3) ch[((a_3)*5 + (a_2))*ido + a_1]
1476*3f1979aaSAndroid Build Coastguard Worker
1477*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
1478*3f1979aaSAndroid Build Coastguard Worker ch_offset = 1 + ido * 6;
1479*3f1979aaSAndroid Build Coastguard Worker ch -= ch_offset;
1480*3f1979aaSAndroid Build Coastguard Worker cc_offset = 1 + ido * (1 + l1);
1481*3f1979aaSAndroid Build Coastguard Worker cc -= cc_offset;
1482*3f1979aaSAndroid Build Coastguard Worker --wa1;
1483*3f1979aaSAndroid Build Coastguard Worker --wa2;
1484*3f1979aaSAndroid Build Coastguard Worker --wa3;
1485*3f1979aaSAndroid Build Coastguard Worker --wa4;
1486*3f1979aaSAndroid Build Coastguard Worker
1487*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
1488*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1489*3f1979aaSAndroid Build Coastguard Worker cr2 = cc_ref(1, k, 5) + cc_ref(1, k, 2);
1490*3f1979aaSAndroid Build Coastguard Worker ci5 = cc_ref(1, k, 5) - cc_ref(1, k, 2);
1491*3f1979aaSAndroid Build Coastguard Worker cr3 = cc_ref(1, k, 4) + cc_ref(1, k, 3);
1492*3f1979aaSAndroid Build Coastguard Worker ci4 = cc_ref(1, k, 4) - cc_ref(1, k, 3);
1493*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, 1, k) = cc_ref(1, k, 1) + cr2 + cr3;
1494*3f1979aaSAndroid Build Coastguard Worker ch_ref(ido, 2, k) = cc_ref(1, k, 1) + tr11 * cr2 + tr12 * cr3;
1495*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, 3, k) = ti11 * ci5 + ti12 * ci4;
1496*3f1979aaSAndroid Build Coastguard Worker ch_ref(ido, 4, k) = cc_ref(1, k, 1) + tr12 * cr2 + tr11 * cr3;
1497*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, 5, k) = ti12 * ci5 - ti11 * ci4;
1498*3f1979aaSAndroid Build Coastguard Worker }
1499*3f1979aaSAndroid Build Coastguard Worker if (ido == 1) {
1500*3f1979aaSAndroid Build Coastguard Worker return;
1501*3f1979aaSAndroid Build Coastguard Worker }
1502*3f1979aaSAndroid Build Coastguard Worker idp2 = ido + 2;
1503*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1504*3f1979aaSAndroid Build Coastguard Worker for (i = 3; i <= ido; i += 2) {
1505*3f1979aaSAndroid Build Coastguard Worker ic = idp2 - i;
1506*3f1979aaSAndroid Build Coastguard Worker dr2 = wa1[i - 2] * cc_ref(i - 1, k, 2) + wa1[i - 1] * cc_ref(i, k, 2);
1507*3f1979aaSAndroid Build Coastguard Worker di2 = wa1[i - 2] * cc_ref(i, k, 2) - wa1[i - 1] * cc_ref(i - 1, k, 2);
1508*3f1979aaSAndroid Build Coastguard Worker dr3 = wa2[i - 2] * cc_ref(i - 1, k, 3) + wa2[i - 1] * cc_ref(i, k, 3);
1509*3f1979aaSAndroid Build Coastguard Worker di3 = wa2[i - 2] * cc_ref(i, k, 3) - wa2[i - 1] * cc_ref(i - 1, k, 3);
1510*3f1979aaSAndroid Build Coastguard Worker dr4 = wa3[i - 2] * cc_ref(i - 1, k, 4) + wa3[i - 1] * cc_ref(i, k, 4);
1511*3f1979aaSAndroid Build Coastguard Worker di4 = wa3[i - 2] * cc_ref(i, k, 4) - wa3[i - 1] * cc_ref(i - 1, k, 4);
1512*3f1979aaSAndroid Build Coastguard Worker dr5 = wa4[i - 2] * cc_ref(i - 1, k, 5) + wa4[i - 1] * cc_ref(i, k, 5);
1513*3f1979aaSAndroid Build Coastguard Worker di5 = wa4[i - 2] * cc_ref(i, k, 5) - wa4[i - 1] * cc_ref(i - 1, k, 5);
1514*3f1979aaSAndroid Build Coastguard Worker cr2 = dr2 + dr5;
1515*3f1979aaSAndroid Build Coastguard Worker ci5 = dr5 - dr2;
1516*3f1979aaSAndroid Build Coastguard Worker cr5 = di2 - di5;
1517*3f1979aaSAndroid Build Coastguard Worker ci2 = di2 + di5;
1518*3f1979aaSAndroid Build Coastguard Worker cr3 = dr3 + dr4;
1519*3f1979aaSAndroid Build Coastguard Worker ci4 = dr4 - dr3;
1520*3f1979aaSAndroid Build Coastguard Worker cr4 = di3 - di4;
1521*3f1979aaSAndroid Build Coastguard Worker ci3 = di3 + di4;
1522*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, 1, k) = cc_ref(i - 1, k, 1) + cr2 + cr3;
1523*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, 1, k) = cc_ref(i, k, 1) + ci2 + ci3;
1524*3f1979aaSAndroid Build Coastguard Worker tr2 = cc_ref(i - 1, k, 1) + tr11 * cr2 + tr12 * cr3;
1525*3f1979aaSAndroid Build Coastguard Worker ti2 = cc_ref(i, k, 1) + tr11 * ci2 + tr12 * ci3;
1526*3f1979aaSAndroid Build Coastguard Worker tr3 = cc_ref(i - 1, k, 1) + tr12 * cr2 + tr11 * cr3;
1527*3f1979aaSAndroid Build Coastguard Worker ti3 = cc_ref(i, k, 1) + tr12 * ci2 + tr11 * ci3;
1528*3f1979aaSAndroid Build Coastguard Worker tr5 = ti11 * cr5 + ti12 * cr4;
1529*3f1979aaSAndroid Build Coastguard Worker ti5 = ti11 * ci5 + ti12 * ci4;
1530*3f1979aaSAndroid Build Coastguard Worker tr4 = ti12 * cr5 - ti11 * cr4;
1531*3f1979aaSAndroid Build Coastguard Worker ti4 = ti12 * ci5 - ti11 * ci4;
1532*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, 3, k) = tr2 + tr5;
1533*3f1979aaSAndroid Build Coastguard Worker ch_ref(ic - 1, 2, k) = tr2 - tr5;
1534*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, 3, k) = ti2 + ti5;
1535*3f1979aaSAndroid Build Coastguard Worker ch_ref(ic, 2, k) = ti5 - ti2;
1536*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, 5, k) = tr3 + tr4;
1537*3f1979aaSAndroid Build Coastguard Worker ch_ref(ic - 1, 4, k) = tr3 - tr4;
1538*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, 5, k) = ti3 + ti4;
1539*3f1979aaSAndroid Build Coastguard Worker ch_ref(ic, 4, k) = ti4 - ti3;
1540*3f1979aaSAndroid Build Coastguard Worker }
1541*3f1979aaSAndroid Build Coastguard Worker }
1542*3f1979aaSAndroid Build Coastguard Worker } /* radf5 */
1543*3f1979aaSAndroid Build Coastguard Worker
1544*3f1979aaSAndroid Build Coastguard Worker #undef ch_ref
1545*3f1979aaSAndroid Build Coastguard Worker #undef cc_ref
1546*3f1979aaSAndroid Build Coastguard Worker
1547*3f1979aaSAndroid Build Coastguard Worker
radfg(integer ido,integer ip,integer l1,integer idl1,real * cc,real * c1,real * c2,real * ch,real * ch2,const real * wa)1548*3f1979aaSAndroid Build Coastguard Worker static void radfg(integer ido, integer ip, integer l1, integer idl1,
1549*3f1979aaSAndroid Build Coastguard Worker real *cc, real *c1, real *c2, real *ch, real *ch2, const real *wa)
1550*3f1979aaSAndroid Build Coastguard Worker {
1551*3f1979aaSAndroid Build Coastguard Worker /* System generated locals */
1552*3f1979aaSAndroid Build Coastguard Worker integer ch_offset, cc_offset,
1553*3f1979aaSAndroid Build Coastguard Worker c1_offset, c2_offset, ch2_offset;
1554*3f1979aaSAndroid Build Coastguard Worker
1555*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
1556*3f1979aaSAndroid Build Coastguard Worker integer i, j, k, l, j2, ic, jc, lc, ik, is;
1557*3f1979aaSAndroid Build Coastguard Worker real dc2, ai1, ai2, ar1, ar2, ds2;
1558*3f1979aaSAndroid Build Coastguard Worker integer nbd;
1559*3f1979aaSAndroid Build Coastguard Worker real dcp, arg, dsp, ar1h, ar2h;
1560*3f1979aaSAndroid Build Coastguard Worker integer idp2, ipp2, idij, ipph;
1561*3f1979aaSAndroid Build Coastguard Worker
1562*3f1979aaSAndroid Build Coastguard Worker
1563*3f1979aaSAndroid Build Coastguard Worker #define c1_ref(a_1,a_2,a_3) c1[((a_3)*l1 + (a_2))*ido + a_1]
1564*3f1979aaSAndroid Build Coastguard Worker #define c2_ref(a_1,a_2) c2[(a_2)*idl1 + a_1]
1565*3f1979aaSAndroid Build Coastguard Worker #define cc_ref(a_1,a_2,a_3) cc[((a_3)*ip + (a_2))*ido + a_1]
1566*3f1979aaSAndroid Build Coastguard Worker #define ch_ref(a_1,a_2,a_3) ch[((a_3)*l1 + (a_2))*ido + a_1]
1567*3f1979aaSAndroid Build Coastguard Worker #define ch2_ref(a_1,a_2) ch2[(a_2)*idl1 + a_1]
1568*3f1979aaSAndroid Build Coastguard Worker
1569*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
1570*3f1979aaSAndroid Build Coastguard Worker ch_offset = 1 + ido * (1 + l1);
1571*3f1979aaSAndroid Build Coastguard Worker ch -= ch_offset;
1572*3f1979aaSAndroid Build Coastguard Worker c1_offset = 1 + ido * (1 + l1);
1573*3f1979aaSAndroid Build Coastguard Worker c1 -= c1_offset;
1574*3f1979aaSAndroid Build Coastguard Worker cc_offset = 1 + ido * (1 + ip);
1575*3f1979aaSAndroid Build Coastguard Worker cc -= cc_offset;
1576*3f1979aaSAndroid Build Coastguard Worker ch2_offset = 1 + idl1;
1577*3f1979aaSAndroid Build Coastguard Worker ch2 -= ch2_offset;
1578*3f1979aaSAndroid Build Coastguard Worker c2_offset = 1 + idl1;
1579*3f1979aaSAndroid Build Coastguard Worker c2 -= c2_offset;
1580*3f1979aaSAndroid Build Coastguard Worker --wa;
1581*3f1979aaSAndroid Build Coastguard Worker
1582*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
1583*3f1979aaSAndroid Build Coastguard Worker arg = (2*M_PI) / (real) (ip);
1584*3f1979aaSAndroid Build Coastguard Worker dcp = cos(arg);
1585*3f1979aaSAndroid Build Coastguard Worker dsp = sin(arg);
1586*3f1979aaSAndroid Build Coastguard Worker ipph = (ip + 1) / 2;
1587*3f1979aaSAndroid Build Coastguard Worker ipp2 = ip + 2;
1588*3f1979aaSAndroid Build Coastguard Worker idp2 = ido + 2;
1589*3f1979aaSAndroid Build Coastguard Worker nbd = (ido - 1) / 2;
1590*3f1979aaSAndroid Build Coastguard Worker if (ido == 1) {
1591*3f1979aaSAndroid Build Coastguard Worker for (ik = 1; ik <= idl1; ++ik) {
1592*3f1979aaSAndroid Build Coastguard Worker c2_ref(ik, 1) = ch2_ref(ik, 1);
1593*3f1979aaSAndroid Build Coastguard Worker }
1594*3f1979aaSAndroid Build Coastguard Worker } else {
1595*3f1979aaSAndroid Build Coastguard Worker for (ik = 1; ik <= idl1; ++ik) {
1596*3f1979aaSAndroid Build Coastguard Worker ch2_ref(ik, 1) = c2_ref(ik, 1);
1597*3f1979aaSAndroid Build Coastguard Worker }
1598*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ip; ++j) {
1599*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1600*3f1979aaSAndroid Build Coastguard Worker ch_ref(1, k, j) = c1_ref(1, k, j);
1601*3f1979aaSAndroid Build Coastguard Worker }
1602*3f1979aaSAndroid Build Coastguard Worker }
1603*3f1979aaSAndroid Build Coastguard Worker if (nbd <= l1) {
1604*3f1979aaSAndroid Build Coastguard Worker is = -(ido);
1605*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ip; ++j) {
1606*3f1979aaSAndroid Build Coastguard Worker is += ido;
1607*3f1979aaSAndroid Build Coastguard Worker idij = is;
1608*3f1979aaSAndroid Build Coastguard Worker for (i = 3; i <= ido; i += 2) {
1609*3f1979aaSAndroid Build Coastguard Worker idij += 2;
1610*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1611*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, j) = wa[idij - 1] * c1_ref(i - 1, k, j)
1612*3f1979aaSAndroid Build Coastguard Worker + wa[idij] * c1_ref(i, k, j);
1613*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, j) = wa[idij - 1] * c1_ref(i, k, j) - wa[
1614*3f1979aaSAndroid Build Coastguard Worker idij] * c1_ref(i - 1, k, j);
1615*3f1979aaSAndroid Build Coastguard Worker }
1616*3f1979aaSAndroid Build Coastguard Worker }
1617*3f1979aaSAndroid Build Coastguard Worker }
1618*3f1979aaSAndroid Build Coastguard Worker } else {
1619*3f1979aaSAndroid Build Coastguard Worker is = -(ido);
1620*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ip; ++j) {
1621*3f1979aaSAndroid Build Coastguard Worker is += ido;
1622*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1623*3f1979aaSAndroid Build Coastguard Worker idij = is;
1624*3f1979aaSAndroid Build Coastguard Worker for (i = 3; i <= ido; i += 2) {
1625*3f1979aaSAndroid Build Coastguard Worker idij += 2;
1626*3f1979aaSAndroid Build Coastguard Worker ch_ref(i - 1, k, j) = wa[idij - 1] * c1_ref(i - 1, k, j)
1627*3f1979aaSAndroid Build Coastguard Worker + wa[idij] * c1_ref(i, k, j);
1628*3f1979aaSAndroid Build Coastguard Worker ch_ref(i, k, j) = wa[idij - 1] * c1_ref(i, k, j) - wa[
1629*3f1979aaSAndroid Build Coastguard Worker idij] * c1_ref(i - 1, k, j);
1630*3f1979aaSAndroid Build Coastguard Worker }
1631*3f1979aaSAndroid Build Coastguard Worker }
1632*3f1979aaSAndroid Build Coastguard Worker }
1633*3f1979aaSAndroid Build Coastguard Worker }
1634*3f1979aaSAndroid Build Coastguard Worker if (nbd >= l1) {
1635*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ipph; ++j) {
1636*3f1979aaSAndroid Build Coastguard Worker jc = ipp2 - j;
1637*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1638*3f1979aaSAndroid Build Coastguard Worker for (i = 3; i <= ido; i += 2) {
1639*3f1979aaSAndroid Build Coastguard Worker c1_ref(i - 1, k, j) = ch_ref(i - 1, k, j) + ch_ref(i -
1640*3f1979aaSAndroid Build Coastguard Worker 1, k, jc);
1641*3f1979aaSAndroid Build Coastguard Worker c1_ref(i - 1, k, jc) = ch_ref(i, k, j) - ch_ref(i, k,
1642*3f1979aaSAndroid Build Coastguard Worker jc);
1643*3f1979aaSAndroid Build Coastguard Worker c1_ref(i, k, j) = ch_ref(i, k, j) + ch_ref(i, k, jc);
1644*3f1979aaSAndroid Build Coastguard Worker c1_ref(i, k, jc) = ch_ref(i - 1, k, jc) - ch_ref(i - 1,
1645*3f1979aaSAndroid Build Coastguard Worker k, j);
1646*3f1979aaSAndroid Build Coastguard Worker }
1647*3f1979aaSAndroid Build Coastguard Worker }
1648*3f1979aaSAndroid Build Coastguard Worker }
1649*3f1979aaSAndroid Build Coastguard Worker } else {
1650*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ipph; ++j) {
1651*3f1979aaSAndroid Build Coastguard Worker jc = ipp2 - j;
1652*3f1979aaSAndroid Build Coastguard Worker for (i = 3; i <= ido; i += 2) {
1653*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1654*3f1979aaSAndroid Build Coastguard Worker c1_ref(i - 1, k, j) = ch_ref(i - 1, k, j) + ch_ref(i -
1655*3f1979aaSAndroid Build Coastguard Worker 1, k, jc);
1656*3f1979aaSAndroid Build Coastguard Worker c1_ref(i - 1, k, jc) = ch_ref(i, k, j) - ch_ref(i, k,
1657*3f1979aaSAndroid Build Coastguard Worker jc);
1658*3f1979aaSAndroid Build Coastguard Worker c1_ref(i, k, j) = ch_ref(i, k, j) + ch_ref(i, k, jc);
1659*3f1979aaSAndroid Build Coastguard Worker c1_ref(i, k, jc) = ch_ref(i - 1, k, jc) - ch_ref(i - 1,
1660*3f1979aaSAndroid Build Coastguard Worker k, j);
1661*3f1979aaSAndroid Build Coastguard Worker }
1662*3f1979aaSAndroid Build Coastguard Worker }
1663*3f1979aaSAndroid Build Coastguard Worker }
1664*3f1979aaSAndroid Build Coastguard Worker }
1665*3f1979aaSAndroid Build Coastguard Worker }
1666*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ipph; ++j) {
1667*3f1979aaSAndroid Build Coastguard Worker jc = ipp2 - j;
1668*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1669*3f1979aaSAndroid Build Coastguard Worker c1_ref(1, k, j) = ch_ref(1, k, j) + ch_ref(1, k, jc);
1670*3f1979aaSAndroid Build Coastguard Worker c1_ref(1, k, jc) = ch_ref(1, k, jc) - ch_ref(1, k, j);
1671*3f1979aaSAndroid Build Coastguard Worker }
1672*3f1979aaSAndroid Build Coastguard Worker }
1673*3f1979aaSAndroid Build Coastguard Worker
1674*3f1979aaSAndroid Build Coastguard Worker ar1 = 1.f;
1675*3f1979aaSAndroid Build Coastguard Worker ai1 = 0.f;
1676*3f1979aaSAndroid Build Coastguard Worker for (l = 2; l <= ipph; ++l) {
1677*3f1979aaSAndroid Build Coastguard Worker lc = ipp2 - l;
1678*3f1979aaSAndroid Build Coastguard Worker ar1h = dcp * ar1 - dsp * ai1;
1679*3f1979aaSAndroid Build Coastguard Worker ai1 = dcp * ai1 + dsp * ar1;
1680*3f1979aaSAndroid Build Coastguard Worker ar1 = ar1h;
1681*3f1979aaSAndroid Build Coastguard Worker for (ik = 1; ik <= idl1; ++ik) {
1682*3f1979aaSAndroid Build Coastguard Worker ch2_ref(ik, l) = c2_ref(ik, 1) + ar1 * c2_ref(ik, 2);
1683*3f1979aaSAndroid Build Coastguard Worker ch2_ref(ik, lc) = ai1 * c2_ref(ik, ip);
1684*3f1979aaSAndroid Build Coastguard Worker }
1685*3f1979aaSAndroid Build Coastguard Worker dc2 = ar1;
1686*3f1979aaSAndroid Build Coastguard Worker ds2 = ai1;
1687*3f1979aaSAndroid Build Coastguard Worker ar2 = ar1;
1688*3f1979aaSAndroid Build Coastguard Worker ai2 = ai1;
1689*3f1979aaSAndroid Build Coastguard Worker for (j = 3; j <= ipph; ++j) {
1690*3f1979aaSAndroid Build Coastguard Worker jc = ipp2 - j;
1691*3f1979aaSAndroid Build Coastguard Worker ar2h = dc2 * ar2 - ds2 * ai2;
1692*3f1979aaSAndroid Build Coastguard Worker ai2 = dc2 * ai2 + ds2 * ar2;
1693*3f1979aaSAndroid Build Coastguard Worker ar2 = ar2h;
1694*3f1979aaSAndroid Build Coastguard Worker for (ik = 1; ik <= idl1; ++ik) {
1695*3f1979aaSAndroid Build Coastguard Worker ch2_ref(ik, l) = ch2_ref(ik, l) + ar2 * c2_ref(ik, j);
1696*3f1979aaSAndroid Build Coastguard Worker ch2_ref(ik, lc) = ch2_ref(ik, lc) + ai2 * c2_ref(ik, jc);
1697*3f1979aaSAndroid Build Coastguard Worker }
1698*3f1979aaSAndroid Build Coastguard Worker }
1699*3f1979aaSAndroid Build Coastguard Worker }
1700*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ipph; ++j) {
1701*3f1979aaSAndroid Build Coastguard Worker for (ik = 1; ik <= idl1; ++ik) {
1702*3f1979aaSAndroid Build Coastguard Worker ch2_ref(ik, 1) = ch2_ref(ik, 1) + c2_ref(ik, j);
1703*3f1979aaSAndroid Build Coastguard Worker }
1704*3f1979aaSAndroid Build Coastguard Worker }
1705*3f1979aaSAndroid Build Coastguard Worker
1706*3f1979aaSAndroid Build Coastguard Worker if (ido >= l1) {
1707*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1708*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= ido; ++i) {
1709*3f1979aaSAndroid Build Coastguard Worker cc_ref(i, 1, k) = ch_ref(i, k, 1);
1710*3f1979aaSAndroid Build Coastguard Worker }
1711*3f1979aaSAndroid Build Coastguard Worker }
1712*3f1979aaSAndroid Build Coastguard Worker } else {
1713*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= ido; ++i) {
1714*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1715*3f1979aaSAndroid Build Coastguard Worker cc_ref(i, 1, k) = ch_ref(i, k, 1);
1716*3f1979aaSAndroid Build Coastguard Worker }
1717*3f1979aaSAndroid Build Coastguard Worker }
1718*3f1979aaSAndroid Build Coastguard Worker }
1719*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ipph; ++j) {
1720*3f1979aaSAndroid Build Coastguard Worker jc = ipp2 - j;
1721*3f1979aaSAndroid Build Coastguard Worker j2 = j + j;
1722*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1723*3f1979aaSAndroid Build Coastguard Worker cc_ref(ido, j2 - 2, k) = ch_ref(1, k, j);
1724*3f1979aaSAndroid Build Coastguard Worker cc_ref(1, j2 - 1, k) = ch_ref(1, k, jc);
1725*3f1979aaSAndroid Build Coastguard Worker }
1726*3f1979aaSAndroid Build Coastguard Worker }
1727*3f1979aaSAndroid Build Coastguard Worker if (ido == 1) {
1728*3f1979aaSAndroid Build Coastguard Worker return;
1729*3f1979aaSAndroid Build Coastguard Worker }
1730*3f1979aaSAndroid Build Coastguard Worker if (nbd >= l1) {
1731*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ipph; ++j) {
1732*3f1979aaSAndroid Build Coastguard Worker jc = ipp2 - j;
1733*3f1979aaSAndroid Build Coastguard Worker j2 = j + j;
1734*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1735*3f1979aaSAndroid Build Coastguard Worker for (i = 3; i <= ido; i += 2) {
1736*3f1979aaSAndroid Build Coastguard Worker ic = idp2 - i;
1737*3f1979aaSAndroid Build Coastguard Worker cc_ref(i - 1, j2 - 1, k) = ch_ref(i - 1, k, j) + ch_ref(
1738*3f1979aaSAndroid Build Coastguard Worker i - 1, k, jc);
1739*3f1979aaSAndroid Build Coastguard Worker cc_ref(ic - 1, j2 - 2, k) = ch_ref(i - 1, k, j) - ch_ref(
1740*3f1979aaSAndroid Build Coastguard Worker i - 1, k, jc);
1741*3f1979aaSAndroid Build Coastguard Worker cc_ref(i, j2 - 1, k) = ch_ref(i, k, j) + ch_ref(i, k,
1742*3f1979aaSAndroid Build Coastguard Worker jc);
1743*3f1979aaSAndroid Build Coastguard Worker cc_ref(ic, j2 - 2, k) = ch_ref(i, k, jc) - ch_ref(i, k, j)
1744*3f1979aaSAndroid Build Coastguard Worker ;
1745*3f1979aaSAndroid Build Coastguard Worker }
1746*3f1979aaSAndroid Build Coastguard Worker }
1747*3f1979aaSAndroid Build Coastguard Worker }
1748*3f1979aaSAndroid Build Coastguard Worker } else {
1749*3f1979aaSAndroid Build Coastguard Worker for (j = 2; j <= ipph; ++j) {
1750*3f1979aaSAndroid Build Coastguard Worker jc = ipp2 - j;
1751*3f1979aaSAndroid Build Coastguard Worker j2 = j + j;
1752*3f1979aaSAndroid Build Coastguard Worker for (i = 3; i <= ido; i += 2) {
1753*3f1979aaSAndroid Build Coastguard Worker ic = idp2 - i;
1754*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= l1; ++k) {
1755*3f1979aaSAndroid Build Coastguard Worker cc_ref(i - 1, j2 - 1, k) = ch_ref(i - 1, k, j) + ch_ref(
1756*3f1979aaSAndroid Build Coastguard Worker i - 1, k, jc);
1757*3f1979aaSAndroid Build Coastguard Worker cc_ref(ic - 1, j2 - 2, k) = ch_ref(i - 1, k, j) - ch_ref(
1758*3f1979aaSAndroid Build Coastguard Worker i - 1, k, jc);
1759*3f1979aaSAndroid Build Coastguard Worker cc_ref(i, j2 - 1, k) = ch_ref(i, k, j) + ch_ref(i, k,
1760*3f1979aaSAndroid Build Coastguard Worker jc);
1761*3f1979aaSAndroid Build Coastguard Worker cc_ref(ic, j2 - 2, k) = ch_ref(i, k, jc) - ch_ref(i, k, j)
1762*3f1979aaSAndroid Build Coastguard Worker ;
1763*3f1979aaSAndroid Build Coastguard Worker }
1764*3f1979aaSAndroid Build Coastguard Worker }
1765*3f1979aaSAndroid Build Coastguard Worker }
1766*3f1979aaSAndroid Build Coastguard Worker }
1767*3f1979aaSAndroid Build Coastguard Worker } /* radfg */
1768*3f1979aaSAndroid Build Coastguard Worker
1769*3f1979aaSAndroid Build Coastguard Worker #undef ch2_ref
1770*3f1979aaSAndroid Build Coastguard Worker #undef ch_ref
1771*3f1979aaSAndroid Build Coastguard Worker #undef cc_ref
1772*3f1979aaSAndroid Build Coastguard Worker #undef c2_ref
1773*3f1979aaSAndroid Build Coastguard Worker #undef c1_ref
1774*3f1979aaSAndroid Build Coastguard Worker
1775*3f1979aaSAndroid Build Coastguard Worker
cfftb1(integer n,real * c,real * ch,const real * wa,integer * ifac)1776*3f1979aaSAndroid Build Coastguard Worker static void cfftb1(integer n, real *c, real *ch, const real *wa, integer *ifac)
1777*3f1979aaSAndroid Build Coastguard Worker {
1778*3f1979aaSAndroid Build Coastguard Worker integer i, k1, l1, l2, na, nf, ip, iw, ix2, ix3, ix4, nac, ido,
1779*3f1979aaSAndroid Build Coastguard Worker idl1, idot;
1780*3f1979aaSAndroid Build Coastguard Worker
1781*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
1782*3f1979aaSAndroid Build Coastguard Worker nf = ifac[1];
1783*3f1979aaSAndroid Build Coastguard Worker na = 0;
1784*3f1979aaSAndroid Build Coastguard Worker l1 = 1;
1785*3f1979aaSAndroid Build Coastguard Worker iw = 0;
1786*3f1979aaSAndroid Build Coastguard Worker for (k1 = 1; k1 <= nf; ++k1) {
1787*3f1979aaSAndroid Build Coastguard Worker ip = ifac[k1 + 1];
1788*3f1979aaSAndroid Build Coastguard Worker l2 = ip * l1;
1789*3f1979aaSAndroid Build Coastguard Worker ido = n / l2;
1790*3f1979aaSAndroid Build Coastguard Worker idot = ido + ido;
1791*3f1979aaSAndroid Build Coastguard Worker idl1 = idot * l1;
1792*3f1979aaSAndroid Build Coastguard Worker switch (ip) {
1793*3f1979aaSAndroid Build Coastguard Worker case 4:
1794*3f1979aaSAndroid Build Coastguard Worker ix2 = iw + idot;
1795*3f1979aaSAndroid Build Coastguard Worker ix3 = ix2 + idot;
1796*3f1979aaSAndroid Build Coastguard Worker passb4(idot, l1, na?ch:c, na?c:ch, &wa[iw], &wa[ix2], &wa[ix3]);
1797*3f1979aaSAndroid Build Coastguard Worker na = 1 - na;
1798*3f1979aaSAndroid Build Coastguard Worker break;
1799*3f1979aaSAndroid Build Coastguard Worker case 2:
1800*3f1979aaSAndroid Build Coastguard Worker passb2(idot, l1, na?ch:c, na?c:ch, &wa[iw]);
1801*3f1979aaSAndroid Build Coastguard Worker na = 1 - na;
1802*3f1979aaSAndroid Build Coastguard Worker break;
1803*3f1979aaSAndroid Build Coastguard Worker case 3:
1804*3f1979aaSAndroid Build Coastguard Worker ix2 = iw + idot;
1805*3f1979aaSAndroid Build Coastguard Worker passb3(idot, l1, na?ch:c, na?c:ch, &wa[iw], &wa[ix2]);
1806*3f1979aaSAndroid Build Coastguard Worker na = 1 - na;
1807*3f1979aaSAndroid Build Coastguard Worker break;
1808*3f1979aaSAndroid Build Coastguard Worker case 5:
1809*3f1979aaSAndroid Build Coastguard Worker ix2 = iw + idot;
1810*3f1979aaSAndroid Build Coastguard Worker ix3 = ix2 + idot;
1811*3f1979aaSAndroid Build Coastguard Worker ix4 = ix3 + idot;
1812*3f1979aaSAndroid Build Coastguard Worker passfb5(idot, l1, na?ch:c, na?c:ch, &wa[iw], &wa[ix2], &wa[ix3], &wa[ix4], +1);
1813*3f1979aaSAndroid Build Coastguard Worker na = 1 - na;
1814*3f1979aaSAndroid Build Coastguard Worker break;
1815*3f1979aaSAndroid Build Coastguard Worker default:
1816*3f1979aaSAndroid Build Coastguard Worker if (na == 0) {
1817*3f1979aaSAndroid Build Coastguard Worker passfb(&nac, idot, ip, l1, idl1, c, c, c, ch, ch, &wa[iw], +1);
1818*3f1979aaSAndroid Build Coastguard Worker } else {
1819*3f1979aaSAndroid Build Coastguard Worker passfb(&nac, idot, ip, l1, idl1, ch, ch, ch, c, c, &wa[iw], +1);
1820*3f1979aaSAndroid Build Coastguard Worker }
1821*3f1979aaSAndroid Build Coastguard Worker if (nac != 0) {
1822*3f1979aaSAndroid Build Coastguard Worker na = 1 - na;
1823*3f1979aaSAndroid Build Coastguard Worker }
1824*3f1979aaSAndroid Build Coastguard Worker break;
1825*3f1979aaSAndroid Build Coastguard Worker }
1826*3f1979aaSAndroid Build Coastguard Worker l1 = l2;
1827*3f1979aaSAndroid Build Coastguard Worker iw += (ip - 1) * idot;
1828*3f1979aaSAndroid Build Coastguard Worker }
1829*3f1979aaSAndroid Build Coastguard Worker if (na == 0) {
1830*3f1979aaSAndroid Build Coastguard Worker return;
1831*3f1979aaSAndroid Build Coastguard Worker }
1832*3f1979aaSAndroid Build Coastguard Worker for (i = 0; i < 2*n; ++i) {
1833*3f1979aaSAndroid Build Coastguard Worker c[i] = ch[i];
1834*3f1979aaSAndroid Build Coastguard Worker }
1835*3f1979aaSAndroid Build Coastguard Worker } /* cfftb1 */
1836*3f1979aaSAndroid Build Coastguard Worker
cfftb(integer n,real * c,real * wsave)1837*3f1979aaSAndroid Build Coastguard Worker void cfftb(integer n, real *c, real *wsave)
1838*3f1979aaSAndroid Build Coastguard Worker {
1839*3f1979aaSAndroid Build Coastguard Worker integer iw1, iw2;
1840*3f1979aaSAndroid Build Coastguard Worker
1841*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
1842*3f1979aaSAndroid Build Coastguard Worker --wsave;
1843*3f1979aaSAndroid Build Coastguard Worker --c;
1844*3f1979aaSAndroid Build Coastguard Worker
1845*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
1846*3f1979aaSAndroid Build Coastguard Worker if (n == 1) {
1847*3f1979aaSAndroid Build Coastguard Worker return;
1848*3f1979aaSAndroid Build Coastguard Worker }
1849*3f1979aaSAndroid Build Coastguard Worker iw1 = 2*n + 1;
1850*3f1979aaSAndroid Build Coastguard Worker iw2 = iw1 + 2*n;
1851*3f1979aaSAndroid Build Coastguard Worker cfftb1(n, &c[1], &wsave[1], &wsave[iw1], (int*)&wsave[iw2]);
1852*3f1979aaSAndroid Build Coastguard Worker } /* cfftb */
1853*3f1979aaSAndroid Build Coastguard Worker
cfftf1(integer n,real * c,real * ch,const real * wa,integer * ifac)1854*3f1979aaSAndroid Build Coastguard Worker static void cfftf1(integer n, real *c, real *ch, const real *wa, integer *ifac)
1855*3f1979aaSAndroid Build Coastguard Worker {
1856*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
1857*3f1979aaSAndroid Build Coastguard Worker integer i, k1, l1, l2, na, nf, ip, iw, ix2, ix3, ix4, nac, ido,
1858*3f1979aaSAndroid Build Coastguard Worker idl1, idot;
1859*3f1979aaSAndroid Build Coastguard Worker
1860*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
1861*3f1979aaSAndroid Build Coastguard Worker nf = ifac[1];
1862*3f1979aaSAndroid Build Coastguard Worker na = 0;
1863*3f1979aaSAndroid Build Coastguard Worker l1 = 1;
1864*3f1979aaSAndroid Build Coastguard Worker iw = 0;
1865*3f1979aaSAndroid Build Coastguard Worker for (k1 = 1; k1 <= nf; ++k1) {
1866*3f1979aaSAndroid Build Coastguard Worker ip = ifac[k1 + 1];
1867*3f1979aaSAndroid Build Coastguard Worker l2 = ip * l1;
1868*3f1979aaSAndroid Build Coastguard Worker ido = n / l2;
1869*3f1979aaSAndroid Build Coastguard Worker idot = ido + ido;
1870*3f1979aaSAndroid Build Coastguard Worker idl1 = idot * l1;
1871*3f1979aaSAndroid Build Coastguard Worker switch (ip) {
1872*3f1979aaSAndroid Build Coastguard Worker case 4:
1873*3f1979aaSAndroid Build Coastguard Worker ix2 = iw + idot;
1874*3f1979aaSAndroid Build Coastguard Worker ix3 = ix2 + idot;
1875*3f1979aaSAndroid Build Coastguard Worker passf4(idot, l1, na?ch:c, na?c:ch, &wa[iw], &wa[ix2], &wa[ix3]);
1876*3f1979aaSAndroid Build Coastguard Worker na = 1 - na;
1877*3f1979aaSAndroid Build Coastguard Worker break;
1878*3f1979aaSAndroid Build Coastguard Worker case 2:
1879*3f1979aaSAndroid Build Coastguard Worker passf2(idot, l1, na?ch:c, na?c:ch, &wa[iw]);
1880*3f1979aaSAndroid Build Coastguard Worker na = 1 - na;
1881*3f1979aaSAndroid Build Coastguard Worker break;
1882*3f1979aaSAndroid Build Coastguard Worker case 3:
1883*3f1979aaSAndroid Build Coastguard Worker ix2 = iw + idot;
1884*3f1979aaSAndroid Build Coastguard Worker passf3(idot, l1, na?ch:c, na?c:ch, &wa[iw], &wa[ix2]);
1885*3f1979aaSAndroid Build Coastguard Worker na = 1 - na;
1886*3f1979aaSAndroid Build Coastguard Worker break;
1887*3f1979aaSAndroid Build Coastguard Worker case 5:
1888*3f1979aaSAndroid Build Coastguard Worker ix2 = iw + idot;
1889*3f1979aaSAndroid Build Coastguard Worker ix3 = ix2 + idot;
1890*3f1979aaSAndroid Build Coastguard Worker ix4 = ix3 + idot;
1891*3f1979aaSAndroid Build Coastguard Worker passfb5(idot, l1, na?ch:c, na?c:ch, &wa[iw], &wa[ix2], &wa[ix3], &wa[ix4], -1);
1892*3f1979aaSAndroid Build Coastguard Worker na = 1 - na;
1893*3f1979aaSAndroid Build Coastguard Worker break;
1894*3f1979aaSAndroid Build Coastguard Worker default:
1895*3f1979aaSAndroid Build Coastguard Worker if (na == 0) {
1896*3f1979aaSAndroid Build Coastguard Worker passfb(&nac, idot, ip, l1, idl1, c, c, c, ch, ch, &wa[iw], -1);
1897*3f1979aaSAndroid Build Coastguard Worker } else {
1898*3f1979aaSAndroid Build Coastguard Worker passfb(&nac, idot, ip, l1, idl1, ch, ch, ch, c, c, &wa[iw], -1);
1899*3f1979aaSAndroid Build Coastguard Worker }
1900*3f1979aaSAndroid Build Coastguard Worker if (nac != 0) {
1901*3f1979aaSAndroid Build Coastguard Worker na = 1 - na;
1902*3f1979aaSAndroid Build Coastguard Worker }
1903*3f1979aaSAndroid Build Coastguard Worker break;
1904*3f1979aaSAndroid Build Coastguard Worker }
1905*3f1979aaSAndroid Build Coastguard Worker l1 = l2;
1906*3f1979aaSAndroid Build Coastguard Worker iw += (ip - 1)*idot;
1907*3f1979aaSAndroid Build Coastguard Worker }
1908*3f1979aaSAndroid Build Coastguard Worker if (na == 0) {
1909*3f1979aaSAndroid Build Coastguard Worker return;
1910*3f1979aaSAndroid Build Coastguard Worker }
1911*3f1979aaSAndroid Build Coastguard Worker for (i = 0; i < 2*n; ++i) {
1912*3f1979aaSAndroid Build Coastguard Worker c[i] = ch[i];
1913*3f1979aaSAndroid Build Coastguard Worker }
1914*3f1979aaSAndroid Build Coastguard Worker } /* cfftf1 */
1915*3f1979aaSAndroid Build Coastguard Worker
cfftf(integer n,real * c,real * wsave)1916*3f1979aaSAndroid Build Coastguard Worker void cfftf(integer n, real *c, real *wsave)
1917*3f1979aaSAndroid Build Coastguard Worker {
1918*3f1979aaSAndroid Build Coastguard Worker integer iw1, iw2;
1919*3f1979aaSAndroid Build Coastguard Worker
1920*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
1921*3f1979aaSAndroid Build Coastguard Worker --wsave;
1922*3f1979aaSAndroid Build Coastguard Worker --c;
1923*3f1979aaSAndroid Build Coastguard Worker
1924*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
1925*3f1979aaSAndroid Build Coastguard Worker if (n == 1) {
1926*3f1979aaSAndroid Build Coastguard Worker return;
1927*3f1979aaSAndroid Build Coastguard Worker }
1928*3f1979aaSAndroid Build Coastguard Worker iw1 = 2*n + 1;
1929*3f1979aaSAndroid Build Coastguard Worker iw2 = iw1 + 2*n;
1930*3f1979aaSAndroid Build Coastguard Worker cfftf1(n, &c[1], &wsave[1], &wsave[iw1], (int*)&wsave[iw2]);
1931*3f1979aaSAndroid Build Coastguard Worker } /* cfftf */
1932*3f1979aaSAndroid Build Coastguard Worker
decompose(integer n,integer * ifac,integer ntryh[4])1933*3f1979aaSAndroid Build Coastguard Worker static int decompose(integer n, integer *ifac, integer ntryh[4]) {
1934*3f1979aaSAndroid Build Coastguard Worker integer ntry=0, nl = n, nf = 0, nq, nr, i, j = 0;
1935*3f1979aaSAndroid Build Coastguard Worker do {
1936*3f1979aaSAndroid Build Coastguard Worker if (j < 4) {
1937*3f1979aaSAndroid Build Coastguard Worker ntry = ntryh[j];
1938*3f1979aaSAndroid Build Coastguard Worker } else {
1939*3f1979aaSAndroid Build Coastguard Worker ntry += 2;
1940*3f1979aaSAndroid Build Coastguard Worker }
1941*3f1979aaSAndroid Build Coastguard Worker ++j;
1942*3f1979aaSAndroid Build Coastguard Worker L104:
1943*3f1979aaSAndroid Build Coastguard Worker nq = nl / ntry;
1944*3f1979aaSAndroid Build Coastguard Worker nr = nl - ntry * nq;
1945*3f1979aaSAndroid Build Coastguard Worker if (nr != 0) continue;
1946*3f1979aaSAndroid Build Coastguard Worker ++nf;
1947*3f1979aaSAndroid Build Coastguard Worker ifac[nf + 2] = ntry;
1948*3f1979aaSAndroid Build Coastguard Worker nl = nq;
1949*3f1979aaSAndroid Build Coastguard Worker if (ntry == 2 && nf != 1) {
1950*3f1979aaSAndroid Build Coastguard Worker for (i = 2; i <= nf; ++i) {
1951*3f1979aaSAndroid Build Coastguard Worker integer ib = nf - i + 2;
1952*3f1979aaSAndroid Build Coastguard Worker ifac[ib + 2] = ifac[ib + 1];
1953*3f1979aaSAndroid Build Coastguard Worker }
1954*3f1979aaSAndroid Build Coastguard Worker ifac[3] = 2;
1955*3f1979aaSAndroid Build Coastguard Worker }
1956*3f1979aaSAndroid Build Coastguard Worker if (nl != 1) {
1957*3f1979aaSAndroid Build Coastguard Worker goto L104;
1958*3f1979aaSAndroid Build Coastguard Worker }
1959*3f1979aaSAndroid Build Coastguard Worker } while (nl != 1);
1960*3f1979aaSAndroid Build Coastguard Worker ifac[1] = n;
1961*3f1979aaSAndroid Build Coastguard Worker ifac[2] = nf;
1962*3f1979aaSAndroid Build Coastguard Worker return nf;
1963*3f1979aaSAndroid Build Coastguard Worker }
1964*3f1979aaSAndroid Build Coastguard Worker
cffti1(integer n,real * wa,integer * ifac)1965*3f1979aaSAndroid Build Coastguard Worker static void cffti1(integer n, real *wa, integer *ifac)
1966*3f1979aaSAndroid Build Coastguard Worker {
1967*3f1979aaSAndroid Build Coastguard Worker static integer ntryh[4] = { 3,4,2,5 };
1968*3f1979aaSAndroid Build Coastguard Worker
1969*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
1970*3f1979aaSAndroid Build Coastguard Worker integer i, j, i1, k1, l1, l2;
1971*3f1979aaSAndroid Build Coastguard Worker real fi;
1972*3f1979aaSAndroid Build Coastguard Worker integer ld, ii, nf, ip;
1973*3f1979aaSAndroid Build Coastguard Worker real arg;
1974*3f1979aaSAndroid Build Coastguard Worker integer ido, ipm;
1975*3f1979aaSAndroid Build Coastguard Worker real argh;
1976*3f1979aaSAndroid Build Coastguard Worker integer idot;
1977*3f1979aaSAndroid Build Coastguard Worker real argld;
1978*3f1979aaSAndroid Build Coastguard Worker
1979*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
1980*3f1979aaSAndroid Build Coastguard Worker --ifac;
1981*3f1979aaSAndroid Build Coastguard Worker --wa;
1982*3f1979aaSAndroid Build Coastguard Worker
1983*3f1979aaSAndroid Build Coastguard Worker nf = decompose(n, ifac, ntryh);
1984*3f1979aaSAndroid Build Coastguard Worker
1985*3f1979aaSAndroid Build Coastguard Worker argh = (2*M_PI) / (real) (n);
1986*3f1979aaSAndroid Build Coastguard Worker i = 2;
1987*3f1979aaSAndroid Build Coastguard Worker l1 = 1;
1988*3f1979aaSAndroid Build Coastguard Worker for (k1 = 1; k1 <= nf; ++k1) {
1989*3f1979aaSAndroid Build Coastguard Worker ip = ifac[k1 + 2];
1990*3f1979aaSAndroid Build Coastguard Worker ld = 0;
1991*3f1979aaSAndroid Build Coastguard Worker l2 = l1 * ip;
1992*3f1979aaSAndroid Build Coastguard Worker ido = n / l2;
1993*3f1979aaSAndroid Build Coastguard Worker idot = ido + ido + 2;
1994*3f1979aaSAndroid Build Coastguard Worker ipm = ip - 1;
1995*3f1979aaSAndroid Build Coastguard Worker for (j = 1; j <= ipm; ++j) {
1996*3f1979aaSAndroid Build Coastguard Worker i1 = i;
1997*3f1979aaSAndroid Build Coastguard Worker wa[i - 1] = 1.f;
1998*3f1979aaSAndroid Build Coastguard Worker wa[i] = 0.f;
1999*3f1979aaSAndroid Build Coastguard Worker ld += l1;
2000*3f1979aaSAndroid Build Coastguard Worker fi = 0.f;
2001*3f1979aaSAndroid Build Coastguard Worker argld = (real) ld * argh;
2002*3f1979aaSAndroid Build Coastguard Worker for (ii = 4; ii <= idot; ii += 2) {
2003*3f1979aaSAndroid Build Coastguard Worker i += 2;
2004*3f1979aaSAndroid Build Coastguard Worker fi += 1.f;
2005*3f1979aaSAndroid Build Coastguard Worker arg = fi * argld;
2006*3f1979aaSAndroid Build Coastguard Worker wa[i - 1] = cos(arg);
2007*3f1979aaSAndroid Build Coastguard Worker wa[i] = sin(arg);
2008*3f1979aaSAndroid Build Coastguard Worker }
2009*3f1979aaSAndroid Build Coastguard Worker if (ip > 5) {
2010*3f1979aaSAndroid Build Coastguard Worker wa[i1 - 1] = wa[i - 1];
2011*3f1979aaSAndroid Build Coastguard Worker wa[i1] = wa[i];
2012*3f1979aaSAndroid Build Coastguard Worker };
2013*3f1979aaSAndroid Build Coastguard Worker }
2014*3f1979aaSAndroid Build Coastguard Worker l1 = l2;
2015*3f1979aaSAndroid Build Coastguard Worker }
2016*3f1979aaSAndroid Build Coastguard Worker } /* cffti1 */
2017*3f1979aaSAndroid Build Coastguard Worker
cffti(integer n,real * wsave)2018*3f1979aaSAndroid Build Coastguard Worker void cffti(integer n, real *wsave)
2019*3f1979aaSAndroid Build Coastguard Worker {
2020*3f1979aaSAndroid Build Coastguard Worker integer iw1, iw2;
2021*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
2022*3f1979aaSAndroid Build Coastguard Worker --wsave;
2023*3f1979aaSAndroid Build Coastguard Worker
2024*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
2025*3f1979aaSAndroid Build Coastguard Worker if (n == 1) {
2026*3f1979aaSAndroid Build Coastguard Worker return;
2027*3f1979aaSAndroid Build Coastguard Worker }
2028*3f1979aaSAndroid Build Coastguard Worker iw1 = 2*n + 1;
2029*3f1979aaSAndroid Build Coastguard Worker iw2 = iw1 + 2*n;
2030*3f1979aaSAndroid Build Coastguard Worker cffti1(n, &wsave[iw1], (int*)&wsave[iw2]);
2031*3f1979aaSAndroid Build Coastguard Worker return;
2032*3f1979aaSAndroid Build Coastguard Worker } /* cffti */
2033*3f1979aaSAndroid Build Coastguard Worker
rfftb1(integer n,real * c,real * ch,const real * wa,integer * ifac)2034*3f1979aaSAndroid Build Coastguard Worker static void rfftb1(integer n, real *c, real *ch, const real *wa, integer *ifac)
2035*3f1979aaSAndroid Build Coastguard Worker {
2036*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
2037*3f1979aaSAndroid Build Coastguard Worker integer i, k1, l1, l2, na, nf, ip, iw, ix2, ix3, ix4, ido, idl1;
2038*3f1979aaSAndroid Build Coastguard Worker
2039*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
2040*3f1979aaSAndroid Build Coastguard Worker nf = ifac[1];
2041*3f1979aaSAndroid Build Coastguard Worker na = 0;
2042*3f1979aaSAndroid Build Coastguard Worker l1 = 1;
2043*3f1979aaSAndroid Build Coastguard Worker iw = 0;
2044*3f1979aaSAndroid Build Coastguard Worker for (k1 = 1; k1 <= nf; ++k1) {
2045*3f1979aaSAndroid Build Coastguard Worker ip = ifac[k1 + 1];
2046*3f1979aaSAndroid Build Coastguard Worker l2 = ip * l1;
2047*3f1979aaSAndroid Build Coastguard Worker ido = n / l2;
2048*3f1979aaSAndroid Build Coastguard Worker idl1 = ido * l1;
2049*3f1979aaSAndroid Build Coastguard Worker switch (ip) {
2050*3f1979aaSAndroid Build Coastguard Worker case 4:
2051*3f1979aaSAndroid Build Coastguard Worker ix2 = iw + ido;
2052*3f1979aaSAndroid Build Coastguard Worker ix3 = ix2 + ido;
2053*3f1979aaSAndroid Build Coastguard Worker radb4(ido, l1, na?ch:c, na?c:ch, &wa[iw], &wa[ix2], &wa[ix3]);
2054*3f1979aaSAndroid Build Coastguard Worker na = 1 - na;
2055*3f1979aaSAndroid Build Coastguard Worker break;
2056*3f1979aaSAndroid Build Coastguard Worker case 2:
2057*3f1979aaSAndroid Build Coastguard Worker radb2(ido, l1, na?ch:c, na?c:ch, &wa[iw]);
2058*3f1979aaSAndroid Build Coastguard Worker na = 1 - na;
2059*3f1979aaSAndroid Build Coastguard Worker break;
2060*3f1979aaSAndroid Build Coastguard Worker case 3:
2061*3f1979aaSAndroid Build Coastguard Worker ix2 = iw + ido;
2062*3f1979aaSAndroid Build Coastguard Worker radb3(ido, l1, na?ch:c, na?c:ch, &wa[iw], &wa[ix2]);
2063*3f1979aaSAndroid Build Coastguard Worker na = 1 - na;
2064*3f1979aaSAndroid Build Coastguard Worker break;
2065*3f1979aaSAndroid Build Coastguard Worker case 5:
2066*3f1979aaSAndroid Build Coastguard Worker ix2 = iw + ido;
2067*3f1979aaSAndroid Build Coastguard Worker ix3 = ix2 + ido;
2068*3f1979aaSAndroid Build Coastguard Worker ix4 = ix3 + ido;
2069*3f1979aaSAndroid Build Coastguard Worker radb5(ido, l1, na?ch:c, na?c:ch, &wa[iw], &wa[ix2], &wa[ix3], &wa[ix4]);
2070*3f1979aaSAndroid Build Coastguard Worker na = 1 - na;
2071*3f1979aaSAndroid Build Coastguard Worker break;
2072*3f1979aaSAndroid Build Coastguard Worker default:
2073*3f1979aaSAndroid Build Coastguard Worker if (na == 0) {
2074*3f1979aaSAndroid Build Coastguard Worker radbg(ido, ip, l1, idl1, c, c, c, ch, ch, &wa[iw]);
2075*3f1979aaSAndroid Build Coastguard Worker } else {
2076*3f1979aaSAndroid Build Coastguard Worker radbg(ido, ip, l1, idl1, ch, ch, ch, c, c, &wa[iw]);
2077*3f1979aaSAndroid Build Coastguard Worker }
2078*3f1979aaSAndroid Build Coastguard Worker if (ido == 1) {
2079*3f1979aaSAndroid Build Coastguard Worker na = 1 - na;
2080*3f1979aaSAndroid Build Coastguard Worker }
2081*3f1979aaSAndroid Build Coastguard Worker break;
2082*3f1979aaSAndroid Build Coastguard Worker }
2083*3f1979aaSAndroid Build Coastguard Worker l1 = l2;
2084*3f1979aaSAndroid Build Coastguard Worker iw += (ip - 1) * ido;
2085*3f1979aaSAndroid Build Coastguard Worker }
2086*3f1979aaSAndroid Build Coastguard Worker if (na == 0) {
2087*3f1979aaSAndroid Build Coastguard Worker return;
2088*3f1979aaSAndroid Build Coastguard Worker }
2089*3f1979aaSAndroid Build Coastguard Worker for (i = 0; i < n; ++i) {
2090*3f1979aaSAndroid Build Coastguard Worker c[i] = ch[i];
2091*3f1979aaSAndroid Build Coastguard Worker }
2092*3f1979aaSAndroid Build Coastguard Worker } /* rfftb1 */
2093*3f1979aaSAndroid Build Coastguard Worker
rfftf1(integer n,real * c,real * ch,const real * wa,integer * ifac)2094*3f1979aaSAndroid Build Coastguard Worker static void rfftf1(integer n, real *c, real *ch, const real *wa, integer *ifac)
2095*3f1979aaSAndroid Build Coastguard Worker {
2096*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
2097*3f1979aaSAndroid Build Coastguard Worker integer i, k1, l1, l2, na, kh, nf, ip, iw, ix2, ix3, ix4, ido, idl1;
2098*3f1979aaSAndroid Build Coastguard Worker
2099*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
2100*3f1979aaSAndroid Build Coastguard Worker nf = ifac[1];
2101*3f1979aaSAndroid Build Coastguard Worker na = 1;
2102*3f1979aaSAndroid Build Coastguard Worker l2 = n;
2103*3f1979aaSAndroid Build Coastguard Worker iw = n-1;
2104*3f1979aaSAndroid Build Coastguard Worker for (k1 = 1; k1 <= nf; ++k1) {
2105*3f1979aaSAndroid Build Coastguard Worker kh = nf - k1;
2106*3f1979aaSAndroid Build Coastguard Worker ip = ifac[kh + 2];
2107*3f1979aaSAndroid Build Coastguard Worker l1 = l2 / ip;
2108*3f1979aaSAndroid Build Coastguard Worker ido = n / l2;
2109*3f1979aaSAndroid Build Coastguard Worker idl1 = ido * l1;
2110*3f1979aaSAndroid Build Coastguard Worker iw -= (ip - 1) * ido;
2111*3f1979aaSAndroid Build Coastguard Worker na = 1 - na;
2112*3f1979aaSAndroid Build Coastguard Worker switch (ip) {
2113*3f1979aaSAndroid Build Coastguard Worker case 4:
2114*3f1979aaSAndroid Build Coastguard Worker ix2 = iw + ido;
2115*3f1979aaSAndroid Build Coastguard Worker ix3 = ix2 + ido;
2116*3f1979aaSAndroid Build Coastguard Worker radf4(ido, l1, na ? ch : c, na ? c : ch, &wa[iw], &wa[ix2], &wa[ix3]);
2117*3f1979aaSAndroid Build Coastguard Worker break;
2118*3f1979aaSAndroid Build Coastguard Worker case 2:
2119*3f1979aaSAndroid Build Coastguard Worker radf2(ido, l1, na ? ch : c, na ? c : ch, &wa[iw]);
2120*3f1979aaSAndroid Build Coastguard Worker break;
2121*3f1979aaSAndroid Build Coastguard Worker case 3:
2122*3f1979aaSAndroid Build Coastguard Worker ix2 = iw + ido;
2123*3f1979aaSAndroid Build Coastguard Worker radf3(ido, l1, na ? ch : c, na ? c : ch, &wa[iw], &wa[ix2]);
2124*3f1979aaSAndroid Build Coastguard Worker break;
2125*3f1979aaSAndroid Build Coastguard Worker case 5:
2126*3f1979aaSAndroid Build Coastguard Worker ix2 = iw + ido;
2127*3f1979aaSAndroid Build Coastguard Worker ix3 = ix2 + ido;
2128*3f1979aaSAndroid Build Coastguard Worker ix4 = ix3 + ido;
2129*3f1979aaSAndroid Build Coastguard Worker radf5(ido, l1, na ? ch : c, na ? c : ch, &wa[iw], &wa[ix2], &wa[ix3], &wa[ix4]);
2130*3f1979aaSAndroid Build Coastguard Worker break;
2131*3f1979aaSAndroid Build Coastguard Worker default:
2132*3f1979aaSAndroid Build Coastguard Worker if (ido == 1) {
2133*3f1979aaSAndroid Build Coastguard Worker na = 1 - na;
2134*3f1979aaSAndroid Build Coastguard Worker }
2135*3f1979aaSAndroid Build Coastguard Worker if (na == 0) {
2136*3f1979aaSAndroid Build Coastguard Worker radfg(ido, ip, l1, idl1, c, c, c, ch, ch, &wa[iw]);
2137*3f1979aaSAndroid Build Coastguard Worker na = 1;
2138*3f1979aaSAndroid Build Coastguard Worker } else {
2139*3f1979aaSAndroid Build Coastguard Worker radfg(ido, ip, l1, idl1, ch, ch, ch, c, c, &wa[iw]);
2140*3f1979aaSAndroid Build Coastguard Worker na = 0;
2141*3f1979aaSAndroid Build Coastguard Worker }
2142*3f1979aaSAndroid Build Coastguard Worker break;
2143*3f1979aaSAndroid Build Coastguard Worker }
2144*3f1979aaSAndroid Build Coastguard Worker l2 = l1;
2145*3f1979aaSAndroid Build Coastguard Worker }
2146*3f1979aaSAndroid Build Coastguard Worker if (na == 1) {
2147*3f1979aaSAndroid Build Coastguard Worker return;
2148*3f1979aaSAndroid Build Coastguard Worker }
2149*3f1979aaSAndroid Build Coastguard Worker for (i = 0; i < n; ++i) {
2150*3f1979aaSAndroid Build Coastguard Worker c[i] = ch[i];
2151*3f1979aaSAndroid Build Coastguard Worker }
2152*3f1979aaSAndroid Build Coastguard Worker }
2153*3f1979aaSAndroid Build Coastguard Worker
rfftb(integer n,real * r,real * wsave)2154*3f1979aaSAndroid Build Coastguard Worker void rfftb(integer n, real *r, real *wsave)
2155*3f1979aaSAndroid Build Coastguard Worker {
2156*3f1979aaSAndroid Build Coastguard Worker
2157*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
2158*3f1979aaSAndroid Build Coastguard Worker --wsave;
2159*3f1979aaSAndroid Build Coastguard Worker --r;
2160*3f1979aaSAndroid Build Coastguard Worker
2161*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
2162*3f1979aaSAndroid Build Coastguard Worker if (n == 1) {
2163*3f1979aaSAndroid Build Coastguard Worker return;
2164*3f1979aaSAndroid Build Coastguard Worker }
2165*3f1979aaSAndroid Build Coastguard Worker rfftb1(n, &r[1], &wsave[1], &wsave[n + 1], (int*)&wsave[(n << 1) + 1]);
2166*3f1979aaSAndroid Build Coastguard Worker } /* rfftb */
2167*3f1979aaSAndroid Build Coastguard Worker
rffti1(integer n,real * wa,integer * ifac)2168*3f1979aaSAndroid Build Coastguard Worker static void rffti1(integer n, real *wa, integer *ifac)
2169*3f1979aaSAndroid Build Coastguard Worker {
2170*3f1979aaSAndroid Build Coastguard Worker static integer ntryh[4] = { 4,2,3,5 };
2171*3f1979aaSAndroid Build Coastguard Worker
2172*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
2173*3f1979aaSAndroid Build Coastguard Worker integer i, j, k1, l1, l2;
2174*3f1979aaSAndroid Build Coastguard Worker real fi;
2175*3f1979aaSAndroid Build Coastguard Worker integer ld, ii, nf, ip, is;
2176*3f1979aaSAndroid Build Coastguard Worker real arg;
2177*3f1979aaSAndroid Build Coastguard Worker integer ido, ipm;
2178*3f1979aaSAndroid Build Coastguard Worker integer nfm1;
2179*3f1979aaSAndroid Build Coastguard Worker real argh;
2180*3f1979aaSAndroid Build Coastguard Worker real argld;
2181*3f1979aaSAndroid Build Coastguard Worker
2182*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
2183*3f1979aaSAndroid Build Coastguard Worker --ifac;
2184*3f1979aaSAndroid Build Coastguard Worker --wa;
2185*3f1979aaSAndroid Build Coastguard Worker
2186*3f1979aaSAndroid Build Coastguard Worker nf = decompose(n, ifac, ntryh);
2187*3f1979aaSAndroid Build Coastguard Worker
2188*3f1979aaSAndroid Build Coastguard Worker argh = (2*M_PI) / (real) (n);
2189*3f1979aaSAndroid Build Coastguard Worker is = 0;
2190*3f1979aaSAndroid Build Coastguard Worker nfm1 = nf - 1;
2191*3f1979aaSAndroid Build Coastguard Worker l1 = 1;
2192*3f1979aaSAndroid Build Coastguard Worker if (nfm1 == 0) {
2193*3f1979aaSAndroid Build Coastguard Worker return;
2194*3f1979aaSAndroid Build Coastguard Worker }
2195*3f1979aaSAndroid Build Coastguard Worker for (k1 = 1; k1 <= nfm1; ++k1) {
2196*3f1979aaSAndroid Build Coastguard Worker ip = ifac[k1 + 2];
2197*3f1979aaSAndroid Build Coastguard Worker ld = 0;
2198*3f1979aaSAndroid Build Coastguard Worker l2 = l1 * ip;
2199*3f1979aaSAndroid Build Coastguard Worker ido = n / l2;
2200*3f1979aaSAndroid Build Coastguard Worker ipm = ip - 1;
2201*3f1979aaSAndroid Build Coastguard Worker for (j = 1; j <= ipm; ++j) {
2202*3f1979aaSAndroid Build Coastguard Worker ld += l1;
2203*3f1979aaSAndroid Build Coastguard Worker i = is;
2204*3f1979aaSAndroid Build Coastguard Worker argld = (real) ld * argh;
2205*3f1979aaSAndroid Build Coastguard Worker fi = 0.f;
2206*3f1979aaSAndroid Build Coastguard Worker for (ii = 3; ii <= ido; ii += 2) {
2207*3f1979aaSAndroid Build Coastguard Worker i += 2;
2208*3f1979aaSAndroid Build Coastguard Worker fi += 1.f;
2209*3f1979aaSAndroid Build Coastguard Worker arg = fi * argld;
2210*3f1979aaSAndroid Build Coastguard Worker wa[i - 1] = cos(arg);
2211*3f1979aaSAndroid Build Coastguard Worker wa[i] = sin(arg);
2212*3f1979aaSAndroid Build Coastguard Worker }
2213*3f1979aaSAndroid Build Coastguard Worker is += ido;
2214*3f1979aaSAndroid Build Coastguard Worker }
2215*3f1979aaSAndroid Build Coastguard Worker l1 = l2;
2216*3f1979aaSAndroid Build Coastguard Worker }
2217*3f1979aaSAndroid Build Coastguard Worker } /* rffti1 */
2218*3f1979aaSAndroid Build Coastguard Worker
rfftf(integer n,real * r,real * wsave)2219*3f1979aaSAndroid Build Coastguard Worker void rfftf(integer n, real *r, real *wsave)
2220*3f1979aaSAndroid Build Coastguard Worker {
2221*3f1979aaSAndroid Build Coastguard Worker
2222*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
2223*3f1979aaSAndroid Build Coastguard Worker --wsave;
2224*3f1979aaSAndroid Build Coastguard Worker --r;
2225*3f1979aaSAndroid Build Coastguard Worker
2226*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
2227*3f1979aaSAndroid Build Coastguard Worker if (n == 1) {
2228*3f1979aaSAndroid Build Coastguard Worker return;
2229*3f1979aaSAndroid Build Coastguard Worker }
2230*3f1979aaSAndroid Build Coastguard Worker rfftf1(n, &r[1], &wsave[1], &wsave[n + 1], (int*)&wsave[(n << 1) + 1]);
2231*3f1979aaSAndroid Build Coastguard Worker } /* rfftf */
2232*3f1979aaSAndroid Build Coastguard Worker
rffti(integer n,real * wsave)2233*3f1979aaSAndroid Build Coastguard Worker void rffti(integer n, real *wsave)
2234*3f1979aaSAndroid Build Coastguard Worker {
2235*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
2236*3f1979aaSAndroid Build Coastguard Worker --wsave;
2237*3f1979aaSAndroid Build Coastguard Worker
2238*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
2239*3f1979aaSAndroid Build Coastguard Worker if (n == 1) {
2240*3f1979aaSAndroid Build Coastguard Worker return;
2241*3f1979aaSAndroid Build Coastguard Worker }
2242*3f1979aaSAndroid Build Coastguard Worker rffti1(n, &wsave[n + 1], (int*)&wsave[(n << 1) + 1]);
2243*3f1979aaSAndroid Build Coastguard Worker return;
2244*3f1979aaSAndroid Build Coastguard Worker } /* rffti */
2245*3f1979aaSAndroid Build Coastguard Worker
cosqb1(integer n,real * x,real * w,real * xh)2246*3f1979aaSAndroid Build Coastguard Worker static void cosqb1(integer n, real *x, real *w, real *xh)
2247*3f1979aaSAndroid Build Coastguard Worker {
2248*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
2249*3f1979aaSAndroid Build Coastguard Worker integer i, k, kc, np2, ns2;
2250*3f1979aaSAndroid Build Coastguard Worker real xim1;
2251*3f1979aaSAndroid Build Coastguard Worker integer modn;
2252*3f1979aaSAndroid Build Coastguard Worker
2253*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
2254*3f1979aaSAndroid Build Coastguard Worker --xh;
2255*3f1979aaSAndroid Build Coastguard Worker --w;
2256*3f1979aaSAndroid Build Coastguard Worker --x;
2257*3f1979aaSAndroid Build Coastguard Worker
2258*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
2259*3f1979aaSAndroid Build Coastguard Worker ns2 = (n + 1) / 2;
2260*3f1979aaSAndroid Build Coastguard Worker np2 = n + 2;
2261*3f1979aaSAndroid Build Coastguard Worker for (i = 3; i <= n; i += 2) {
2262*3f1979aaSAndroid Build Coastguard Worker xim1 = x[i - 1] + x[i];
2263*3f1979aaSAndroid Build Coastguard Worker x[i] -= x[i - 1];
2264*3f1979aaSAndroid Build Coastguard Worker x[i - 1] = xim1;
2265*3f1979aaSAndroid Build Coastguard Worker }
2266*3f1979aaSAndroid Build Coastguard Worker x[1] += x[1];
2267*3f1979aaSAndroid Build Coastguard Worker modn = n % 2;
2268*3f1979aaSAndroid Build Coastguard Worker if (modn == 0) {
2269*3f1979aaSAndroid Build Coastguard Worker x[n] += x[n];
2270*3f1979aaSAndroid Build Coastguard Worker }
2271*3f1979aaSAndroid Build Coastguard Worker rfftb(n, &x[1], &xh[1]);
2272*3f1979aaSAndroid Build Coastguard Worker for (k = 2; k <= ns2; ++k) {
2273*3f1979aaSAndroid Build Coastguard Worker kc = np2 - k;
2274*3f1979aaSAndroid Build Coastguard Worker xh[k] = w[k - 1] * x[kc] + w[kc - 1] * x[k];
2275*3f1979aaSAndroid Build Coastguard Worker xh[kc] = w[k - 1] * x[k] - w[kc - 1] * x[kc];
2276*3f1979aaSAndroid Build Coastguard Worker }
2277*3f1979aaSAndroid Build Coastguard Worker if (modn == 0) {
2278*3f1979aaSAndroid Build Coastguard Worker x[ns2 + 1] = w[ns2] * (x[ns2 + 1] + x[ns2 + 1]);
2279*3f1979aaSAndroid Build Coastguard Worker }
2280*3f1979aaSAndroid Build Coastguard Worker for (k = 2; k <= ns2; ++k) {
2281*3f1979aaSAndroid Build Coastguard Worker kc = np2 - k;
2282*3f1979aaSAndroid Build Coastguard Worker x[k] = xh[k] + xh[kc];
2283*3f1979aaSAndroid Build Coastguard Worker x[kc] = xh[k] - xh[kc];
2284*3f1979aaSAndroid Build Coastguard Worker }
2285*3f1979aaSAndroid Build Coastguard Worker x[1] += x[1];
2286*3f1979aaSAndroid Build Coastguard Worker } /* cosqb1 */
2287*3f1979aaSAndroid Build Coastguard Worker
cosqb(integer n,real * x,real * wsave)2288*3f1979aaSAndroid Build Coastguard Worker void cosqb(integer n, real *x, real *wsave)
2289*3f1979aaSAndroid Build Coastguard Worker {
2290*3f1979aaSAndroid Build Coastguard Worker static const real tsqrt2 = 2.82842712474619f;
2291*3f1979aaSAndroid Build Coastguard Worker
2292*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
2293*3f1979aaSAndroid Build Coastguard Worker real x1;
2294*3f1979aaSAndroid Build Coastguard Worker
2295*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
2296*3f1979aaSAndroid Build Coastguard Worker --wsave;
2297*3f1979aaSAndroid Build Coastguard Worker --x;
2298*3f1979aaSAndroid Build Coastguard Worker
2299*3f1979aaSAndroid Build Coastguard Worker if (n < 2) {
2300*3f1979aaSAndroid Build Coastguard Worker x[1] *= 4.f;
2301*3f1979aaSAndroid Build Coastguard Worker } else if (n == 2) {
2302*3f1979aaSAndroid Build Coastguard Worker x1 = (x[1] + x[2]) * 4.f;
2303*3f1979aaSAndroid Build Coastguard Worker x[2] = tsqrt2 * (x[1] - x[2]);
2304*3f1979aaSAndroid Build Coastguard Worker x[1] = x1;
2305*3f1979aaSAndroid Build Coastguard Worker } else {
2306*3f1979aaSAndroid Build Coastguard Worker cosqb1(n, &x[1], &wsave[1], &wsave[n + 1]);
2307*3f1979aaSAndroid Build Coastguard Worker }
2308*3f1979aaSAndroid Build Coastguard Worker } /* cosqb */
2309*3f1979aaSAndroid Build Coastguard Worker
cosqf1(integer n,real * x,real * w,real * xh)2310*3f1979aaSAndroid Build Coastguard Worker static void cosqf1(integer n, real *x, real *w, real *xh)
2311*3f1979aaSAndroid Build Coastguard Worker {
2312*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
2313*3f1979aaSAndroid Build Coastguard Worker integer i, k, kc, np2, ns2;
2314*3f1979aaSAndroid Build Coastguard Worker real xim1;
2315*3f1979aaSAndroid Build Coastguard Worker integer modn;
2316*3f1979aaSAndroid Build Coastguard Worker
2317*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
2318*3f1979aaSAndroid Build Coastguard Worker --xh;
2319*3f1979aaSAndroid Build Coastguard Worker --w;
2320*3f1979aaSAndroid Build Coastguard Worker --x;
2321*3f1979aaSAndroid Build Coastguard Worker
2322*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
2323*3f1979aaSAndroid Build Coastguard Worker ns2 = (n + 1) / 2;
2324*3f1979aaSAndroid Build Coastguard Worker np2 = n + 2;
2325*3f1979aaSAndroid Build Coastguard Worker for (k = 2; k <= ns2; ++k) {
2326*3f1979aaSAndroid Build Coastguard Worker kc = np2 - k;
2327*3f1979aaSAndroid Build Coastguard Worker xh[k] = x[k] + x[kc];
2328*3f1979aaSAndroid Build Coastguard Worker xh[kc] = x[k] - x[kc];
2329*3f1979aaSAndroid Build Coastguard Worker }
2330*3f1979aaSAndroid Build Coastguard Worker modn = n % 2;
2331*3f1979aaSAndroid Build Coastguard Worker if (modn == 0) {
2332*3f1979aaSAndroid Build Coastguard Worker xh[ns2 + 1] = x[ns2 + 1] + x[ns2 + 1];
2333*3f1979aaSAndroid Build Coastguard Worker }
2334*3f1979aaSAndroid Build Coastguard Worker for (k = 2; k <= ns2; ++k) {
2335*3f1979aaSAndroid Build Coastguard Worker kc = np2 - k;
2336*3f1979aaSAndroid Build Coastguard Worker x[k] = w[k - 1] * xh[kc] + w[kc - 1] * xh[k];
2337*3f1979aaSAndroid Build Coastguard Worker x[kc] = w[k - 1] * xh[k] - w[kc - 1] * xh[kc];
2338*3f1979aaSAndroid Build Coastguard Worker }
2339*3f1979aaSAndroid Build Coastguard Worker if (modn == 0) {
2340*3f1979aaSAndroid Build Coastguard Worker x[ns2 + 1] = w[ns2] * xh[ns2 + 1];
2341*3f1979aaSAndroid Build Coastguard Worker }
2342*3f1979aaSAndroid Build Coastguard Worker rfftf(n, &x[1], &xh[1]);
2343*3f1979aaSAndroid Build Coastguard Worker for (i = 3; i <= n; i += 2) {
2344*3f1979aaSAndroid Build Coastguard Worker xim1 = x[i - 1] - x[i];
2345*3f1979aaSAndroid Build Coastguard Worker x[i] = x[i - 1] + x[i];
2346*3f1979aaSAndroid Build Coastguard Worker x[i - 1] = xim1;
2347*3f1979aaSAndroid Build Coastguard Worker }
2348*3f1979aaSAndroid Build Coastguard Worker } /* cosqf1 */
2349*3f1979aaSAndroid Build Coastguard Worker
cosqf(integer n,real * x,real * wsave)2350*3f1979aaSAndroid Build Coastguard Worker void cosqf(integer n, real *x, real *wsave)
2351*3f1979aaSAndroid Build Coastguard Worker {
2352*3f1979aaSAndroid Build Coastguard Worker static const real sqrt2 = 1.4142135623731f;
2353*3f1979aaSAndroid Build Coastguard Worker
2354*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
2355*3f1979aaSAndroid Build Coastguard Worker real tsqx;
2356*3f1979aaSAndroid Build Coastguard Worker
2357*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
2358*3f1979aaSAndroid Build Coastguard Worker --wsave;
2359*3f1979aaSAndroid Build Coastguard Worker --x;
2360*3f1979aaSAndroid Build Coastguard Worker
2361*3f1979aaSAndroid Build Coastguard Worker if (n == 2) {
2362*3f1979aaSAndroid Build Coastguard Worker tsqx = sqrt2 * x[2];
2363*3f1979aaSAndroid Build Coastguard Worker x[2] = x[1] - tsqx;
2364*3f1979aaSAndroid Build Coastguard Worker x[1] += tsqx;
2365*3f1979aaSAndroid Build Coastguard Worker } else if (n > 2) {
2366*3f1979aaSAndroid Build Coastguard Worker cosqf1(n, &x[1], &wsave[1], &wsave[n + 1]);
2367*3f1979aaSAndroid Build Coastguard Worker }
2368*3f1979aaSAndroid Build Coastguard Worker } /* cosqf */
2369*3f1979aaSAndroid Build Coastguard Worker
cosqi(integer n,real * wsave)2370*3f1979aaSAndroid Build Coastguard Worker void cosqi(integer n, real *wsave)
2371*3f1979aaSAndroid Build Coastguard Worker {
2372*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
2373*3f1979aaSAndroid Build Coastguard Worker integer k;
2374*3f1979aaSAndroid Build Coastguard Worker real fk, dt;
2375*3f1979aaSAndroid Build Coastguard Worker
2376*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
2377*3f1979aaSAndroid Build Coastguard Worker --wsave;
2378*3f1979aaSAndroid Build Coastguard Worker
2379*3f1979aaSAndroid Build Coastguard Worker dt = M_PI/2 / (real) (n);
2380*3f1979aaSAndroid Build Coastguard Worker fk = 0.f;
2381*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= n; ++k) {
2382*3f1979aaSAndroid Build Coastguard Worker fk += 1.f;
2383*3f1979aaSAndroid Build Coastguard Worker wsave[k] = cos(fk * dt);
2384*3f1979aaSAndroid Build Coastguard Worker }
2385*3f1979aaSAndroid Build Coastguard Worker rffti(n, &wsave[n + 1]);
2386*3f1979aaSAndroid Build Coastguard Worker } /* cosqi */
2387*3f1979aaSAndroid Build Coastguard Worker
cost(integer n,real * x,real * wsave)2388*3f1979aaSAndroid Build Coastguard Worker void cost(integer n, real *x, real *wsave)
2389*3f1979aaSAndroid Build Coastguard Worker {
2390*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
2391*3f1979aaSAndroid Build Coastguard Worker integer i, k;
2392*3f1979aaSAndroid Build Coastguard Worker real c1, t1, t2;
2393*3f1979aaSAndroid Build Coastguard Worker integer kc;
2394*3f1979aaSAndroid Build Coastguard Worker real xi;
2395*3f1979aaSAndroid Build Coastguard Worker integer nm1, np1;
2396*3f1979aaSAndroid Build Coastguard Worker real x1h;
2397*3f1979aaSAndroid Build Coastguard Worker integer ns2;
2398*3f1979aaSAndroid Build Coastguard Worker real tx2, x1p3, xim2;
2399*3f1979aaSAndroid Build Coastguard Worker integer modn;
2400*3f1979aaSAndroid Build Coastguard Worker
2401*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
2402*3f1979aaSAndroid Build Coastguard Worker --wsave;
2403*3f1979aaSAndroid Build Coastguard Worker --x;
2404*3f1979aaSAndroid Build Coastguard Worker
2405*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
2406*3f1979aaSAndroid Build Coastguard Worker nm1 = n - 1;
2407*3f1979aaSAndroid Build Coastguard Worker np1 = n + 1;
2408*3f1979aaSAndroid Build Coastguard Worker ns2 = n / 2;
2409*3f1979aaSAndroid Build Coastguard Worker if (n < 2) {
2410*3f1979aaSAndroid Build Coastguard Worker } else if (n == 2) {
2411*3f1979aaSAndroid Build Coastguard Worker x1h = x[1] + x[2];
2412*3f1979aaSAndroid Build Coastguard Worker x[2] = x[1] - x[2];
2413*3f1979aaSAndroid Build Coastguard Worker x[1] = x1h;
2414*3f1979aaSAndroid Build Coastguard Worker } else if (n == 3) {
2415*3f1979aaSAndroid Build Coastguard Worker x1p3 = x[1] + x[3];
2416*3f1979aaSAndroid Build Coastguard Worker tx2 = x[2] + x[2];
2417*3f1979aaSAndroid Build Coastguard Worker x[2] = x[1] - x[3];
2418*3f1979aaSAndroid Build Coastguard Worker x[1] = x1p3 + tx2;
2419*3f1979aaSAndroid Build Coastguard Worker x[3] = x1p3 - tx2;
2420*3f1979aaSAndroid Build Coastguard Worker } else {
2421*3f1979aaSAndroid Build Coastguard Worker c1 = x[1] - x[n];
2422*3f1979aaSAndroid Build Coastguard Worker x[1] += x[n];
2423*3f1979aaSAndroid Build Coastguard Worker for (k = 2; k <= ns2; ++k) {
2424*3f1979aaSAndroid Build Coastguard Worker kc = np1 - k;
2425*3f1979aaSAndroid Build Coastguard Worker t1 = x[k] + x[kc];
2426*3f1979aaSAndroid Build Coastguard Worker t2 = x[k] - x[kc];
2427*3f1979aaSAndroid Build Coastguard Worker c1 += wsave[kc] * t2;
2428*3f1979aaSAndroid Build Coastguard Worker t2 = wsave[k] * t2;
2429*3f1979aaSAndroid Build Coastguard Worker x[k] = t1 - t2;
2430*3f1979aaSAndroid Build Coastguard Worker x[kc] = t1 + t2;
2431*3f1979aaSAndroid Build Coastguard Worker }
2432*3f1979aaSAndroid Build Coastguard Worker modn = n % 2;
2433*3f1979aaSAndroid Build Coastguard Worker if (modn != 0) {
2434*3f1979aaSAndroid Build Coastguard Worker x[ns2 + 1] += x[ns2 + 1];
2435*3f1979aaSAndroid Build Coastguard Worker }
2436*3f1979aaSAndroid Build Coastguard Worker rfftf(nm1, &x[1], &wsave[n + 1]);
2437*3f1979aaSAndroid Build Coastguard Worker xim2 = x[2];
2438*3f1979aaSAndroid Build Coastguard Worker x[2] = c1;
2439*3f1979aaSAndroid Build Coastguard Worker for (i = 4; i <= n; i += 2) {
2440*3f1979aaSAndroid Build Coastguard Worker xi = x[i];
2441*3f1979aaSAndroid Build Coastguard Worker x[i] = x[i - 2] - x[i - 1];
2442*3f1979aaSAndroid Build Coastguard Worker x[i - 1] = xim2;
2443*3f1979aaSAndroid Build Coastguard Worker xim2 = xi;
2444*3f1979aaSAndroid Build Coastguard Worker }
2445*3f1979aaSAndroid Build Coastguard Worker if (modn != 0) {
2446*3f1979aaSAndroid Build Coastguard Worker x[n] = xim2;
2447*3f1979aaSAndroid Build Coastguard Worker }
2448*3f1979aaSAndroid Build Coastguard Worker }
2449*3f1979aaSAndroid Build Coastguard Worker } /* cost */
2450*3f1979aaSAndroid Build Coastguard Worker
costi(integer n,real * wsave)2451*3f1979aaSAndroid Build Coastguard Worker void costi(integer n, real *wsave)
2452*3f1979aaSAndroid Build Coastguard Worker {
2453*3f1979aaSAndroid Build Coastguard Worker /* Initialized data */
2454*3f1979aaSAndroid Build Coastguard Worker
2455*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
2456*3f1979aaSAndroid Build Coastguard Worker integer k, kc;
2457*3f1979aaSAndroid Build Coastguard Worker real fk, dt;
2458*3f1979aaSAndroid Build Coastguard Worker integer nm1, np1, ns2;
2459*3f1979aaSAndroid Build Coastguard Worker
2460*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
2461*3f1979aaSAndroid Build Coastguard Worker --wsave;
2462*3f1979aaSAndroid Build Coastguard Worker
2463*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
2464*3f1979aaSAndroid Build Coastguard Worker if (n <= 3) {
2465*3f1979aaSAndroid Build Coastguard Worker return;
2466*3f1979aaSAndroid Build Coastguard Worker }
2467*3f1979aaSAndroid Build Coastguard Worker nm1 = n - 1;
2468*3f1979aaSAndroid Build Coastguard Worker np1 = n + 1;
2469*3f1979aaSAndroid Build Coastguard Worker ns2 = n / 2;
2470*3f1979aaSAndroid Build Coastguard Worker dt = M_PI / (real) nm1;
2471*3f1979aaSAndroid Build Coastguard Worker fk = 0.f;
2472*3f1979aaSAndroid Build Coastguard Worker for (k = 2; k <= ns2; ++k) {
2473*3f1979aaSAndroid Build Coastguard Worker kc = np1 - k;
2474*3f1979aaSAndroid Build Coastguard Worker fk += 1.f;
2475*3f1979aaSAndroid Build Coastguard Worker wsave[k] = sin(fk * dt) * 2.f;
2476*3f1979aaSAndroid Build Coastguard Worker wsave[kc] = cos(fk * dt) * 2.f;
2477*3f1979aaSAndroid Build Coastguard Worker }
2478*3f1979aaSAndroid Build Coastguard Worker rffti(nm1, &wsave[n + 1]);
2479*3f1979aaSAndroid Build Coastguard Worker } /* costi */
2480*3f1979aaSAndroid Build Coastguard Worker
sinqb(integer n,real * x,real * wsave)2481*3f1979aaSAndroid Build Coastguard Worker void sinqb(integer n, real *x, real *wsave)
2482*3f1979aaSAndroid Build Coastguard Worker {
2483*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
2484*3f1979aaSAndroid Build Coastguard Worker integer k, kc, ns2;
2485*3f1979aaSAndroid Build Coastguard Worker real xhold;
2486*3f1979aaSAndroid Build Coastguard Worker
2487*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
2488*3f1979aaSAndroid Build Coastguard Worker --wsave;
2489*3f1979aaSAndroid Build Coastguard Worker --x;
2490*3f1979aaSAndroid Build Coastguard Worker
2491*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
2492*3f1979aaSAndroid Build Coastguard Worker if (n <= 1) {
2493*3f1979aaSAndroid Build Coastguard Worker x[1] *= 4.f;
2494*3f1979aaSAndroid Build Coastguard Worker return;
2495*3f1979aaSAndroid Build Coastguard Worker }
2496*3f1979aaSAndroid Build Coastguard Worker ns2 = n / 2;
2497*3f1979aaSAndroid Build Coastguard Worker for (k = 2; k <= n; k += 2) {
2498*3f1979aaSAndroid Build Coastguard Worker x[k] = -x[k];
2499*3f1979aaSAndroid Build Coastguard Worker }
2500*3f1979aaSAndroid Build Coastguard Worker cosqb(n, &x[1], &wsave[1]);
2501*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= ns2; ++k) {
2502*3f1979aaSAndroid Build Coastguard Worker kc = n - k;
2503*3f1979aaSAndroid Build Coastguard Worker xhold = x[k];
2504*3f1979aaSAndroid Build Coastguard Worker x[k] = x[kc + 1];
2505*3f1979aaSAndroid Build Coastguard Worker x[kc + 1] = xhold;
2506*3f1979aaSAndroid Build Coastguard Worker }
2507*3f1979aaSAndroid Build Coastguard Worker } /* sinqb */
2508*3f1979aaSAndroid Build Coastguard Worker
sinqf(integer n,real * x,real * wsave)2509*3f1979aaSAndroid Build Coastguard Worker void sinqf(integer n, real *x, real *wsave)
2510*3f1979aaSAndroid Build Coastguard Worker {
2511*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
2512*3f1979aaSAndroid Build Coastguard Worker integer k, kc, ns2;
2513*3f1979aaSAndroid Build Coastguard Worker real xhold;
2514*3f1979aaSAndroid Build Coastguard Worker
2515*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
2516*3f1979aaSAndroid Build Coastguard Worker --wsave;
2517*3f1979aaSAndroid Build Coastguard Worker --x;
2518*3f1979aaSAndroid Build Coastguard Worker
2519*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
2520*3f1979aaSAndroid Build Coastguard Worker if (n == 1) {
2521*3f1979aaSAndroid Build Coastguard Worker return;
2522*3f1979aaSAndroid Build Coastguard Worker }
2523*3f1979aaSAndroid Build Coastguard Worker ns2 = n / 2;
2524*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= ns2; ++k) {
2525*3f1979aaSAndroid Build Coastguard Worker kc = n - k;
2526*3f1979aaSAndroid Build Coastguard Worker xhold = x[k];
2527*3f1979aaSAndroid Build Coastguard Worker x[k] = x[kc + 1];
2528*3f1979aaSAndroid Build Coastguard Worker x[kc + 1] = xhold;
2529*3f1979aaSAndroid Build Coastguard Worker }
2530*3f1979aaSAndroid Build Coastguard Worker cosqf(n, &x[1], &wsave[1]);
2531*3f1979aaSAndroid Build Coastguard Worker for (k = 2; k <= n; k += 2) {
2532*3f1979aaSAndroid Build Coastguard Worker x[k] = -x[k];
2533*3f1979aaSAndroid Build Coastguard Worker }
2534*3f1979aaSAndroid Build Coastguard Worker } /* sinqf */
2535*3f1979aaSAndroid Build Coastguard Worker
sinqi(integer n,real * wsave)2536*3f1979aaSAndroid Build Coastguard Worker void sinqi(integer n, real *wsave)
2537*3f1979aaSAndroid Build Coastguard Worker {
2538*3f1979aaSAndroid Build Coastguard Worker
2539*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
2540*3f1979aaSAndroid Build Coastguard Worker --wsave;
2541*3f1979aaSAndroid Build Coastguard Worker
2542*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
2543*3f1979aaSAndroid Build Coastguard Worker cosqi(n, &wsave[1]);
2544*3f1979aaSAndroid Build Coastguard Worker } /* sinqi */
2545*3f1979aaSAndroid Build Coastguard Worker
sint1(integer n,real * war,real * was,real * xh,real * x,integer * ifac)2546*3f1979aaSAndroid Build Coastguard Worker static void sint1(integer n, real *war, real *was, real *xh, real *
2547*3f1979aaSAndroid Build Coastguard Worker x, integer *ifac)
2548*3f1979aaSAndroid Build Coastguard Worker {
2549*3f1979aaSAndroid Build Coastguard Worker /* Initialized data */
2550*3f1979aaSAndroid Build Coastguard Worker
2551*3f1979aaSAndroid Build Coastguard Worker static const real sqrt3 = 1.73205080756888f;
2552*3f1979aaSAndroid Build Coastguard Worker
2553*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
2554*3f1979aaSAndroid Build Coastguard Worker integer i, k;
2555*3f1979aaSAndroid Build Coastguard Worker real t1, t2;
2556*3f1979aaSAndroid Build Coastguard Worker integer kc, np1, ns2, modn;
2557*3f1979aaSAndroid Build Coastguard Worker real xhold;
2558*3f1979aaSAndroid Build Coastguard Worker
2559*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
2560*3f1979aaSAndroid Build Coastguard Worker --ifac;
2561*3f1979aaSAndroid Build Coastguard Worker --x;
2562*3f1979aaSAndroid Build Coastguard Worker --xh;
2563*3f1979aaSAndroid Build Coastguard Worker --was;
2564*3f1979aaSAndroid Build Coastguard Worker --war;
2565*3f1979aaSAndroid Build Coastguard Worker
2566*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
2567*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= n; ++i) {
2568*3f1979aaSAndroid Build Coastguard Worker xh[i] = war[i];
2569*3f1979aaSAndroid Build Coastguard Worker war[i] = x[i];
2570*3f1979aaSAndroid Build Coastguard Worker }
2571*3f1979aaSAndroid Build Coastguard Worker
2572*3f1979aaSAndroid Build Coastguard Worker if (n < 2) {
2573*3f1979aaSAndroid Build Coastguard Worker xh[1] += xh[1];
2574*3f1979aaSAndroid Build Coastguard Worker } else if (n == 2) {
2575*3f1979aaSAndroid Build Coastguard Worker xhold = sqrt3 * (xh[1] + xh[2]);
2576*3f1979aaSAndroid Build Coastguard Worker xh[2] = sqrt3 * (xh[1] - xh[2]);
2577*3f1979aaSAndroid Build Coastguard Worker xh[1] = xhold;
2578*3f1979aaSAndroid Build Coastguard Worker } else {
2579*3f1979aaSAndroid Build Coastguard Worker np1 = n + 1;
2580*3f1979aaSAndroid Build Coastguard Worker ns2 = n / 2;
2581*3f1979aaSAndroid Build Coastguard Worker x[1] = 0.f;
2582*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= ns2; ++k) {
2583*3f1979aaSAndroid Build Coastguard Worker kc = np1 - k;
2584*3f1979aaSAndroid Build Coastguard Worker t1 = xh[k] - xh[kc];
2585*3f1979aaSAndroid Build Coastguard Worker t2 = was[k] * (xh[k] + xh[kc]);
2586*3f1979aaSAndroid Build Coastguard Worker x[k + 1] = t1 + t2;
2587*3f1979aaSAndroid Build Coastguard Worker x[kc + 1] = t2 - t1;
2588*3f1979aaSAndroid Build Coastguard Worker }
2589*3f1979aaSAndroid Build Coastguard Worker modn = n % 2;
2590*3f1979aaSAndroid Build Coastguard Worker if (modn != 0) {
2591*3f1979aaSAndroid Build Coastguard Worker x[ns2 + 2] = xh[ns2 + 1] * 4.f;
2592*3f1979aaSAndroid Build Coastguard Worker }
2593*3f1979aaSAndroid Build Coastguard Worker rfftf1(np1, &x[1], &xh[1], &war[1], &ifac[1]);
2594*3f1979aaSAndroid Build Coastguard Worker xh[1] = x[1] * .5f;
2595*3f1979aaSAndroid Build Coastguard Worker for (i = 3; i <= n; i += 2) {
2596*3f1979aaSAndroid Build Coastguard Worker xh[i - 1] = -x[i];
2597*3f1979aaSAndroid Build Coastguard Worker xh[i] = xh[i - 2] + x[i - 1];
2598*3f1979aaSAndroid Build Coastguard Worker }
2599*3f1979aaSAndroid Build Coastguard Worker if (modn == 0) {
2600*3f1979aaSAndroid Build Coastguard Worker xh[n] = -x[n + 1];
2601*3f1979aaSAndroid Build Coastguard Worker }
2602*3f1979aaSAndroid Build Coastguard Worker }
2603*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= n; ++i) {
2604*3f1979aaSAndroid Build Coastguard Worker x[i] = war[i];
2605*3f1979aaSAndroid Build Coastguard Worker war[i] = xh[i];
2606*3f1979aaSAndroid Build Coastguard Worker }
2607*3f1979aaSAndroid Build Coastguard Worker } /* sint1 */
2608*3f1979aaSAndroid Build Coastguard Worker
sinti(integer n,real * wsave)2609*3f1979aaSAndroid Build Coastguard Worker void sinti(integer n, real *wsave)
2610*3f1979aaSAndroid Build Coastguard Worker {
2611*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
2612*3f1979aaSAndroid Build Coastguard Worker integer k;
2613*3f1979aaSAndroid Build Coastguard Worker real dt;
2614*3f1979aaSAndroid Build Coastguard Worker integer np1, ns2;
2615*3f1979aaSAndroid Build Coastguard Worker
2616*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
2617*3f1979aaSAndroid Build Coastguard Worker --wsave;
2618*3f1979aaSAndroid Build Coastguard Worker
2619*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
2620*3f1979aaSAndroid Build Coastguard Worker if (n <= 1) {
2621*3f1979aaSAndroid Build Coastguard Worker return;
2622*3f1979aaSAndroid Build Coastguard Worker }
2623*3f1979aaSAndroid Build Coastguard Worker ns2 = n / 2;
2624*3f1979aaSAndroid Build Coastguard Worker np1 = n + 1;
2625*3f1979aaSAndroid Build Coastguard Worker dt = M_PI / (real) np1;
2626*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= ns2; ++k) {
2627*3f1979aaSAndroid Build Coastguard Worker wsave[k] = sin(k * dt) * 2.f;
2628*3f1979aaSAndroid Build Coastguard Worker }
2629*3f1979aaSAndroid Build Coastguard Worker rffti(np1, &wsave[ns2 + 1]);
2630*3f1979aaSAndroid Build Coastguard Worker } /* sinti */
2631*3f1979aaSAndroid Build Coastguard Worker
sint(integer n,real * x,real * wsave)2632*3f1979aaSAndroid Build Coastguard Worker void sint(integer n, real *x, real *wsave)
2633*3f1979aaSAndroid Build Coastguard Worker {
2634*3f1979aaSAndroid Build Coastguard Worker integer np1, iw1, iw2, iw3;
2635*3f1979aaSAndroid Build Coastguard Worker
2636*3f1979aaSAndroid Build Coastguard Worker /* Parameter adjustments */
2637*3f1979aaSAndroid Build Coastguard Worker --wsave;
2638*3f1979aaSAndroid Build Coastguard Worker --x;
2639*3f1979aaSAndroid Build Coastguard Worker
2640*3f1979aaSAndroid Build Coastguard Worker /* Function Body */
2641*3f1979aaSAndroid Build Coastguard Worker np1 = n + 1;
2642*3f1979aaSAndroid Build Coastguard Worker iw1 = n / 2 + 1;
2643*3f1979aaSAndroid Build Coastguard Worker iw2 = iw1 + np1;
2644*3f1979aaSAndroid Build Coastguard Worker iw3 = iw2 + np1;
2645*3f1979aaSAndroid Build Coastguard Worker sint1(n, &x[1], &wsave[1], &wsave[iw1], &wsave[iw2], (int*)&wsave[iw3]);
2646*3f1979aaSAndroid Build Coastguard Worker } /* sint */
2647*3f1979aaSAndroid Build Coastguard Worker
2648*3f1979aaSAndroid Build Coastguard Worker #ifdef TESTING_FFTPACK
2649*3f1979aaSAndroid Build Coastguard Worker #include <stdio.h>
2650*3f1979aaSAndroid Build Coastguard Worker
main(void)2651*3f1979aaSAndroid Build Coastguard Worker int main(void)
2652*3f1979aaSAndroid Build Coastguard Worker {
2653*3f1979aaSAndroid Build Coastguard Worker static integer nd[] = { 120,91,54,49,32,28,24,8,4,3,2 };
2654*3f1979aaSAndroid Build Coastguard Worker
2655*3f1979aaSAndroid Build Coastguard Worker /* System generated locals */
2656*3f1979aaSAndroid Build Coastguard Worker real r1, r2, r3;
2657*3f1979aaSAndroid Build Coastguard Worker f77complex q1, q2, q3;
2658*3f1979aaSAndroid Build Coastguard Worker
2659*3f1979aaSAndroid Build Coastguard Worker /* Local variables */
2660*3f1979aaSAndroid Build Coastguard Worker integer i, j, k, n;
2661*3f1979aaSAndroid Build Coastguard Worker real w[2000], x[200], y[200], cf, fn, dt;
2662*3f1979aaSAndroid Build Coastguard Worker f77complex cx[200], cy[200];
2663*3f1979aaSAndroid Build Coastguard Worker real xh[200];
2664*3f1979aaSAndroid Build Coastguard Worker integer nz, nm1, np1, ns2;
2665*3f1979aaSAndroid Build Coastguard Worker real arg, tfn;
2666*3f1979aaSAndroid Build Coastguard Worker real sum, arg1, arg2;
2667*3f1979aaSAndroid Build Coastguard Worker real sum1, sum2, dcfb;
2668*3f1979aaSAndroid Build Coastguard Worker integer modn;
2669*3f1979aaSAndroid Build Coastguard Worker real rftb, rftf;
2670*3f1979aaSAndroid Build Coastguard Worker real sqrt2;
2671*3f1979aaSAndroid Build Coastguard Worker real rftfb;
2672*3f1979aaSAndroid Build Coastguard Worker real costt, sintt, dcfftb, dcfftf, cosqfb, costfb;
2673*3f1979aaSAndroid Build Coastguard Worker real sinqfb;
2674*3f1979aaSAndroid Build Coastguard Worker real sintfb;
2675*3f1979aaSAndroid Build Coastguard Worker real cosqbt, cosqft, sinqbt, sinqft;
2676*3f1979aaSAndroid Build Coastguard Worker
2677*3f1979aaSAndroid Build Coastguard Worker
2678*3f1979aaSAndroid Build Coastguard Worker
2679*3f1979aaSAndroid Build Coastguard Worker /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2680*3f1979aaSAndroid Build Coastguard Worker
2681*3f1979aaSAndroid Build Coastguard Worker /* VERSION 4 APRIL 1985 */
2682*3f1979aaSAndroid Build Coastguard Worker
2683*3f1979aaSAndroid Build Coastguard Worker /* A TEST DRIVER FOR */
2684*3f1979aaSAndroid Build Coastguard Worker /* A PACKAGE OF FORTRAN SUBPROGRAMS FOR THE FAST FOURIER */
2685*3f1979aaSAndroid Build Coastguard Worker /* TRANSFORM OF PERIODIC AND OTHER SYMMETRIC SEQUENCES */
2686*3f1979aaSAndroid Build Coastguard Worker
2687*3f1979aaSAndroid Build Coastguard Worker /* BY */
2688*3f1979aaSAndroid Build Coastguard Worker
2689*3f1979aaSAndroid Build Coastguard Worker /* PAUL N SWARZTRAUBER */
2690*3f1979aaSAndroid Build Coastguard Worker
2691*3f1979aaSAndroid Build Coastguard Worker /* NATIONAL CENTER FOR ATMOSPHERIC RESEARCH BOULDER,COLORADO 80307 */
2692*3f1979aaSAndroid Build Coastguard Worker
2693*3f1979aaSAndroid Build Coastguard Worker /* WHICH IS SPONSORED BY THE NATIONAL SCIENCE FOUNDATION */
2694*3f1979aaSAndroid Build Coastguard Worker
2695*3f1979aaSAndroid Build Coastguard Worker /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2696*3f1979aaSAndroid Build Coastguard Worker
2697*3f1979aaSAndroid Build Coastguard Worker
2698*3f1979aaSAndroid Build Coastguard Worker /* THIS PROGRAM TESTS THE PACKAGE OF FAST FOURIER */
2699*3f1979aaSAndroid Build Coastguard Worker /* TRANSFORMS FOR BOTH COMPLEX AND REAL PERIODIC SEQUENCES AND */
2700*3f1979aaSAndroid Build Coastguard Worker /* CERTIAN OTHER SYMMETRIC SEQUENCES THAT ARE LISTED BELOW. */
2701*3f1979aaSAndroid Build Coastguard Worker
2702*3f1979aaSAndroid Build Coastguard Worker /* 1. RFFTI INITIALIZE RFFTF AND RFFTB */
2703*3f1979aaSAndroid Build Coastguard Worker /* 2. RFFTF FORWARD TRANSFORM OF A REAL PERIODIC SEQUENCE */
2704*3f1979aaSAndroid Build Coastguard Worker /* 3. RFFTB BACKWARD TRANSFORM OF A REAL COEFFICIENT ARRAY */
2705*3f1979aaSAndroid Build Coastguard Worker
2706*3f1979aaSAndroid Build Coastguard Worker /* 4. EZFFTI INITIALIZE EZFFTF AND EZFFTB */
2707*3f1979aaSAndroid Build Coastguard Worker /* 5. EZFFTF A SIMPLIFIED REAL PERIODIC FORWARD TRANSFORM */
2708*3f1979aaSAndroid Build Coastguard Worker /* 6. EZFFTB A SIMPLIFIED REAL PERIODIC BACKWARD TRANSFORM */
2709*3f1979aaSAndroid Build Coastguard Worker
2710*3f1979aaSAndroid Build Coastguard Worker /* 7. SINTI INITIALIZE SINT */
2711*3f1979aaSAndroid Build Coastguard Worker /* 8. SINT SINE TRANSFORM OF A REAL ODD SEQUENCE */
2712*3f1979aaSAndroid Build Coastguard Worker
2713*3f1979aaSAndroid Build Coastguard Worker /* 9. COSTI INITIALIZE COST */
2714*3f1979aaSAndroid Build Coastguard Worker /* 10. COST COSINE TRANSFORM OF A REAL EVEN SEQUENCE */
2715*3f1979aaSAndroid Build Coastguard Worker
2716*3f1979aaSAndroid Build Coastguard Worker /* 11. SINQI INITIALIZE SINQF AND SINQB */
2717*3f1979aaSAndroid Build Coastguard Worker /* 12. SINQF FORWARD SINE TRANSFORM WITH ODD WAVE NUMBERS */
2718*3f1979aaSAndroid Build Coastguard Worker /* 13. SINQB UNNORMALIZED INVERSE OF SINQF */
2719*3f1979aaSAndroid Build Coastguard Worker
2720*3f1979aaSAndroid Build Coastguard Worker /* 14. COSQI INITIALIZE COSQF AND COSQB */
2721*3f1979aaSAndroid Build Coastguard Worker /* 15. COSQF FORWARD COSINE TRANSFORM WITH ODD WAVE NUMBERS */
2722*3f1979aaSAndroid Build Coastguard Worker /* 16. COSQB UNNORMALIZED INVERSE OF COSQF */
2723*3f1979aaSAndroid Build Coastguard Worker
2724*3f1979aaSAndroid Build Coastguard Worker /* 17. CFFTI INITIALIZE CFFTF AND CFFTB */
2725*3f1979aaSAndroid Build Coastguard Worker /* 18. CFFTF FORWARD TRANSFORM OF A COMPLEX PERIODIC SEQUENCE */
2726*3f1979aaSAndroid Build Coastguard Worker /* 19. CFFTB UNNORMALIZED INVERSE OF CFFTF */
2727*3f1979aaSAndroid Build Coastguard Worker
2728*3f1979aaSAndroid Build Coastguard Worker
2729*3f1979aaSAndroid Build Coastguard Worker sqrt2 = sqrt(2.f);
2730*3f1979aaSAndroid Build Coastguard Worker int all_ok = 1;
2731*3f1979aaSAndroid Build Coastguard Worker for (nz = 1; nz <= (int)(sizeof nd/sizeof nd[0]); ++nz) {
2732*3f1979aaSAndroid Build Coastguard Worker n = nd[nz - 1];
2733*3f1979aaSAndroid Build Coastguard Worker modn = n % 2;
2734*3f1979aaSAndroid Build Coastguard Worker fn = (real) n;
2735*3f1979aaSAndroid Build Coastguard Worker tfn = fn + fn;
2736*3f1979aaSAndroid Build Coastguard Worker np1 = n + 1;
2737*3f1979aaSAndroid Build Coastguard Worker nm1 = n - 1;
2738*3f1979aaSAndroid Build Coastguard Worker for (j = 1; j <= np1; ++j) {
2739*3f1979aaSAndroid Build Coastguard Worker x[j - 1] = sin((real) j * sqrt2);
2740*3f1979aaSAndroid Build Coastguard Worker y[j - 1] = x[j - 1];
2741*3f1979aaSAndroid Build Coastguard Worker xh[j - 1] = x[j - 1];
2742*3f1979aaSAndroid Build Coastguard Worker }
2743*3f1979aaSAndroid Build Coastguard Worker
2744*3f1979aaSAndroid Build Coastguard Worker /* TEST SUBROUTINES RFFTI,RFFTF AND RFFTB */
2745*3f1979aaSAndroid Build Coastguard Worker
2746*3f1979aaSAndroid Build Coastguard Worker rffti(n, w);
2747*3f1979aaSAndroid Build Coastguard Worker dt = (2*M_PI) / fn;
2748*3f1979aaSAndroid Build Coastguard Worker ns2 = (n + 1) / 2;
2749*3f1979aaSAndroid Build Coastguard Worker if (ns2 < 2) {
2750*3f1979aaSAndroid Build Coastguard Worker goto L104;
2751*3f1979aaSAndroid Build Coastguard Worker }
2752*3f1979aaSAndroid Build Coastguard Worker for (k = 2; k <= ns2; ++k) {
2753*3f1979aaSAndroid Build Coastguard Worker sum1 = 0.f;
2754*3f1979aaSAndroid Build Coastguard Worker sum2 = 0.f;
2755*3f1979aaSAndroid Build Coastguard Worker arg = (real) (k - 1) * dt;
2756*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= n; ++i) {
2757*3f1979aaSAndroid Build Coastguard Worker arg1 = (real) (i - 1) * arg;
2758*3f1979aaSAndroid Build Coastguard Worker sum1 += x[i - 1] * cos(arg1);
2759*3f1979aaSAndroid Build Coastguard Worker sum2 += x[i - 1] * sin(arg1);
2760*3f1979aaSAndroid Build Coastguard Worker }
2761*3f1979aaSAndroid Build Coastguard Worker y[(k << 1) - 3] = sum1;
2762*3f1979aaSAndroid Build Coastguard Worker y[(k << 1) - 2] = -sum2;
2763*3f1979aaSAndroid Build Coastguard Worker }
2764*3f1979aaSAndroid Build Coastguard Worker L104:
2765*3f1979aaSAndroid Build Coastguard Worker sum1 = 0.f;
2766*3f1979aaSAndroid Build Coastguard Worker sum2 = 0.f;
2767*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= nm1; i += 2) {
2768*3f1979aaSAndroid Build Coastguard Worker sum1 += x[i - 1];
2769*3f1979aaSAndroid Build Coastguard Worker sum2 += x[i];
2770*3f1979aaSAndroid Build Coastguard Worker }
2771*3f1979aaSAndroid Build Coastguard Worker if (modn == 1) {
2772*3f1979aaSAndroid Build Coastguard Worker sum1 += x[n - 1];
2773*3f1979aaSAndroid Build Coastguard Worker }
2774*3f1979aaSAndroid Build Coastguard Worker y[0] = sum1 + sum2;
2775*3f1979aaSAndroid Build Coastguard Worker if (modn == 0) {
2776*3f1979aaSAndroid Build Coastguard Worker y[n - 1] = sum1 - sum2;
2777*3f1979aaSAndroid Build Coastguard Worker }
2778*3f1979aaSAndroid Build Coastguard Worker rfftf(n, x, w);
2779*3f1979aaSAndroid Build Coastguard Worker rftf = 0.f;
2780*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= n; ++i) {
2781*3f1979aaSAndroid Build Coastguard Worker /* Computing MAX */
2782*3f1979aaSAndroid Build Coastguard Worker r2 = rftf, r3 = (r1 = x[i - 1] - y[i - 1], fabs(r1));
2783*3f1979aaSAndroid Build Coastguard Worker rftf = dmax(r2,r3);
2784*3f1979aaSAndroid Build Coastguard Worker x[i - 1] = xh[i - 1];
2785*3f1979aaSAndroid Build Coastguard Worker }
2786*3f1979aaSAndroid Build Coastguard Worker rftf /= fn;
2787*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= n; ++i) {
2788*3f1979aaSAndroid Build Coastguard Worker sum = x[0] * .5f;
2789*3f1979aaSAndroid Build Coastguard Worker arg = (real) (i - 1) * dt;
2790*3f1979aaSAndroid Build Coastguard Worker if (ns2 < 2) {
2791*3f1979aaSAndroid Build Coastguard Worker goto L108;
2792*3f1979aaSAndroid Build Coastguard Worker }
2793*3f1979aaSAndroid Build Coastguard Worker for (k = 2; k <= ns2; ++k) {
2794*3f1979aaSAndroid Build Coastguard Worker arg1 = (real) (k - 1) * arg;
2795*3f1979aaSAndroid Build Coastguard Worker sum = sum + x[(k << 1) - 3] * cos(arg1) - x[(k << 1) - 2] *
2796*3f1979aaSAndroid Build Coastguard Worker sin(arg1);
2797*3f1979aaSAndroid Build Coastguard Worker }
2798*3f1979aaSAndroid Build Coastguard Worker L108:
2799*3f1979aaSAndroid Build Coastguard Worker if (modn == 0) {
2800*3f1979aaSAndroid Build Coastguard Worker sum += (real)pow(-1, i-1) * .5f * x[n - 1];
2801*3f1979aaSAndroid Build Coastguard Worker }
2802*3f1979aaSAndroid Build Coastguard Worker y[i - 1] = sum + sum;
2803*3f1979aaSAndroid Build Coastguard Worker }
2804*3f1979aaSAndroid Build Coastguard Worker rfftb(n, x, w);
2805*3f1979aaSAndroid Build Coastguard Worker rftb = 0.f;
2806*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= n; ++i) {
2807*3f1979aaSAndroid Build Coastguard Worker /* Computing MAX */
2808*3f1979aaSAndroid Build Coastguard Worker r2 = rftb, r3 = (r1 = x[i - 1] - y[i - 1], fabs(r1));
2809*3f1979aaSAndroid Build Coastguard Worker rftb = dmax(r2,r3);
2810*3f1979aaSAndroid Build Coastguard Worker x[i - 1] = xh[i - 1];
2811*3f1979aaSAndroid Build Coastguard Worker y[i - 1] = xh[i - 1];
2812*3f1979aaSAndroid Build Coastguard Worker }
2813*3f1979aaSAndroid Build Coastguard Worker rfftb(n, y, w);
2814*3f1979aaSAndroid Build Coastguard Worker rfftf(n, y, w);
2815*3f1979aaSAndroid Build Coastguard Worker cf = 1.f / fn;
2816*3f1979aaSAndroid Build Coastguard Worker rftfb = 0.f;
2817*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= n; ++i) {
2818*3f1979aaSAndroid Build Coastguard Worker /* Computing MAX */
2819*3f1979aaSAndroid Build Coastguard Worker r2 = rftfb, r3 = (r1 = cf * y[i - 1] - x[i - 1], fabs(
2820*3f1979aaSAndroid Build Coastguard Worker r1));
2821*3f1979aaSAndroid Build Coastguard Worker rftfb = dmax(r2,r3);
2822*3f1979aaSAndroid Build Coastguard Worker }
2823*3f1979aaSAndroid Build Coastguard Worker
2824*3f1979aaSAndroid Build Coastguard Worker /* TEST SUBROUTINES SINTI AND SINT */
2825*3f1979aaSAndroid Build Coastguard Worker
2826*3f1979aaSAndroid Build Coastguard Worker dt = M_PI / fn;
2827*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= nm1; ++i) {
2828*3f1979aaSAndroid Build Coastguard Worker x[i - 1] = xh[i - 1];
2829*3f1979aaSAndroid Build Coastguard Worker }
2830*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= nm1; ++i) {
2831*3f1979aaSAndroid Build Coastguard Worker y[i - 1] = 0.f;
2832*3f1979aaSAndroid Build Coastguard Worker arg1 = (real) i * dt;
2833*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= nm1; ++k) {
2834*3f1979aaSAndroid Build Coastguard Worker y[i - 1] += x[k - 1] * sin((real) k * arg1);
2835*3f1979aaSAndroid Build Coastguard Worker }
2836*3f1979aaSAndroid Build Coastguard Worker y[i - 1] += y[i - 1];
2837*3f1979aaSAndroid Build Coastguard Worker }
2838*3f1979aaSAndroid Build Coastguard Worker sinti(nm1, w);
2839*3f1979aaSAndroid Build Coastguard Worker sint(nm1, x, w);
2840*3f1979aaSAndroid Build Coastguard Worker cf = .5f / fn;
2841*3f1979aaSAndroid Build Coastguard Worker sintt = 0.f;
2842*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= nm1; ++i) {
2843*3f1979aaSAndroid Build Coastguard Worker /* Computing MAX */
2844*3f1979aaSAndroid Build Coastguard Worker r2 = sintt, r3 = (r1 = x[i - 1] - y[i - 1], fabs(r1));
2845*3f1979aaSAndroid Build Coastguard Worker sintt = dmax(r2,r3);
2846*3f1979aaSAndroid Build Coastguard Worker x[i - 1] = xh[i - 1];
2847*3f1979aaSAndroid Build Coastguard Worker y[i - 1] = x[i - 1];
2848*3f1979aaSAndroid Build Coastguard Worker }
2849*3f1979aaSAndroid Build Coastguard Worker sintt = cf * sintt;
2850*3f1979aaSAndroid Build Coastguard Worker sint(nm1, x, w);
2851*3f1979aaSAndroid Build Coastguard Worker sint(nm1, x, w);
2852*3f1979aaSAndroid Build Coastguard Worker sintfb = 0.f;
2853*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= nm1; ++i) {
2854*3f1979aaSAndroid Build Coastguard Worker /* Computing MAX */
2855*3f1979aaSAndroid Build Coastguard Worker r2 = sintfb, r3 = (r1 = cf * x[i - 1] - y[i - 1], fabs(
2856*3f1979aaSAndroid Build Coastguard Worker r1));
2857*3f1979aaSAndroid Build Coastguard Worker sintfb = dmax(r2,r3);
2858*3f1979aaSAndroid Build Coastguard Worker }
2859*3f1979aaSAndroid Build Coastguard Worker
2860*3f1979aaSAndroid Build Coastguard Worker /* TEST SUBROUTINES COSTI AND COST */
2861*3f1979aaSAndroid Build Coastguard Worker
2862*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= np1; ++i) {
2863*3f1979aaSAndroid Build Coastguard Worker x[i - 1] = xh[i - 1];
2864*3f1979aaSAndroid Build Coastguard Worker }
2865*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= np1; ++i) {
2866*3f1979aaSAndroid Build Coastguard Worker y[i - 1] = (x[0] + (real) pow(-1, i+1) * x[n]) * .5f;
2867*3f1979aaSAndroid Build Coastguard Worker arg = (real) (i - 1) * dt;
2868*3f1979aaSAndroid Build Coastguard Worker for (k = 2; k <= n; ++k) {
2869*3f1979aaSAndroid Build Coastguard Worker y[i - 1] += x[k - 1] * cos((real) (k - 1) * arg);
2870*3f1979aaSAndroid Build Coastguard Worker }
2871*3f1979aaSAndroid Build Coastguard Worker y[i - 1] += y[i - 1];
2872*3f1979aaSAndroid Build Coastguard Worker }
2873*3f1979aaSAndroid Build Coastguard Worker costi(np1, w);
2874*3f1979aaSAndroid Build Coastguard Worker cost(np1, x, w);
2875*3f1979aaSAndroid Build Coastguard Worker costt = 0.f;
2876*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= np1; ++i) {
2877*3f1979aaSAndroid Build Coastguard Worker /* Computing MAX */
2878*3f1979aaSAndroid Build Coastguard Worker r2 = costt, r3 = (r1 = x[i - 1] - y[i - 1], fabs(r1));
2879*3f1979aaSAndroid Build Coastguard Worker costt = dmax(r2,r3);
2880*3f1979aaSAndroid Build Coastguard Worker x[i - 1] = xh[i - 1];
2881*3f1979aaSAndroid Build Coastguard Worker y[i - 1] = xh[i - 1];
2882*3f1979aaSAndroid Build Coastguard Worker }
2883*3f1979aaSAndroid Build Coastguard Worker costt = cf * costt;
2884*3f1979aaSAndroid Build Coastguard Worker cost(np1, x, w);
2885*3f1979aaSAndroid Build Coastguard Worker cost(np1, x, w);
2886*3f1979aaSAndroid Build Coastguard Worker costfb = 0.f;
2887*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= np1; ++i) {
2888*3f1979aaSAndroid Build Coastguard Worker /* Computing MAX */
2889*3f1979aaSAndroid Build Coastguard Worker r2 = costfb, r3 = (r1 = cf * x[i - 1] - y[i - 1], fabs(
2890*3f1979aaSAndroid Build Coastguard Worker r1));
2891*3f1979aaSAndroid Build Coastguard Worker costfb = dmax(r2,r3);
2892*3f1979aaSAndroid Build Coastguard Worker }
2893*3f1979aaSAndroid Build Coastguard Worker
2894*3f1979aaSAndroid Build Coastguard Worker /* TEST SUBROUTINES SINQI,SINQF AND SINQB */
2895*3f1979aaSAndroid Build Coastguard Worker
2896*3f1979aaSAndroid Build Coastguard Worker cf = .25f / fn;
2897*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= n; ++i) {
2898*3f1979aaSAndroid Build Coastguard Worker y[i - 1] = xh[i - 1];
2899*3f1979aaSAndroid Build Coastguard Worker }
2900*3f1979aaSAndroid Build Coastguard Worker dt = M_PI / (fn + fn);
2901*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= n; ++i) {
2902*3f1979aaSAndroid Build Coastguard Worker x[i - 1] = 0.f;
2903*3f1979aaSAndroid Build Coastguard Worker arg = dt * (real) i;
2904*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= n; ++k) {
2905*3f1979aaSAndroid Build Coastguard Worker x[i - 1] += y[k - 1] * sin((real) (k + k - 1) * arg);
2906*3f1979aaSAndroid Build Coastguard Worker }
2907*3f1979aaSAndroid Build Coastguard Worker x[i - 1] *= 4.f;
2908*3f1979aaSAndroid Build Coastguard Worker }
2909*3f1979aaSAndroid Build Coastguard Worker sinqi(n, w);
2910*3f1979aaSAndroid Build Coastguard Worker sinqb(n, y, w);
2911*3f1979aaSAndroid Build Coastguard Worker sinqbt = 0.f;
2912*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= n; ++i) {
2913*3f1979aaSAndroid Build Coastguard Worker /* Computing MAX */
2914*3f1979aaSAndroid Build Coastguard Worker r2 = sinqbt, r3 = (r1 = y[i - 1] - x[i - 1], fabs(r1))
2915*3f1979aaSAndroid Build Coastguard Worker ;
2916*3f1979aaSAndroid Build Coastguard Worker sinqbt = dmax(r2,r3);
2917*3f1979aaSAndroid Build Coastguard Worker x[i - 1] = xh[i - 1];
2918*3f1979aaSAndroid Build Coastguard Worker }
2919*3f1979aaSAndroid Build Coastguard Worker sinqbt = cf * sinqbt;
2920*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= n; ++i) {
2921*3f1979aaSAndroid Build Coastguard Worker arg = (real) (i + i - 1) * dt;
2922*3f1979aaSAndroid Build Coastguard Worker y[i - 1] = (real) pow(-1, i+1) * .5f * x[n - 1];
2923*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= nm1; ++k) {
2924*3f1979aaSAndroid Build Coastguard Worker y[i - 1] += x[k - 1] * sin((real) k * arg);
2925*3f1979aaSAndroid Build Coastguard Worker }
2926*3f1979aaSAndroid Build Coastguard Worker y[i - 1] += y[i - 1];
2927*3f1979aaSAndroid Build Coastguard Worker }
2928*3f1979aaSAndroid Build Coastguard Worker sinqf(n, x, w);
2929*3f1979aaSAndroid Build Coastguard Worker sinqft = 0.f;
2930*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= n; ++i) {
2931*3f1979aaSAndroid Build Coastguard Worker /* Computing MAX */
2932*3f1979aaSAndroid Build Coastguard Worker r2 = sinqft, r3 = (r1 = x[i - 1] - y[i - 1], fabs(r1))
2933*3f1979aaSAndroid Build Coastguard Worker ;
2934*3f1979aaSAndroid Build Coastguard Worker sinqft = dmax(r2,r3);
2935*3f1979aaSAndroid Build Coastguard Worker y[i - 1] = xh[i - 1];
2936*3f1979aaSAndroid Build Coastguard Worker x[i - 1] = xh[i - 1];
2937*3f1979aaSAndroid Build Coastguard Worker }
2938*3f1979aaSAndroid Build Coastguard Worker sinqf(n, y, w);
2939*3f1979aaSAndroid Build Coastguard Worker sinqb(n, y, w);
2940*3f1979aaSAndroid Build Coastguard Worker sinqfb = 0.f;
2941*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= n; ++i) {
2942*3f1979aaSAndroid Build Coastguard Worker /* Computing MAX */
2943*3f1979aaSAndroid Build Coastguard Worker r2 = sinqfb, r3 = (r1 = cf * y[i - 1] - x[i - 1], fabs(
2944*3f1979aaSAndroid Build Coastguard Worker r1));
2945*3f1979aaSAndroid Build Coastguard Worker sinqfb = dmax(r2,r3);
2946*3f1979aaSAndroid Build Coastguard Worker }
2947*3f1979aaSAndroid Build Coastguard Worker
2948*3f1979aaSAndroid Build Coastguard Worker /* TEST SUBROUTINES COSQI,COSQF AND COSQB */
2949*3f1979aaSAndroid Build Coastguard Worker
2950*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= n; ++i) {
2951*3f1979aaSAndroid Build Coastguard Worker y[i - 1] = xh[i - 1];
2952*3f1979aaSAndroid Build Coastguard Worker }
2953*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= n; ++i) {
2954*3f1979aaSAndroid Build Coastguard Worker x[i - 1] = 0.f;
2955*3f1979aaSAndroid Build Coastguard Worker arg = (real) (i - 1) * dt;
2956*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= n; ++k) {
2957*3f1979aaSAndroid Build Coastguard Worker x[i - 1] += y[k - 1] * cos((real) (k + k - 1) * arg);
2958*3f1979aaSAndroid Build Coastguard Worker }
2959*3f1979aaSAndroid Build Coastguard Worker x[i - 1] *= 4.f;
2960*3f1979aaSAndroid Build Coastguard Worker }
2961*3f1979aaSAndroid Build Coastguard Worker cosqi(n, w);
2962*3f1979aaSAndroid Build Coastguard Worker cosqb(n, y, w);
2963*3f1979aaSAndroid Build Coastguard Worker cosqbt = 0.f;
2964*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= n; ++i) {
2965*3f1979aaSAndroid Build Coastguard Worker /* Computing MAX */
2966*3f1979aaSAndroid Build Coastguard Worker r2 = cosqbt, r3 = (r1 = x[i - 1] - y[i - 1], fabs(r1))
2967*3f1979aaSAndroid Build Coastguard Worker ;
2968*3f1979aaSAndroid Build Coastguard Worker cosqbt = dmax(r2,r3);
2969*3f1979aaSAndroid Build Coastguard Worker x[i - 1] = xh[i - 1];
2970*3f1979aaSAndroid Build Coastguard Worker }
2971*3f1979aaSAndroid Build Coastguard Worker cosqbt = cf * cosqbt;
2972*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= n; ++i) {
2973*3f1979aaSAndroid Build Coastguard Worker y[i - 1] = x[0] * .5f;
2974*3f1979aaSAndroid Build Coastguard Worker arg = (real) (i + i - 1) * dt;
2975*3f1979aaSAndroid Build Coastguard Worker for (k = 2; k <= n; ++k) {
2976*3f1979aaSAndroid Build Coastguard Worker y[i - 1] += x[k - 1] * cos((real) (k - 1) * arg);
2977*3f1979aaSAndroid Build Coastguard Worker }
2978*3f1979aaSAndroid Build Coastguard Worker y[i - 1] += y[i - 1];
2979*3f1979aaSAndroid Build Coastguard Worker }
2980*3f1979aaSAndroid Build Coastguard Worker cosqf(n, x, w);
2981*3f1979aaSAndroid Build Coastguard Worker cosqft = 0.f;
2982*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= n; ++i) {
2983*3f1979aaSAndroid Build Coastguard Worker /* Computing MAX */
2984*3f1979aaSAndroid Build Coastguard Worker r2 = cosqft, r3 = (r1 = y[i - 1] - x[i - 1], fabs(r1))
2985*3f1979aaSAndroid Build Coastguard Worker ;
2986*3f1979aaSAndroid Build Coastguard Worker cosqft = dmax(r2,r3);
2987*3f1979aaSAndroid Build Coastguard Worker x[i - 1] = xh[i - 1];
2988*3f1979aaSAndroid Build Coastguard Worker y[i - 1] = xh[i - 1];
2989*3f1979aaSAndroid Build Coastguard Worker }
2990*3f1979aaSAndroid Build Coastguard Worker cosqft = cf * cosqft;
2991*3f1979aaSAndroid Build Coastguard Worker cosqb(n, x, w);
2992*3f1979aaSAndroid Build Coastguard Worker cosqf(n, x, w);
2993*3f1979aaSAndroid Build Coastguard Worker cosqfb = 0.f;
2994*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= n; ++i) {
2995*3f1979aaSAndroid Build Coastguard Worker /* Computing MAX */
2996*3f1979aaSAndroid Build Coastguard Worker r2 = cosqfb, r3 = (r1 = cf * x[i - 1] - y[i - 1], fabs(r1));
2997*3f1979aaSAndroid Build Coastguard Worker cosqfb = dmax(r2,r3);
2998*3f1979aaSAndroid Build Coastguard Worker }
2999*3f1979aaSAndroid Build Coastguard Worker
3000*3f1979aaSAndroid Build Coastguard Worker /* TEST CFFTI,CFFTF,CFFTB */
3001*3f1979aaSAndroid Build Coastguard Worker
3002*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= n; ++i) {
3003*3f1979aaSAndroid Build Coastguard Worker r1 = cos(sqrt2 * (real) i);
3004*3f1979aaSAndroid Build Coastguard Worker r2 = sin(sqrt2 * (real) (i * i));
3005*3f1979aaSAndroid Build Coastguard Worker q1.r = r1, q1.i = r2;
3006*3f1979aaSAndroid Build Coastguard Worker cx[i-1].r = q1.r, cx[i-1].i = q1.i;
3007*3f1979aaSAndroid Build Coastguard Worker }
3008*3f1979aaSAndroid Build Coastguard Worker dt = (2*M_PI) / fn;
3009*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= n; ++i) {
3010*3f1979aaSAndroid Build Coastguard Worker arg1 = -((real) (i - 1)) * dt;
3011*3f1979aaSAndroid Build Coastguard Worker cy[i-1].r = 0.f, cy[i-1].i = 0.f;
3012*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= n; ++k) {
3013*3f1979aaSAndroid Build Coastguard Worker arg2 = (real) (k - 1) * arg1;
3014*3f1979aaSAndroid Build Coastguard Worker r1 = cos(arg2);
3015*3f1979aaSAndroid Build Coastguard Worker r2 = sin(arg2);
3016*3f1979aaSAndroid Build Coastguard Worker q3.r = r1, q3.i = r2;
3017*3f1979aaSAndroid Build Coastguard Worker q2.r = q3.r * cx[k-1].r - q3.i * cx[k-1].i, q2.i =
3018*3f1979aaSAndroid Build Coastguard Worker q3.r * cx[k-1].i + q3.i * cx[k-1].r;
3019*3f1979aaSAndroid Build Coastguard Worker q1.r = cy[i-1].r + q2.r, q1.i = cy[i-1].i + q2.i;
3020*3f1979aaSAndroid Build Coastguard Worker cy[i-1].r = q1.r, cy[i-1].i = q1.i;
3021*3f1979aaSAndroid Build Coastguard Worker }
3022*3f1979aaSAndroid Build Coastguard Worker }
3023*3f1979aaSAndroid Build Coastguard Worker cffti(n, w);
3024*3f1979aaSAndroid Build Coastguard Worker cfftf(n, (real*)cx, w);
3025*3f1979aaSAndroid Build Coastguard Worker dcfftf = 0.f;
3026*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= n; ++i) {
3027*3f1979aaSAndroid Build Coastguard Worker /* Computing MAX */
3028*3f1979aaSAndroid Build Coastguard Worker q1.r = cx[i-1].r - cy[i-1].r, q1.i = cx[i-1].i - cy[i-1]
3029*3f1979aaSAndroid Build Coastguard Worker .i;
3030*3f1979aaSAndroid Build Coastguard Worker r1 = dcfftf, r2 = c_abs(&q1);
3031*3f1979aaSAndroid Build Coastguard Worker dcfftf = dmax(r1,r2);
3032*3f1979aaSAndroid Build Coastguard Worker q1.r = cx[i-1].r / fn, q1.i = cx[i-1].i / fn;
3033*3f1979aaSAndroid Build Coastguard Worker cx[i-1].r = q1.r, cx[i-1].i = q1.i;
3034*3f1979aaSAndroid Build Coastguard Worker }
3035*3f1979aaSAndroid Build Coastguard Worker dcfftf /= fn;
3036*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= n; ++i) {
3037*3f1979aaSAndroid Build Coastguard Worker arg1 = (real) (i - 1) * dt;
3038*3f1979aaSAndroid Build Coastguard Worker cy[i-1].r = 0.f, cy[i-1].i = 0.f;
3039*3f1979aaSAndroid Build Coastguard Worker for (k = 1; k <= n; ++k) {
3040*3f1979aaSAndroid Build Coastguard Worker arg2 = (real) (k - 1) * arg1;
3041*3f1979aaSAndroid Build Coastguard Worker r1 = cos(arg2);
3042*3f1979aaSAndroid Build Coastguard Worker r2 = sin(arg2);
3043*3f1979aaSAndroid Build Coastguard Worker q3.r = r1, q3.i = r2;
3044*3f1979aaSAndroid Build Coastguard Worker q2.r = q3.r * cx[k-1].r - q3.i * cx[k-1].i, q2.i =
3045*3f1979aaSAndroid Build Coastguard Worker q3.r * cx[k-1].i + q3.i * cx[k-1].r;
3046*3f1979aaSAndroid Build Coastguard Worker q1.r = cy[i-1].r + q2.r, q1.i = cy[i-1].i + q2.i;
3047*3f1979aaSAndroid Build Coastguard Worker cy[i-1].r = q1.r, cy[i-1].i = q1.i;
3048*3f1979aaSAndroid Build Coastguard Worker }
3049*3f1979aaSAndroid Build Coastguard Worker }
3050*3f1979aaSAndroid Build Coastguard Worker cfftb(n, (real*)cx, w);
3051*3f1979aaSAndroid Build Coastguard Worker dcfftb = 0.f;
3052*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= n; ++i) {
3053*3f1979aaSAndroid Build Coastguard Worker /* Computing MAX */
3054*3f1979aaSAndroid Build Coastguard Worker q1.r = cx[i-1].r - cy[i-1].r, q1.i = cx[i-1].i - cy[i-1].i;
3055*3f1979aaSAndroid Build Coastguard Worker r1 = dcfftb, r2 = c_abs(&q1);
3056*3f1979aaSAndroid Build Coastguard Worker dcfftb = dmax(r1,r2);
3057*3f1979aaSAndroid Build Coastguard Worker cx[i-1].r = cy[i-1].r, cx[i-1].i = cy[i-1].i;
3058*3f1979aaSAndroid Build Coastguard Worker }
3059*3f1979aaSAndroid Build Coastguard Worker cf = 1.f / fn;
3060*3f1979aaSAndroid Build Coastguard Worker cfftf(n, (real*)cx, w);
3061*3f1979aaSAndroid Build Coastguard Worker cfftb(n, (real*)cx, w);
3062*3f1979aaSAndroid Build Coastguard Worker dcfb = 0.f;
3063*3f1979aaSAndroid Build Coastguard Worker for (i = 1; i <= n; ++i) {
3064*3f1979aaSAndroid Build Coastguard Worker /* Computing MAX */
3065*3f1979aaSAndroid Build Coastguard Worker q2.r = cf * cx[i-1].r, q2.i = cf * cx[i-1].i;
3066*3f1979aaSAndroid Build Coastguard Worker q1.r = q2.r - cy[i-1].r, q1.i = q2.i - cy[i-1].i;
3067*3f1979aaSAndroid Build Coastguard Worker r1 = dcfb, r2 = c_abs(&q1);
3068*3f1979aaSAndroid Build Coastguard Worker dcfb = dmax(r1,r2);
3069*3f1979aaSAndroid Build Coastguard Worker }
3070*3f1979aaSAndroid Build Coastguard Worker printf("%d\tRFFTF %10.3g\tRFFTB %10.ge\tRFFTFB %10.3g", n, rftf, rftb, rftfb);
3071*3f1979aaSAndroid Build Coastguard Worker printf( "\tSINT %10.3g\tSINTFB %10.ge\tCOST %10.3g\n", sintt, sintfb, costt);
3072*3f1979aaSAndroid Build Coastguard Worker printf( "\tCOSTFB %10.3g\tSINQF %10.ge\tSINQB %10.3g", costfb, sinqft, sinqbt);
3073*3f1979aaSAndroid Build Coastguard Worker printf( "\tSINQFB %10.3g\tCOSQF %10.ge\tCOSQB %10.3g\n", sinqfb, cosqft, cosqbt);
3074*3f1979aaSAndroid Build Coastguard Worker printf( "\tCOSQFB %10.3g\t", cosqfb);
3075*3f1979aaSAndroid Build Coastguard Worker printf( "\tCFFTF %10.ge\tCFFTB %10.3g\n", dcfftf, dcfftb);
3076*3f1979aaSAndroid Build Coastguard Worker printf( "\tCFFTFB %10.3g\n", dcfb);
3077*3f1979aaSAndroid Build Coastguard Worker
3078*3f1979aaSAndroid Build Coastguard Worker #define CHECK(x) if (x > 1e-3) { printf(#x " failed: %g\n", x); all_ok = 0; }
3079*3f1979aaSAndroid Build Coastguard Worker CHECK(rftf); CHECK(rftb); CHECK(rftfb); CHECK(sintt); CHECK(sintfb); CHECK(costt);
3080*3f1979aaSAndroid Build Coastguard Worker CHECK(costfb); CHECK(sinqft); CHECK(sinqbt); CHECK(sinqfb); CHECK(cosqft); CHECK(cosqbt);
3081*3f1979aaSAndroid Build Coastguard Worker CHECK(cosqfb); CHECK(dcfftf); CHECK(dcfftb);
3082*3f1979aaSAndroid Build Coastguard Worker }
3083*3f1979aaSAndroid Build Coastguard Worker
3084*3f1979aaSAndroid Build Coastguard Worker if (all_ok) printf("Everything looks fine.\n");
3085*3f1979aaSAndroid Build Coastguard Worker else printf("ERRORS WERE DETECTED.\n");
3086*3f1979aaSAndroid Build Coastguard Worker /*
3087*3f1979aaSAndroid Build Coastguard Worker expected:
3088*3f1979aaSAndroid Build Coastguard Worker 120 RFFTF 2.786e-06 RFFTB 6.847e-04 RFFTFB 2.795e-07 SINT 1.312e-06 SINTFB 1.237e-06 COST 1.319e-06
3089*3f1979aaSAndroid Build Coastguard Worker COSTFB 4.355e-06 SINQF 3.281e-04 SINQB 1.876e-06 SINQFB 2.198e-07 COSQF 6.199e-07 COSQB 2.193e-06
3090*3f1979aaSAndroid Build Coastguard Worker COSQFB 2.300e-07 DEZF 5.573e-06 DEZB 1.363e-05 DEZFB 1.371e-06 CFFTF 5.590e-06 CFFTB 4.751e-05
3091*3f1979aaSAndroid Build Coastguard Worker CFFTFB 4.215e-07
3092*3f1979aaSAndroid Build Coastguard Worker 54 RFFTF 4.708e-07 RFFTB 3.052e-05 RFFTFB 3.439e-07 SINT 3.532e-07 SINTFB 4.145e-07 COST 3.002e-07
3093*3f1979aaSAndroid Build Coastguard Worker COSTFB 6.343e-07 SINQF 4.959e-05 SINQB 4.415e-07 SINQFB 2.882e-07 COSQF 2.826e-07 COSQB 2.472e-07
3094*3f1979aaSAndroid Build Coastguard Worker COSQFB 3.439e-07 DEZF 9.388e-07 DEZB 5.066e-06 DEZFB 5.960e-07 CFFTF 1.426e-06 CFFTB 9.482e-06
3095*3f1979aaSAndroid Build Coastguard Worker CFFTFB 2.980e-07
3096*3f1979aaSAndroid Build Coastguard Worker 49 RFFTF 4.476e-07 RFFTB 5.341e-05 RFFTFB 2.574e-07 SINT 9.196e-07 SINTFB 9.401e-07 COST 8.174e-07
3097*3f1979aaSAndroid Build Coastguard Worker COSTFB 1.331e-06 SINQF 4.005e-05 SINQB 9.342e-07 SINQFB 3.057e-07 COSQF 2.530e-07 COSQB 6.228e-07
3098*3f1979aaSAndroid Build Coastguard Worker COSQFB 4.826e-07 DEZF 9.071e-07 DEZB 4.590e-06 DEZFB 5.960e-07 CFFTF 2.095e-06 CFFTB 1.414e-05
3099*3f1979aaSAndroid Build Coastguard Worker CFFTFB 7.398e-07
3100*3f1979aaSAndroid Build Coastguard Worker 32 RFFTF 4.619e-07 RFFTB 2.861e-05 RFFTFB 1.192e-07 SINT 3.874e-07 SINTFB 4.172e-07 COST 4.172e-07
3101*3f1979aaSAndroid Build Coastguard Worker COSTFB 1.699e-06 SINQF 2.551e-05 SINQB 6.407e-07 SINQFB 2.980e-07 COSQF 1.639e-07 COSQB 1.714e-07
3102*3f1979aaSAndroid Build Coastguard Worker COSQFB 2.384e-07 DEZF 1.013e-06 DEZB 2.339e-06 DEZFB 7.749e-07 CFFTF 1.127e-06 CFFTB 6.744e-06
3103*3f1979aaSAndroid Build Coastguard Worker CFFTFB 2.666e-07
3104*3f1979aaSAndroid Build Coastguard Worker 4 RFFTF 1.490e-08 RFFTB 1.490e-07 RFFTFB 5.960e-08 SINT 7.451e-09 SINTFB 0.000e+00 COST 2.980e-08
3105*3f1979aaSAndroid Build Coastguard Worker COSTFB 1.192e-07 SINQF 4.768e-07 SINQB 2.980e-08 SINQFB 5.960e-08 COSQF 2.608e-08 COSQB 5.960e-08
3106*3f1979aaSAndroid Build Coastguard Worker COSQFB 1.192e-07 DEZF 2.980e-08 DEZB 5.960e-08 DEZFB 0.000e+00 CFFTF 6.664e-08 CFFTB 5.960e-08
3107*3f1979aaSAndroid Build Coastguard Worker CFFTFB 6.144e-08
3108*3f1979aaSAndroid Build Coastguard Worker 3 RFFTF 3.974e-08 RFFTB 1.192e-07 RFFTFB 3.303e-08 SINT 1.987e-08 SINTFB 1.069e-08 COST 4.967e-08
3109*3f1979aaSAndroid Build Coastguard Worker COSTFB 5.721e-08 SINQF 8.941e-08 SINQB 2.980e-08 SINQFB 1.259e-07 COSQF 7.451e-09 COSQB 4.967e-08
3110*3f1979aaSAndroid Build Coastguard Worker COSQFB 7.029e-08 DEZF 1.192e-07 DEZB 5.960e-08 DEZFB 5.960e-08 CFFTF 7.947e-08 CFFTB 8.429e-08
3111*3f1979aaSAndroid Build Coastguard Worker CFFTFB 9.064e-08
3112*3f1979aaSAndroid Build Coastguard Worker 2 RFFTF 0.000e+00 RFFTB 0.000e+00 RFFTFB 0.000e+00 SINT 0.000e+00 SINTFB 0.000e+00 COST 0.000e+00
3113*3f1979aaSAndroid Build Coastguard Worker COSTFB 0.000e+00 SINQF 1.192e-07 SINQB 2.980e-08 SINQFB 5.960e-08 COSQF 7.451e-09 COSQB 1.490e-08
3114*3f1979aaSAndroid Build Coastguard Worker COSQFB 0.000e+00 DEZF 0.000e+00 DEZB 0.000e+00 DEZFB 0.000e+00 CFFTF 0.000e+00 CFFTB 5.960e-08
3115*3f1979aaSAndroid Build Coastguard Worker CFFTFB 5.960e-08
3116*3f1979aaSAndroid Build Coastguard Worker Everything looks fine.
3117*3f1979aaSAndroid Build Coastguard Worker
3118*3f1979aaSAndroid Build Coastguard Worker */
3119*3f1979aaSAndroid Build Coastguard Worker
3120*3f1979aaSAndroid Build Coastguard Worker return all_ok ? 0 : 1;
3121*3f1979aaSAndroid Build Coastguard Worker }
3122*3f1979aaSAndroid Build Coastguard Worker #endif /* TESTING_FFTPACK */
3123