Hubbard III for dimer

Describing the position of the Self-Energy pole in the diagonal basis

# Created Mon Mar 14 13:56:37 2016
# Author: Óscar Nájera
from __future__ import absolute_import, division, print_function

import matplotlib.pyplot as plt
import numpy as np

import dmft.common as gf
import dmft.dimer as dimer
from dmft.plot import plot_band_dispersion
import slaveparticles.quantum.operators as op

The Dimer limit

Here I study the shape of spectral function and the origin of its poles looking for the zeros of the self energy

def molecule_sigma_d(omega, U, mu, tp, beta):
    """Return molecule self-energy in the given frequency axis"""

    h_at, oper = dimer.hamiltonian_diag(U, mu, tp)
    oper_pair = [[oper[0], oper[0]], [oper[1], oper[1]]]

    eig_e, eig_v = op.diagonalize(h_at.todense())
    gfsU = np.array([op.gf_lehmann(eig_e, eig_v, c.T, beta, omega, d)
                     for c, d in oper_pair])

    plt.plot(omega.real, -(gfsU[1]).imag, label='Anti-Bond')
    plt.plot(omega.real, -(gfsU[0]).imag, label='Bond')
    plt.xlabel(r'$\omega$')
    plt.ylabel(r'$A(\omega)$')
    plt.title(r'Isolated dimer $U={}$, $t_\perp={}$, $\beta={}$'.format(U, tp, beta))
    plt.legend(loc=0)

    return [omega + tp - 1 / gfsU[0], omega - tp - 1 / gfsU[1]]


w = np.linspace(-3, 3, 800)
U = 2.5
tp = 0.3


plt.figure()
sig_b, sig_a = molecule_sigma_d(w + 5e-2j, U, 0, tp, 500)
plt.plot(w, sig_a.real - w + tp, label=r'$\Sigma_{A} - w + t_\perp$')
plt.plot(w, sig_b.real - w - tp, label=r'$\Sigma_{B} - w - t_\perp$')
plt.legend(loc=0)
../_images/sphx_glr_plot_hubbard_III_001.png

Hubbard III approximation

Taking advantage of the rotated basis which is diagonal I can independently treat each system on its own and solve 2 decoupled system equations.

In this case the poles of the green function are equally weighted, only its position is correct, in comparison to the isolated dimer green function

sp_2 = (U**2 + 16 * tp**2) / 4.
g0_1_a = w - tp + 5e-2j + 2 * tp  # The excitation out of the singlet has
g0_1_b = w + tp + 5e-2j - 2 * tp  # this extra contribution of 2tp

plt.figure()
x = .60
plt.plot(w, -((1 - (1 - 2 * x) * sp_2 / g0_1_a) /
              (g0_1_a - sp_2 / g0_1_a)).imag, label='Anti-bond')
plt.plot(w, -((1 + (1 - 2 * x) * sp_2 / g0_1_b) /
              (g0_1_b - sp_2 / g0_1_b)).imag, label='Bond')
plt.xlabel(r'$\omega$')
plt.ylabel(r'$A(\omega)$')
plt.title(r'Isolated dimer approximation $U={}$, $t_\perp={}$'.format(U, tp))
plt.legend(loc=0)

for i in range(2000):
    g0_1_a = w - tp - .25 * (1 - (1 - 2 * x) * sp_2 /
                             g0_1_a) / (g0_1_a - sp_2 / g0_1_a)
    g0_1_b = w + tp - .25 * (1 + (1 - 2 * x) * sp_2 /
                             g0_1_b) / (g0_1_b - sp_2 / g0_1_b)
../_images/sphx_glr_plot_hubbard_III_002.png

The Self-Energy

plt.figure()
sb = sp_2 * ((1 - 2 * x) + 1 / g0_1_b) / (1 + (1 - 2 * x) * sp_2 / g0_1_b)
plt.plot(w, sb.real, label=r"Re Bond")
plt.plot(w, sb.imag, label=r"Im Bond")

sa = sp_2 * (-(1 - 2 * x) + 1 / g0_1_a) / (1 - (1 - 2 * x) * sp_2 / g0_1_a)
plt.plot(w, sa.real, label=r"Re Anti-Bond")
plt.plot(w, sa.imag, label=r"Im Anti-Bond")

plt.ylabel(r'$\Sigma(\omega)$')
plt.xlabel(r'$\omega$')
plt.title(r'$\Sigma(\omega)$ at $U= {}$'.format(U))
plt.legend(loc=0)
plt.ylim([-3.5, 2])
../_images/sphx_glr_plot_hubbard_III_003.png

The Green Function

plt.figure()
g_b = 1 / (w + tp - sb)
plt.plot(w, g_b.real, label=r"Re Bond")
plt.plot(w, g_b.imag, label=r"Im Bond")
plt.figure()
g_b = gf.greenF(-1j * w, sb, tp)
zeta = w + tp - sb
g_b = 2 * zeta * (1 - np.sqrt(1 - 1 / zeta**2))
g_b = 1 / (g0_1_b - sb)
plt.plot(w, g_b.real, label=r"Re Bond")
plt.plot(w, g_b.imag, label=r"Im Bond")
plt.plot(w, sb.real - w - tp, label=r'$\Sigma_{S} - w + t_\perp$')

plt.ylabel(r'$G(\omega)$')
plt.xlabel(r'$\omega$')
plt.title(r'$G(\omega)$ at $U= {}$'.format(U))
plt.ylim([-3.5, 2])
plt.legend(loc=0)
  • ../_images/sphx_glr_plot_hubbard_III_004.png
  • ../_images/sphx_glr_plot_hubbard_III_005.png

The Band Dispersion

eps_k = np.linspace(-1, 1, 61)
lat_gf = 1 / (np.add.outer(-eps_k, w + tp + 8e-2j) - sp_2 / g0_1_b) + \
    1 / (np.add.outer(-eps_k, w - tp + 8e-2j) - sp_2 / g0_1_a)
Aw = -lat_gf.imag / np.pi / 2


plot_band_dispersion(w, Aw, 'Hubbard III band dispersion', eps_k)
  • ../_images/sphx_glr_plot_hubbard_III_006.png
  • ../_images/sphx_glr_plot_hubbard_III_007.png

Total running time of the script: ( 0 minutes 1.026 seconds)

Generated by Sphinx-Gallery