6#ifdef NUMERICS_HAS_FFTW
16 return reinterpret_cast<fftw_complex*
>(v.
data());
19 return reinterpret_cast<const fftw_complex*
>(v.
data());
23 fftw_plan p = fftw_plan_dft_1d(
static_cast<int>(in.
size()),
24 const_cast<fftw_complex*
>(fc(in)),
33 fftw_plan p = fftw_plan_dft_1d(
static_cast<int>(in.
size()),
34 const_cast<fftw_complex*
>(fc(in)),
43 fftw_plan p = fftw_plan_dft_r2c_1d(
static_cast<int>(in.
size()),
44 const_cast<double*
>(in.
data()),
52 fftw_plan p = fftw_plan_dft_c2r_1d(n,
53 const_cast<fftw_complex*
>(fc(in)),
64 FFTPlanImpl(
int n_,
bool forward)
68 plan = fftw_plan_dft_1d(n_,
71 forward ? FFTW_FORWARD : FFTW_BACKWARD,
76 fftw_destroy_plan(plan);
80 fftw_execute_dft(plan,
81 const_cast<fftw_complex*
>(fc(in)),
82 const_cast<fftw_complex*
>(fc(out)));
Dense vector with optional GPU storage, templated over scalar type T.
constexpr idx size() const noexcept
FFT interface with backend dispatch.
void ifft(const CVector &in, CVector &out, FFTBackend b=default_fft_backend)
Inverse complex DFT (unnormalised: result = n * true_inverse).
void fft(const CVector &in, CVector &out, FFTBackend b=default_fft_backend)
Forward complex DFT. out must be pre-allocated to in.size().
void irfft(const CVector &in, int n, Vector &out, FFTBackend b=default_fft_backend)
Complex-to-real inverse DFT (unnormalised).
constexpr FFTBackend fftw
void rfft(const Vector &in, CVector &out, FFTBackend b=default_fft_backend)
Real-to-complex forward DFT. out must be pre-allocated to n/2+1.
std::complex< real > cplx