33 template <
typename M1,
typename M2> gf_vec_t<M1> fourier_lattice_impl(
int fftw_backward_forward, M1
const &out_mesh, gf_vec_cvt<M2> g_in) {
35 auto g_out = gf_vec_t<M1>{out_mesh, std::array{g_in.target_shape()[0]}};
36 long n_others = second_dim(g_in.data());
38 auto dims = g_in.mesh().dims();
39 auto dims_int = stdutil::make_std_array<int>(dims);
41 _fourier_base(g_in.data(), g_out.data(), dims.size(), dims_int.data(), n_others, fftw_backward_forward);
48 gf_vec_t<mesh::cyclat> _fourier_impl(mesh::cyclat
const &r_mesh, gf_vec_cvt<mesh::brzone> gk) {
49 auto gr = fourier_lattice_impl(FFTW_FORWARD, r_mesh, gk);
50 gr.data() /= gk.mesh().size();
56 gf_vec_t<mesh::brzone> _fourier_impl(mesh::brzone
const &k_mesh, gf_vec_cvt<mesh::cyclat> gr) {
57 return fourier_lattice_impl(FFTW_BACKWARD, k_mesh, gr);
Provides the Fourier transform factories and the lazy fourier(...) assignment for Green's functions.
Declares the low-level FFTW wrapper shared by the Fourier transform implementations.