gf<imtime, T, S> make_gf_from_inverse_fourier(gf_const_view<imfreq, T, S, E> const& gw, int n_tau = -1) { if (n_tau == -1) n_tau = 2*(gw.mesh().last_index() + 1) +1; auto m = gf_mesh<imtime>{gw.mesh().domain(), n_tau}; auto gt = gf<imtime, T, S, E>{m, get_target_shape(gw)}; gt() = inverse_fourier(gw); return gt; }
void legendre_matsubara_inverse(gf_view<legendre> gl, gf_const_view<imfreq> gw) { gl() = 0.0; // Construct a temporary imaginary-time Green's function gt // I set Nt time bins. This is ugly, one day we must code the direct // transformation without going through imaginary time int Nt = 50000; auto gt = gf<imtime>{{gw.domain(), Nt}, gw.data().shape().front_pop()}; // We first transform to imaginary time because it's been coded with the knowledge of the tails gt() = inverse_fourier(gw); legendre_matsubara_inverse(gl, gt()); }
gf<retime, Target, Singularity> make_gf_from_inverse_fourier(gf_const_view<refreq, Target, Singularity, Evaluator> const& gw) { auto gt = gf<retime, Target>{make_mesh_fourier_compatible(gw.mesh()), get_target_shape(gw)}; gt() = inverse_fourier(gw); return gt; }
gf<imtime, Target, Opt> make_gf_from_inverse_fourier(gf_impl<imfreq, Target, Opt, V, C> const& gw, mesh_kind mk = full_bins) { auto gt = gf<imtime, Target, Opt>{make_mesh_fourier_compatible(gw.mesh(), mk), get_target_shape(gw)}; gt() = inverse_fourier(gw); return gt; }