int sz = (6000.0 - 0.0) / int_step_size;
double h = (6000.0 - 0.0) / sz;
- fftw_plan f1, f2, b;
- complex<double> *func1, *func2, *res;
-
- func1 = reinterpret_cast<complex<double> *>(fftw_malloc(sz*2*sizeof(complex<double>)));
- func2 = reinterpret_cast<complex<double> *>(fftw_malloc(sz*2*sizeof(complex<double>)));
- res = reinterpret_cast<complex<double> *>(fftw_malloc(sz*2*sizeof(complex<double>)));
- f1 = fftw_plan_dft_1d(sz*2,
- reinterpret_cast<fftw_complex*>(func1),
- reinterpret_cast<fftw_complex*>(func1),
- FFTW_FORWARD,
- FFTW_MEASURE);
- f2 = fftw_plan_dft_1d(sz*2,
- reinterpret_cast<fftw_complex*>(func2),
- reinterpret_cast<fftw_complex*>(func2),
- FFTW_FORWARD,
- FFTW_MEASURE);
- b = fftw_plan_dft_1d(sz*2,
- reinterpret_cast<fftw_complex*>(res),
- reinterpret_cast<fftw_complex*>(res),
- FFTW_BACKWARD,
- FFTW_MEASURE);
+ static bool inited = false;
+ static fftw_plan f1, f2, b;
+ static complex<double> *func1, *func2, *res;
+
+ if (!inited) {
+ func1 = reinterpret_cast<complex<double> *>(fftw_malloc(sz*2*sizeof(complex<double>)));
+ func2 = reinterpret_cast<complex<double> *>(fftw_malloc(sz*2*sizeof(complex<double>)));
+ res = reinterpret_cast<complex<double> *>(fftw_malloc(sz*2*sizeof(complex<double>)));
+ f1 = fftw_plan_dft_1d(sz*2,
+ reinterpret_cast<fftw_complex*>(func1),
+ reinterpret_cast<fftw_complex*>(func1),
+ FFTW_FORWARD,
+ FFTW_MEASURE);
+ f2 = fftw_plan_dft_1d(sz*2,
+ reinterpret_cast<fftw_complex*>(func2),
+ reinterpret_cast<fftw_complex*>(func2),
+ FFTW_FORWARD,
+ FFTW_MEASURE);
+ b = fftw_plan_dft_1d(sz*2,
+ reinterpret_cast<fftw_complex*>(res),
+ reinterpret_cast<fftw_complex*>(res),
+ FFTW_BACKWARD,
+ FFTW_MEASURE);
+ inited = true;
+ }
// start off by zero
for (int i = 0; i < sz*2; ++i) {