Initial snark14m import
[snark14.git] / src / snark / foru_fft.cpp
1 /*
2  ***********************************************************
3  $SNARK_Header: S N A R K  1 4 - A PICTURE RECONSTRUCTION PROGRAM $
4  $HeadURL: svn://dig.cs.gc.cuny.edu/snark/trunk/src/snark/foru_fft.cpp $
5  $LastChangedRevision: 85 $
6  $Date: 2014-07-02 16:07:08 -0400 (Wed, 02 Jul 2014) $
7  $Author: agulati $
8  ***********************************************************
9
10  FFT: FAST FOURIER TRANSFORM
11  PURPOSE: PERFORM FOURIER TRANSFORM ON ARRAY X DIMENSIONED BY N
12  INVDIR = 1 : FORWARD TRANSFORM
13  -1: BACKTRANSFORM
14  */
15
16 #include <cstdio>
17 #include <cmath>
18 #include "blkdta.h"
19 #include "rtfort.h"
20 #include "fourie.h"
21 #include "consts.h"
22 #include "uiod.h"
23
24 #include "foru.h"
25
26 void foru_class::fft(REAL* x, INTEGER* n, INTEGER invdir, REAL fact)
27 {
28         INTEGER n2;
29         INTEGER kh;
30         INTEGER k;
31
32         if (invdir != -1)
33         {
34
35                 n2 = Fourie.nsize1 + 2;
36
37                 rtfort(x, n, invdir);
38
39                 kh = Fourie.nsize1 + 2;
40                 for (k = 0; k < kh; k++)
41                 {
42                         x[k] *= fact;
43                         if (fabs(x[k]) <= Consts.zero)
44                                 x[k] = 0.0;
45                 }
46                 return;
47         }
48
49         rtfort(x, n, invdir);
50
51         kh = Fourie.nsize2 * (Fourie.nsize2 + 2);
52
53         for (k = 0; k < kh; k++)
54         {
55                 x[k] *= fact;
56         }
57         return;
58 }