Hubbard I for dimer diagonal basis

The atomic self-energy is extracted and plotted into the lattice Green’s function to see the behavior of the insulating state. Use the anti-bonding function

# Created Mon Mar 14 13:56:37 2016
# Author: Óscar Nájera

from __future__ import division, absolute_import, print_function

import matplotlib.pyplot as plt
import numpy as np
from dmft.common import gw_invfouriertrans
from dmft.plot import plot_band_dispersion
import dmft.dimer as dimer
import slaveparticles.quantum.operators as op

Approximating Hubbard I

Here I use the molecule self-energy

def molecule_sigma(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[1], oper[1]], [oper[0], oper[0]]]

    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[0].imag, label='Anti')
    plt.plot(omega.real, -gfsU[1].imag, label='Bond')
    plt.plot(omega.real, -(1 / (omega - tp)).imag, label='Free')
    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]]

The Real axis Self-energy

def plot_self_energy(w, sd_w, so_w, U, mu, tp, beta):
    f, ax = plt.subplots(2, sharex=True)
    ax[0].plot(w, sd_w.real, label='Real')
    ax[0].plot(w, sd_w.imag, label='Imag')
    ax[1].plot(w, so_w.real, label='Real')
    ax[1].plot(w, so_w.imag, label='Imag')
    ax[0].legend(loc=0)
    ax[1].set_xlabel(r'$\omega$')
    ax[0].set_ylabel(r'$\Sigma_{Anti}(\omega)$')
    ax[1].set_ylabel(r'$\Sigma_{Bond}(\omega)$')
    ax[0].set_title(
        r'Isolated dimer $U={}$, $t_\perp={}$, $\beta={}$'.format(U, tp, beta))

w = np.linspace(-3, 3, 800)
U, mu, tp, beta = 2.15, 0., 0.3, 100.
sd_w, so_w = molecule_sigma(w + 5e-5j, U, mu, tp, beta)
plot_self_energy(w, sd_w, so_w, U, mu, tp, beta)
  • ../_images/sphx_glr_plot_hubbard_I_diagonal_001.png
  • ../_images/sphx_glr_plot_hubbard_I_diagonal_002.png

Hubbard I Band dispersion

eps_k = np.linspace(-1, 1, 61)
lat_gf = 1 / np.add.outer(-eps_k, w + 5e-2j - sd_w)
Aw = -lat_gf.imag / np.pi

plot_band_dispersion(
    w, Aw, r'Hubbard I dimer $U={}$, $t_\perp={}$, $\beta={}$'.format(U, tp, beta), eps_k)
  • ../_images/sphx_glr_plot_hubbard_I_diagonal_003.png
  • ../_images/sphx_glr_plot_hubbard_I_diagonal_004.png

The Real axis Self-energy

w = np.linspace(-3, 3, 800)
U, mu, tp, beta = 2.15, 0., 0.3, 5.
sd_w, so_w = molecule_sigma(w + 5e-5j, U, mu, tp, beta)
plot_self_energy(w, sd_w, so_w, U, mu, tp, beta)
  • ../_images/sphx_glr_plot_hubbard_I_diagonal_005.png
  • ../_images/sphx_glr_plot_hubbard_I_diagonal_006.png

Hubbard I Band dispersion

eps_k = np.linspace(-1, 1, 61)
lat_gf = 1 / np.add.outer(-eps_k, w + 5e-2j - sd_w)
Aw = -lat_gf.imag / np.pi
plot_band_dispersion(
    w, Aw, r'Hubbard I dimer $U={}$, $t_\perp={}$, $\beta={}$'.format(U, tp, beta), eps_k)
  • ../_images/sphx_glr_plot_hubbard_I_diagonal_007.png
  • ../_images/sphx_glr_plot_hubbard_I_diagonal_008.png

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

Generated by Sphinx-Gallery