2013-08-21 10:12:15 +02:00
|
|
|
|
.. _ipt:
|
|
|
|
|
|
2013-09-17 14:55:55 +02:00
|
|
|
|
Iterated perturbation theory: a simple DMFT solver
|
|
|
|
|
==================================================
|
2013-08-21 10:12:15 +02:00
|
|
|
|
|
|
|
|
|
Introduction
|
|
|
|
|
------------
|
|
|
|
|
|
|
|
|
|
The iterated perturbation theory (IPT) was one of the first methods used to solve the
|
|
|
|
|
DMFT equations [#ipt1]_. In spite of its simplistic nature, IPT gives a qualitatively
|
|
|
|
|
correct description of a Mott metal-insulator transition in the Hubbard model on
|
|
|
|
|
infinite-dimensional lattices (on the quantitative level it tends to underestimate
|
|
|
|
|
correlations though). In IPT one iteratively solves the DMFT equations using the
|
|
|
|
|
second-order perturbation theory in Hubbard interaction :math:`U` to approximate
|
|
|
|
|
the impurity self-energy. For the particle-hole symmetric case it reads
|
|
|
|
|
|
|
|
|
|
.. math::
|
|
|
|
|
|
|
|
|
|
\Sigma(i\omega_n) \approx \frac{U}{2} +
|
|
|
|
|
U^2 \int_0^\beta d\tau e^{i\omega_n\tau} G_0(\tau)^3
|
|
|
|
|
|
|
|
|
|
A Hartree-Fock contribution :math:`U/2` in the self-energy cancels with a term
|
|
|
|
|
from :math:`G_0(i\omega_n)^{-1}` when the functions are substituted into the
|
|
|
|
|
Dyson's equation. For this reason this contribution is usually omitted from
|
|
|
|
|
both functions.
|
|
|
|
|
|
|
|
|
|
The success of IPT is caused by the fact that it becomes exact not only in the
|
|
|
|
|
weak coupling limit (by construction), but also reproduces an atomic-limit
|
|
|
|
|
expression for :math:`\Sigma(i\omega_n)` as :math:`U` grows large [#ipt2]_.
|
|
|
|
|
|
2013-09-17 14:55:55 +02:00
|
|
|
|
IPT solver
|
|
|
|
|
----------
|
2013-08-21 10:12:15 +02:00
|
|
|
|
|
2013-09-17 14:55:55 +02:00
|
|
|
|
We start by writing an IPT solver that implements the weak-coupling
|
|
|
|
|
perturbation theory for a symmetric single-band Anderson model.
|
|
|
|
|
All Green's functions in the calculations have just one index because
|
|
|
|
|
*up* and *down* components are the same.
|
2013-08-21 10:12:15 +02:00
|
|
|
|
|
2014-10-17 17:07:58 +02:00
|
|
|
|
.. runblock:: python
|
|
|
|
|
|
|
|
|
|
from pytriqs.gf.local import *
|
|
|
|
|
|
|
|
|
|
class IPTSolver:
|
|
|
|
|
|
|
|
|
|
def __init__(self, **params):
|
|
|
|
|
|
|
|
|
|
self.U = params['U']
|
|
|
|
|
self.beta = params['beta']
|
|
|
|
|
|
|
|
|
|
# Matsubara frequency
|
|
|
|
|
self.g = GfImFreq(indices=[0], beta=self.beta)
|
|
|
|
|
self.g0 = self.g.copy()
|
|
|
|
|
self.sigma = self.g.copy()
|
|
|
|
|
|
|
|
|
|
# Imaginary time
|
|
|
|
|
self.g0t = GfImTime(indices=[0], beta = self.beta)
|
|
|
|
|
self.sigmat = self.g0t.copy()
|
|
|
|
|
|
|
|
|
|
def solve(self):
|
|
|
|
|
|
|
|
|
|
self.g0t <<= InverseFourier(self.g0)
|
|
|
|
|
self.sigmat <<= (self.U**2) * self.g0t * self.g0t * self.g0t
|
|
|
|
|
self.sigma <<= Fourier(self.sigmat)
|
|
|
|
|
|
|
|
|
|
# Dyson equation to get G
|
|
|
|
|
self.g <<= inverse(inverse(self.g0) - self.sigma)
|
|
|
|
|
|
2013-08-21 10:12:15 +02:00
|
|
|
|
|
|
|
|
|
Visualization of a Mott transition
|
|
|
|
|
----------------------------------
|
|
|
|
|
|
2013-09-17 14:55:55 +02:00
|
|
|
|
We can now use this solver to run DMFT calculations and scan a range of
|
2014-10-17 17:07:58 +02:00
|
|
|
|
values of :math:`U`.
|
|
|
|
|
|
|
|
|
|
.. plot:: tutorials/python/ipt_full.py
|
|
|
|
|
:include-source:
|
|
|
|
|
:scale: 70
|
|
|
|
|
|
|
|
|
|
Alternatively, in this :download:`script <./ipt_dmft.py>`, at every iteration the resulting data is plotted
|
2013-09-17 14:55:55 +02:00
|
|
|
|
and saved into PNG files using the :ref:`TRIQS matplotlib interface<plotting>`.
|
|
|
|
|
Not that :math:`G(i\omega_n)` is analytically continued to the real axis using
|
|
|
|
|
:ref:`Padé approximant<GfReFreq>`.
|
2013-08-21 10:12:15 +02:00
|
|
|
|
|
|
|
|
|
At the end of the script an external utility `convert` is invoked to join the
|
|
|
|
|
DOS plots into a single animated GIF file which illustrates how a metallic
|
|
|
|
|
solution evolves towards an insulator.
|
2014-10-17 17:07:58 +02:00
|
|
|
|
The result of this script is the following animated gif:
|
2013-09-06 16:00:13 +02:00
|
|
|
|
|
|
|
|
|
.. image:: mott.gif
|
|
|
|
|
:width: 700
|
|
|
|
|
:align: center
|
2013-08-21 10:12:15 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Journal references
|
|
|
|
|
------------------
|
|
|
|
|
|
|
|
|
|
.. [#ipt1] A. Georges and G. Kotliar,
|
|
|
|
|
Phys. Rev. B 45, 6479–6483 (1992).
|
|
|
|
|
.. [#ipt2] X. Y. Zhang, M. J. Rozenberg, and G. Kotliar,
|
|
|
|
|
Phys. Rev. Lett. 70, 1666–1669 (1993)
|