@@ -27,10 +27,10 @@ using pfc::types::Int3;
2727 * real-to-complex symmetry, and the boxes for real and complex FFT data.
2828 */
2929struct FFTLayout {
30- const Decomposition m_decomposition; // /< The Decomposition object.
31- const int m_r2c_direction = 0 ; // /< Real-to-complex symmetry direction.
32- const std::vector<box3di > m_real_boxes; // /< Real boxes for FFT.
33- const std::vector<box3di > m_complex_boxes; // /< Complex boxes for FFT.
30+ const Decomposition m_decomposition; // /< The Decomposition object.
31+ const int m_r2c_direction = 0 ; // /< Real-to-complex symmetry direction.
32+ const std::vector<heffte::box3d< int > > m_real_boxes; // /< Real boxes for FFT.
33+ const std::vector<heffte::box3d< int > > m_complex_boxes; // /< Complex boxes for FFT.
3434};
3535
3636/* *
@@ -62,15 +62,43 @@ using pfc::types::Int3;
6262using pfc::types::Real3;
6363
6464using Decomposition = pfc::decomposition::Decomposition;
65+ using RealVector = std::vector<double >;
6566using ComplexVector = std::vector<std::complex <double >>;
6667using fft_r2c = heffte::fft3d_r2c<heffte::backend::fftw>;
6768using box3di = heffte::box3d<int >; // /< Type alias for 3D integer box.
6869
70+ struct IFFT {
71+ virtual ~IFFT () = default ;
72+
73+ /* *
74+ * @brief Performs the forward FFT transformation.
75+ *
76+ * @param in Input vector of real values.
77+ * @param out Output vector of complex values.
78+ */
79+ virtual void forward (const RealVector &in, ComplexVector &out) = 0;
80+
81+ /* *
82+ * @brief Performs the backward (inverse) FFT transformation.
83+ *
84+ * @param in Input vector of complex values.
85+ * @param out Output vector of real values.
86+ */
87+ virtual void backward (const ComplexVector &in, RealVector &out) = 0;
88+
89+ virtual void reset_fft_time () = 0;
90+ virtual double get_fft_time () const = 0;
91+
92+ virtual size_t size_inbox () const = 0;
93+ virtual size_t size_outbox () const = 0;
94+ virtual size_t size_workspace () const = 0;
95+ };
96+
6997/* *
7098 * @brief FFT class for performing forward and backward Fast Fourier
7199 * Transformations.
72100 */
73- struct FFT {
101+ struct FFT : IFFT {
74102
75103 // const Decomposition m_decomposition; /**< The Decomposition object. */
76104 // const box3di m_inbox, m_outbox; /**< Local inbox and outbox boxes. */
0 commit comments