EMAN2 works with both fftw2 and fftw3. A user makes the choice at compile time. A standard interface is defined to do fft:
class EMfft {
public:
static int real_to_complex_1d(float *real_data, float *complex_data,
int n);
static int complex_to_real_1d(float *complex_data, float *real_data,
int n);
static int real_to_complex_nd(float *real_data, float *complex_data,
int nx, int ny, int nz);
static int complex_to_real_nd(float *complex_data, float *real_data,
int nx, int ny, int nz);
};