Dynamical mean-field theory on a Bethe lattice
Note
Requires TRIQS and the application cthyb
In the case of Bethe lattice the dynamical mean-field theory (DMFT) self-consistency condition takes a particularly simple form
\[G^{-1}_{0,\sigma} (i \omega_n) = i \omega_n + \mu - t^2 G_{\sigma} (i \omega_n).\]
Hence, from a strictly technical point of view, in this case the DMFT cycle can be implemented by modifying the previous single-impurity example to the case of a bath with semi-circular density of states and adding a python loop to update \(G_0\) as function of \(G\).
Here is a complete program doing this plain-vanilla DMFT on a half-filled one-band Bethe lattice:
from triqs.gf import *
from triqs.operators import *
from h5 import *
import triqs.utility.mpi as mpi
from triqs_cthyb import Solver
# Parameters of the model
U = 2.5
t = 0.5
mu = U/2.0
beta = 100.0
n_loops = 10
# Construct the impurity solver
S = Solver(beta = beta, gf_struct = [('up',[0]), ('down',[0])] )
# This is a first guess for G
S.G_iw << SemiCircular(2*t)
# DMFT loop with self-consistency
for i in range(n_loops):
print "\n\nIteration = %i / %i" % (i+1, n_loops)
# Symmetrize the Green's function imposing paramagnetism and use self-consistency
g = 0.5 * ( S.G_iw['up'] + S.G_iw['down'] )
for name, g0 in S.G0_iw:
g0 << inverse( iOmega_n + mu - t**2 * g )
# Solve the impurity problem
S.solve(h_int = U * n('up',0) * n('down',0), # Local Hamiltonian
n_cycles = 100000, # Number of QMC cycles
length_cycle = 200, # Length of one cycle
n_warmup_cycles = 5000 # Warmup cycles
)
# Save iteration in archive
with HDFArchive("single_site_bethe.h5", 'a') as A:
A['G-%i'%i] = S.G_iw
A['Sigma-%i'%i] = S.Sigma_iw