Thank you Hartmut,
I just test the fourier transformation inside SemicircleHilbertTransformer::initial_G0. The initial G(tau) is defined by
std::complex<double> zeta = iw+mu+(flavor%2 ? -h : h); G0_omega(i, flavor) = (zeta - sqrt(zeta*zeta-4*tsq[flavor]))/(2*tsq[flavor]);
The code uses backward_ft to inverse fourier transform G0_tau to G0_omega, fourier_ptr->backward_ft(G0_tau, G0_omega);
If I fourier transform G0_omega back to G0_tau now, I should get the original G0_tau. But the result of the test shows different G0_tau. Again if I do fourier_ptr->backward_ft(G0_tau, G0_omega), I will get a new G0_omega'. It sounds that FT(IFT) does not equal to identity! Could you double check that for me?
Kuang-Shing Chen
On Wed, Dec 28, 2011 at 6:15 PM, Hartmut Hafermann < hartmut.hafermann@cpht.polytechnique.fr> wrote:
Hi,
the code is correct. I have changed the comment to comply with the code. As a reference you can have a look into Emanuel's thesis, p. 138: http://e-collection.library.ethz.ch/eserv/eth:31103/eth-31103-02.pdf
Best, Hartmut
Am 29.12.2011 um 00:04 schrieb Kuangshing Chen:
Hi,
The function generate_spline_matrix in fouriertransform.C in the dmft folder shows the comments as follows:
// A is the matrix whose inverse defines spline_matrix // // 6 6 // 1 4 1 // 1 4 1 // A = ... // // 1 4 1 // -2 0 0 2
However, the following codes,
dense_matrix A = 4*dt/6.*boost::numeric::ublas::identity_matrix<double>(Np1);
for (int i=1; i<Np1-1; i++) { A(i,i-1) = dt/6.; A(i,i+1) = dt/6.; } A(0,0) = 1.; A(0, Np1-1) = 1.; A(Np1-1, 0) = -2.*dt/6.; A(Np1-1, 1) = -1.*dt/6.; A(Np1-1, Np1-2) = 1*dt/6.; A(Np1-1, Np1-1) = 2*dt/6.;
the red lines will make the matrix looks like
// 6 6 // 1 4 1 // 1 4 1 // A = ... // // 1 4 1 // -2 *-1* *1* 2
Is the comment correct or the code correct? Any reference for this algorithm?
Thank you, Kuang-Shing Chen
-- Hartmut Hafermann
École Polytechnique Centre de Physique Theorique (CPHT) 91128 Palaiseau Cedex, France
Tel.: +33 1 69 33 42 34 Fax: +33 1 69 33 49 49