11#include <prdc/cpu/RField.h>
12#include <prdc/cpu/RFieldDft.h>
13#include <prdc/cpu/CField.h>
14#include <pscf/math/IntVec.h>
158 mutable RFieldDft<D> kFieldCopy_;
187 void makePlans(RField<D>& rField, RFieldDft<D>& kField,
188 CField<D>& cFieldIn, CField<D>& cFieldOut);
195 void FFT<1>::makePlans(RField<1>& rField, RFieldDft<1>& kField,
196 CField<1>& cFieldIn, CField<1>& cFieldOut);
199 void FFT<2>::makePlans(RField<2>& rField, RFieldDft<2>& kField,
200 CField<2>& cFieldIn, CField<2>& cFieldOut);
203 void FFT<3>::makePlans(RField<3>& rField, RFieldDft<3>& kField,
204 CField<3>& cFieldIn, CField<3>& cFieldOut);
218 {
return meshDimensions_; }
220 #ifndef PRDC_CPU_FFT_TPP
222 extern template class FFT<1>;
223 extern template class FFT<2>;
224 extern template class FFT<3>;
An IntVec<D, T> is a D-component vector of elements of integer type T.
Fourier transform wrapper.
void inverseTransformUnsafe(RFieldDft< D > &in, RField< D > &out) const
Compute inverse (complex-to-real) DFT, overwriting the input.
FFT()
Default constructor.
void forwardTransform(RField< D > const &in, RFieldDft< D > &out) const
Compute forward (real-to-complex) discrete Fourier transform.
void inverseTransform(CField< D > const &in, CField< D > &out) const
Compute complex-to-complex inverse Fourier transform.
bool isSetup() const
Has this FFT object been setup?
void setup(IntVec< D > const &meshDimensions)
Setup grid dimensions, FFT plans and work space.
IntVec< D > const & meshDimensions() const
Return the dimensions of the grid for which this was setup.
virtual ~FFT()
Destructor.
void inverseTransformSafe(RFieldDft< D > const &in, RField< D > &out) const
Compute inverse (complex-to-real) DFT without overwriting input.
File containing preprocessor macros for error handling.
PSCF package top-level namespace.
Utility classes for scientific computation.