|
73 | 73 | "#### Notes on practical implementation\n", |
74 | 74 | "* We will try to find the Mott transition which is a phase transition of first order. To illustrate this, we will do calculations starting from the metallic and the insulating phase at the end of this tutorial. This will show a hysteresis, signaling the metastable/coexistence region of both solutions. For converged results, this will need many iteration steps.\n", |
75 | 75 | "* In the insulating phase, the low-frequency part of the self-energy turns downwards and diverges. Using the above formula for calculating the renormalization factor $Z$ from a linearized self-energy, it would be negative. To circumvent this unphysical notion, $Z$ then is defined as zero in the implementation.\n", |
| 76 | + "* At half filling with a symmetric density of states the exact self-energy is particle-hole symmetric: $\\Sigma(\\mathrm{i}\\nu)$ is purely imaginary and odd in $\\nu$. The Fourier transform via the IR basis preserves this only up to rounding errors, and the symmetric solution is an *unstable* fixed point of the DMFT iteration with respect to perturbations that break the symmetry: a deviation of $10^{-16}$ grows by roughly 40% per iteration until, after a few hundred iterations, the loop ends up in an unphysical, symmetry-broken state. We therefore project each new self-energy onto its symmetric part, $\\Sigma(\\mathrm{i}\\nu) \\to \\mathrm{i}\\,\\frac{1}{2}[\\mathrm{Im}\\,\\Sigma(\\mathrm{i}\\nu) - \\mathrm{Im}\\,\\Sigma(-\\mathrm{i}\\nu)]$. Without this projection, the converged calculations below show a spurious \"transition\" near $U/t_\\star \\approx 3.5$.\n", |
76 | 77 | "* We include a mixing $p<1$ in each iteration step, such that the Green function of step $n+1$ is partially constructed from the old and new Green function as $G^{n+1} = p\\,G^{n+1} + (1-p)\\,G^{n}$. This smoothes too strong oscillations of the solution which is important especially near the phase transition point." |
77 | 78 | ] |
78 | 79 | }, |
|
149 | 150 | " # frequency mesh (for plotting Green function/self-energy)\n", |
150 | 151 | " self.iwn_f = 1j * self.IR_basis_set.wn_f * np.pi * T\n", |
151 | 152 | "\n", |
| 153 | + " # index of -n for every fermionic sampling frequency n (they come in ± pairs)\n", |
| 154 | + " wn_f = list(self.IR_basis_set.wn_f)\n", |
| 155 | + " self.mirror_f = np.array([wn_f.index(-n) for n in wn_f])\n", |
| 156 | + "\n", |
| 157 | + " def ph_symmetrize(self, obj_wn):\n", |
| 158 | + " \"\"\" Particle-hole symmetric part of a fermionic function at half filling: i*Im, odd in iwn \"\"\"\n", |
| 159 | + " return 0.5j * (obj_wn.imag - obj_wn.imag[self.mirror_f])\n", |
| 160 | + "\n", |
152 | 161 | " def smpl_obj(self, statistics):\n", |
153 | 162 | " \"\"\" Return sampling object for given statistic \"\"\"\n", |
154 | 163 | " smpl_tau = {'F': self.IR_basis_set.smpl_tau_f, 'B': self.IR_basis_set.smpl_tau_b}[statistics]\n", |
|
251 | 260 | "\n", |
252 | 261 | " # Solve impurity problem in IPT\n", |
253 | 262 | " sigma = IPTSolver(self.mesh, self.g_weiss, self.U)\n", |
| 263 | + " # Enforce particle-hole symmetry (see the notes above)\n", |
| 264 | + " sigma = self.mesh.ph_symmetrize(sigma)\n", |
254 | 265 | " self.sigma = sigma*self.mix + self.sigma*(1-self.mix)\n", |
255 | 266 | "\n", |
256 | 267 | " # Set new Green function and Weiss field\n", |
|
478 | 489 | " Z = CalcRenormalizationZ(solver)\n", |
479 | 490 | " Z_arr[it] = Z\n", |
480 | 491 | "\n", |
481 | | - " if it in [30, 34, 35, 36, 37, 40]:\n", |
| 492 | + " if it in [50, 54, 56, 57, 58, 60]:\n", |
482 | 493 | " plt.plot(np.imag(mesh.iwn_f[mesh.iw0_f:]), np.imag(solver.sigma[mesh.iw0_f:]),'-o', label='$U$={:.2f}'.format(U))\n", |
483 | 494 | "\n", |
484 | 495 | "\n", |
|
505 | 516 | "id": "43279056-8223-432e-801f-364730395f07", |
506 | 517 | "metadata": {}, |
507 | 518 | "source": [ |
508 | | - "You can quite well see a jump of $Z$ between $U/t_\\star=3$ and 4 which is accompanied by the low-frequency part of the self-energy diverging instead of going to zero.\n", |
| 519 | + "You can quite well see a jump of $Z$ between $U/t_\\star=5.7$ and 5.8 which is accompanied by the low-frequency part of the self-energy diverging instead of going to zero.\n", |
509 | 520 | "\n", |
510 | 521 | "In a last step, we want to map out the metastable coexistence region. In order to do this, we have to start every new $U$ calculation from the previous converged solution. If we start from small $U$, we start from the metallic region, whereas starting from large $U$ corresponds to starting from the insulating solution." |
511 | 522 | ] |
|
558 | 569 | "id": "e61f48f4-f538-4c19-b181-3db4490a7c17", |
559 | 570 | "metadata": {}, |
560 | 571 | "source": [ |
561 | | - "For comparison, we also plotted the transition line where we always start from the non-interacting Green function $G_0$. Since we do only a few iteration steps, we do not have completetly converged solutions, so that the $G_0$ line has a slightly larger critical $U$ value compared to the line which starts from the metallic solution. Try increasinging the parameter `maxiter` (to 1000 or so) and decreasing the parameter `sfc_tol` (to 1e-14 or so) and look at the results! (The lines should become equal.)\n", |
| 572 | + "The metallic solution exists up to $U/t_\\star = 5.7$ ($U_{c2}$ lies between 5.7 and 5.8), while the insulating solution survives down to $U/t_\\star = 5.5$ ($U_{c1}$ lies between 5.4 and 5.5). In between, both solutions are stable and which one is obtained depends on the starting point: this is the coexistence region of the first-order Mott transition. For comparison, we also plotted the line where we always start from the non-interacting Green function $G_0$. It coincides with the line starting from the metallic solution, since $G_0$ lies in the basin of the metal wherever the metal exists; a scan from $G_0$ alone therefore only finds $U_{c2}$.\n", |
| 573 | + "\n", |
| 574 | + "Try also removing the line `sigma = self.mesh.ph_symmetrize(sigma)` in `DMFT_loop.solve`: rounding errors then drive the loop away from the particle-hole symmetric solution, and the scan shows a spurious \"transition\" near $U/t_\\star \\approx 3.5$.\n", |
562 | 575 | "\n", |
563 | 576 | "Often the energy unit is not the hopping $t_\\star$ but the half-bandwidth $D$, so we can also plot the results in this convention:" |
564 | 577 | ] |
|
0 commit comments