// FFT (Fast Fourier Transform) Server based on FFTPack // R. Ansari 1999-2000 // DAPNIA/SPP (Saclay) / CEA LAL - IN2P3/CNRS (Orsay) #ifndef FFTPServer_H_SEEN #define FFTPServer_H_SEEN #include "fftservintf.h" // implementation de FFTServerInterface en utilisant FFTPack namespace SOPHYA { //! An FFT server based on fftpack. class FFTPackServer : public FFTServerInterface { public: FFTPackServer(); virtual ~FFTPackServer(); // Implementation de l'interface FFTServerInterface virtual FFTServerInterface * Clone(); // Transforme unidimensionnel sur des double virtual void FFTForward(TArray< complex > const & in, TArray< complex > & out); virtual void FFTBackward(TArray< complex > const & in, TArray< complex > & out); virtual void FFTForward(TArray< r_8 > const & in, TArray< complex > & out); virtual void FFTBackward(TArray< complex > const & in, TArray< r_8 > & out, bool usoutsz=false); // Transforme unidimensionnel sur des float virtual void FFTForward(TArray< complex > const & in, TArray< complex > & out); virtual void FFTBackward(TArray< complex > const & in, TArray< complex > & out); virtual void FFTForward(TArray< r_4 > const & in, TArray< complex > & out); virtual void FFTBackward(TArray< complex > const & in, TArray< r_4 > & out, bool usoutsz=false); // Methodes statiques pour reordonner les donnees static void ReShapetoReal(TArray< complex > const & in, TArray< r_8 > & out); static void ReShapetoCompl(TArray< r_8 > const & in, TArray< complex > & out); static void ReShapetoReal(TArray< complex > const & in, TArray< r_4 > & out); static void ReShapetoCompl(TArray< r_4 > const & in, TArray< complex > & out); // Methodes propres a cette classe virtual void fftf(int_4 l, float* inout); virtual void fftb(int_4 l, float* inout); virtual void fftf(int_4 l, double* inout); virtual void fftb(int_4 l, double* inout); virtual void fftf(int_4 l, complex* inout); virtual void fftb(int_4 l, complex* inout); virtual void fftf(int_4 l, complex* inout); virtual void fftb(int_4 l, complex* inout); protected: virtual void checkint_rfft(int_4 l); virtual void checkint_dfft(int_4 l); virtual void checkint_cfft(int_4 l); virtual void checkint_cdfft(int_4 l); int sz_rfft; r_4* ws_rfft; int sz_cfft; r_4* ws_cfft; int sz_dfft; r_8* ws_dfft; int sz_cdfft; r_8* ws_cdfft; FFTArrayChecker ckR4; FFTArrayChecker ckR8; }; } // Fin du namespace #endif