On Tue, Dec 13, 2011 at 10:37 AM, Emanuel Gull emanuel.gull@gmail.comwrote:
On Dec 13, 2011, at 5:25 PM, Kuangshing Chen wrote:
I try to implement your solver in my dmft loop and try to compare the
result from ALPS. It seems that something still stucks in the code. I have a question for the ALPS DMFT loop:
G0_init --> Solver --> G --> SC --> G0 --> ... (SC means
self-consistency loop)
Since G0_init is obtained in the constructor of HybridizationRun, after
the Solver you get G. Then inside the SC, you obtain G0 using
G0_{s}(iwn) = 1/(iwn + mu - t^2G_{-s}(iwn)) (defined in
SemicircleHilbertTransformer::operator()).
yes.
The question is: Before going to the Solver, you construct F(tau) = -t^2
- G(beta - tau) in the very of beginning.
If I turn the OMEGA_LOOP off. The code just reads in G0(tau), doesn't it?
So if the OMEGA_LOOP is false, the whole self-consistency loop only has Fourier transformations in the SemicircleHilbertTransformer::operator() and in the SemicircleHilbertTransformer::initial_G0(). After I measure G, I use SemicircleHilbertTransformer::operator() to transform the G(tau) to a new G0(tau), the new input for the next iteration. Thus I don't need G0(omega) in this case. Does it still work? Or is it necessary to use OMEGA_LOOP=true?
No. The solver gets G0(omega) in this case, it is read at line 91 in
impurity.C. In a next step the hybridization function is constructed (line 96) and Fourier transformed to the time domain (line 99). Finally the minus sign convention is adjusted to what we use in the hybridization expansion code (102, see also your earlier comments)
In the next iteration, where is the relation between the new G0(tau) and
the new F(tau)? (At least I do not see this relation except in the constructor of HybridizationRun)
Also, do you still start with the same time segment configuration as the
one in the previous iteration?
No we start from scratch, all segments are empty. the code is then thermalized.
Cheers, Emanuel