6 #ifndef _EXAMPLES__ADVEC_DIFF__FFT_HPP_
7 #define _EXAMPLES__ADVEC_DIFF__FFT_HPP_
23 namespace advection_diffusion
46 for (
auto& x : workspaces) {
47 shared_ptr<workspace> wk = std::get<1>(x);
49 fftw_destroy_plan(wk->ffft);
50 fftw_destroy_plan(wk->ifft);
57 if (workspaces.find(ndofs) == workspaces.end()) {
58 shared_ptr<workspace> wk = make_shared<workspace>();
59 wk->wk = fftw_alloc_complex(ndofs);
60 wk->ffft = fftw_plan_dft_1d(ndofs, wk->wk, wk->wk, FFTW_FORWARD, FFTW_ESTIMATE);
61 wk->ifft = fftw_plan_dft_1d(ndofs, wk->wk, wk->wk, FFTW_BACKWARD, FFTW_ESTIMATE);
62 wk->z =
reinterpret_cast<complex<double>*
>(wk->wk);
63 workspaces.insert(pair<
size_t, shared_ptr<workspace>>(ndofs, wk));
66 return workspaces[ndofs];
72 for (
size_t i = 0; i < x.size(); i++) {
75 fftw_execute_dft(wk->ffft, wk->wk, wk->wk);
82 fftw_execute_dft(wk->ifft, wk->wk, wk->wk);
83 for (
size_t i = 0; i < x.size(); i++) {
84 x[i] = real(wk->z[i]);
92 #endif // _EXAMPLES__ADVEC_DIFF__FFT_HPP_
shared_ptr< workspace > get_workspace(size_t ndofs)
pfasst::encap::VectorEncapsulation< double > DVectorT
complex< double > * forward(const DVectorT &x)
void backward(DVectorT &x)
map< size_t, shared_ptr< workspace > > workspaces