Closed beddalumia closed 2 years ago
Notes:
Probably the kinetic energy is not so much wrong just because the real part of the Matsubara self-energy is almost constant and maybe near the right value.
For the in-plane magnetization actually we expect all the spin-diagonal components of the self-energy to vanish, and currently we do not print off-diagonal ones. We should change the iprint
value from 4 to [?]
.
The fixing plan is to build the self-energy explicitly, i.e. from the order parameters. The actual formula? I have to think...
We know that:
All of this should imply that:
$$H\mathrm{top} = H\mathrm{mf} \quad\Longrightarrow\quad \Sigma\mathrm{mf} = \delta H\mathrm{mf}$$
All this is probably too much of a convoluted reasoning for the matter, but should be correct afterall.
i.e. can we state that $\Sigma(z)$ is constant on the whole complex plane?
Apparently yes... we can assume $\Sigma(z) = \delta H_\mathrm{mf}$ on the whole complex plane and we get excellent results.
We get same qualitative behavior, but improved comparison with the DMFT computation:
Almost unbelievably we had, on the imaginary axis, a noncausal, nonconstant self-energy (so mightily wrong), but actually slow-varying only near the origin, and most impressively, almost correct at mid to large frequencies. So, in a cursed numerical sense, we were somewhat near the right solution, as far as the kinetic energy computation was concerned.
:sparkles:Marvelous!:sparkles:
Most probably the true reason for the miserable failure of the Dyson approach lies in the actual non validity of such an equation relating $G0^\mathrm{loc}, \enspace G\mathrm{mf}^\mathrm{loc}, \enspace\mathrm{and} \enspace \Sigma_\mathrm{mf}^\mathrm{loc}$.
In fact the Dyson's equation that for sure olds is:
$$\Sigma_\mathrm{mf}(k,z) = G0^{-1}(k,z) - G\mathrm{mf}^{-1}(k,z)$$
which is indeed equiivalent to:
$$\sumk \Sigma\mathrm{mf}(k,z) = \sum_k G_0^{-1}(k,z) - \sumk G\mathrm{mf}^{-1}(k,z)$$
but not to:
$$\Sigma_\mathrm{mf}^\mathrm{loc}(k,z) = (G0^\mathrm{loc})^{-1}(k,z) - (G\mathrm{mf}^\mathrm{loc})^{-1}(k,z)$$
for that we cannot in any way move the sum over momentum into the matrix (or even the scalar) inversion operator.
Background
With commit cc0f13b961bc9d78ff984118515723b889ea6c35 we introduced an evaluation of "kinetic energy" $\langle H_0(k) \rangle$, exploiting the
dmft_kinetic_energy(Hk,Sigma)
function provided by DMFTtools. The strategy has been:dmft_gloc_matsubara
/dmft_gloc_realaxis
.Such a Dyson's equation reads:
$$\Sigma_\mathrm{mf}(z) = G0^{-1}(z) - G\mathrm{mf}^{-1}(z)$$
and has been implemented by:
The resulting kinetic energy appeared to be "good enough", if compared to the analogous DMFT result:
so that we called it a day.
The problem
But inspecting the actual printed self-energies we recognize something is affecting seriously our computation: we expect frequency independent self-energies, we get a total mess.
And by total mess I mean:
Arguably the Matsubara axis is quite a lot less crazy, but still:
First Guess
I tried to understand if we have a problem on how we implement the Dyson's equation by re-implementing it in MATLAB, by reading from file all the components of $G0(z), G\mathrm{mf}(z)$, by means of the following script:
And actually got instantly a quite unsettling warning:
where typical values of RCOND fell in the (E-20,E-16) range.
SciFortran's
inv()
does not complain at all, but I do not see any reason for the situation to be different across the two languages. Most probably the problems lies in the zeros, for real frequencies, and the exponentially vanishing tail, for the Matsubara axis.Shame on me to not foresee such an obvious numerical pitfall.