LORENE
fftw_back.C
1#include <fftw3.h>
2#include "tbl.h"
3
4namespace Lorene {
5
6namespace {
7 const int nmax = 50 ; //Maximal number of FFT sizes
8 int nworked = 0 ;
9 Tbl* tab_tab[nmax] ;
10 fftw_plan plan_fft[nmax] ;
11 int nb_fft[nmax] ;
12}
13
14fftw_plan back_fft(int n, Tbl*& pg) {
15 int index = -1 ;
16 for (int i=0; ((i<nworked) && (index<0)); i++)
17 if (nb_fft[i] == n) index = i ; //Has the plan already been estimated?
18
19 if (index <0) { //New plan needed
20 index = nworked ;
21 if (index >= nmax) {
22 cout << "back_fft: " << endl ;
23 cout << "too many plans!" << endl ;
24 abort() ;
25 }
26 tab_tab[index] = new Tbl(n) ;
27 Tbl& tab = (*tab_tab[index]) ;
28 tab.set_etat_qcq() ;
29 plan_fft[index] =
30 fftw_plan_r2r_1d(n, tab.t, tab.t, FFTW_HC2R, FFTW_ESTIMATE) ;
31 nb_fft[index] = n ;
32 nworked++ ;
33 }
34 assert((index>=0)&&(index<nmax)) ;
35 pg = tab_tab[index] ;
36 return plan_fft[index] ;
37}
38
39}
Lorene prototypes.
Definition app_hor.h:64