Dispersion of the spectral function

# Author: Óscar Nájera

from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

import matplotlib.pyplot as plt
import numpy as np

import dmft.common as gf
import dmft.dimer as dimer
import dmft.ipt_imag as ipt
from dmft.plot import plot_band_dispersion


def loop_u_tp(u_range, tprange, beta, seed='mott gap'):
    tau, w_n = gf.tau_wn_setup(dict(BETA=beta, N_MATSUBARA=max(5 * beta, 256)))
    giw_d, giw_o = dimer.gf_met(w_n, 0., 0., 0.5, 0.)
    if seed == 'mott gap':
        giw_d, giw_o = 1 / (1j * w_n + 4j / w_n), np.zeros_like(w_n) + 0j

    giw_s = []
    sigma_iw = []
    iterations = []
    for u_int, tp in zip(u_range, tprange):
        giw_d, giw_o, loops = dimer.ipt_dmft_loop(
            beta, u_int, tp, giw_d, giw_o, tau, w_n)
        giw_s.append((giw_d, giw_o))
        iterations.append(loops)
        g0iw_d, g0iw_o = dimer.self_consistency(
            1j * w_n, 1j * giw_d.imag, giw_o.real, 0., tp, 0.25)
        siw_d, siw_o = ipt.dimer_sigma(u_int, tp, g0iw_d, g0iw_o, tau, w_n)
        sigma_iw.append((siw_d.copy(), siw_o.copy()))

    print(np.array(iterations))

    return np.array(giw_s), np.array(sigma_iw), w_n


def plot_greenfunct(w, gfunc, title, ylabel, ax=None):
    if ax is None:
        f, ax = plt.subplots(1)
    ax.plot(w, gfunc.real, label=r'$\Re e$' + ylabel)
    ax.plot(w, -gfunc.imag, label=r'$-\Im m$' + ylabel)
    ax.legend(loc=0)
    ax.set_xlabel(r'$\omega$')
    ax.set_ylabel(ylabel + r'$(\omega)$')
    ax.set_title(title)
    ax.set_ylim([-3, 3])
    return ax


def plot_pole_eq(w, gf, sig, title):
    plt.figure()
    plt.plot(w, sig.imag, label=r'$\Im m \Sigma$')
    plt.plot(w, (1 / gf).real, label=r'$\Re e G^{-1}$')
    plt.plot(w, -gf.imag, label='DOS')
    plt.legend(loc=0)
    plt.title(title)
    plt.ylim([-3, 3])


def plot_dispersions(giw_s, sigma_iw, ur, tp, w_n, w, w_set):

    for U, (giw_d, giw_o), (sig_d, sig_o) in zip(ur, giw_s, sigma_iw):
        gs, ga = dimer.pade_diag(giw_d, giw_o, w_n, w_set, w)
        ss, sa = dimer.pade_diag(sig_d, sig_o, w_n, w_set, w)
        gst = gf.semi_circle_hiltrans(
            w - tp - (ss.real - 1j * np.abs(ss.imag)))

        lat_gfs = 1 / np.add.outer(-eps_k, w - tp + 5e-3j - ss)
        lat_gfa = 1 / np.add.outer(-eps_k, w + tp + 5e-3j - sa)
        #Aw = np.clip(-.5 * (lat_gfa + lat_gfs).imag / np.pi, 0, 2)

        Aw = np.clip(-lat_gfs.imag / np.pi, 0, 2)

        title = r'IPT lattice dimer $U={}$, $t_\perp={}$, $\beta={}$'.format(
            U, tp, BETA)
        ax = plot_greenfunct(w, gs, title, r'$G$')
        plot_greenfunct(w, gst, title, r'$G$', ax)
        plot_greenfunct(w, 1 / (w - tp - .25 * gst), title, r'$G0$', ax)
        ax = plot_greenfunct(w, ss, title, r'$\Sigma$')

        plot_pole_eq(w, gst, ss, title)
        plot_band_dispersion(w, Aw, title, eps_k)

Metals

urange = [1.5, 2., 2.175, 2.5, 3.]
BETA = 100.
tp = 0.3
giw_s, sigma_iw, w_n = loop_u_tp(urange, tp * np.ones_like(urange), BETA, "M")
w = np.linspace(-4, 4, 800)
eps_k = np.linspace(-1., 1., 61)
w_set = np.concatenate((np.arange(100), np.arange(100, 200, 2)))
plot_dispersions(giw_s, sigma_iw, urange, tp, w_n, w, w_set)
  • ../_images/sphx_glr_plot_line_dispersion_001.png
  • ../_images/sphx_glr_plot_line_dispersion_002.png
  • ../_images/sphx_glr_plot_line_dispersion_003.png
  • ../_images/sphx_glr_plot_line_dispersion_004.png
  • ../_images/sphx_glr_plot_line_dispersion_005.png
  • ../_images/sphx_glr_plot_line_dispersion_006.png
  • ../_images/sphx_glr_plot_line_dispersion_007.png
  • ../_images/sphx_glr_plot_line_dispersion_008.png
  • ../_images/sphx_glr_plot_line_dispersion_009.png
  • ../_images/sphx_glr_plot_line_dispersion_010.png
  • ../_images/sphx_glr_plot_line_dispersion_011.png
  • ../_images/sphx_glr_plot_line_dispersion_012.png
  • ../_images/sphx_glr_plot_line_dispersion_013.png
  • ../_images/sphx_glr_plot_line_dispersion_014.png
  • ../_images/sphx_glr_plot_line_dispersion_015.png
  • ../_images/sphx_glr_plot_line_dispersion_016.png
  • ../_images/sphx_glr_plot_line_dispersion_017.png
  • ../_images/sphx_glr_plot_line_dispersion_018.png
  • ../_images/sphx_glr_plot_line_dispersion_019.png
  • ../_images/sphx_glr_plot_line_dispersion_020.png
  • ../_images/sphx_glr_plot_line_dispersion_021.png
  • ../_images/sphx_glr_plot_line_dispersion_022.png
  • ../_images/sphx_glr_plot_line_dispersion_023.png
  • ../_images/sphx_glr_plot_line_dispersion_024.png
  • ../_images/sphx_glr_plot_line_dispersion_025.png

Out:

[171 109  94  75  42]

Insulators

tp = 0.3
urange = [0, .5, 1, 2.175, 2.5, 3., 3.5, 4., 5.]
giw_s, sigma_iw, w_n = loop_u_tp(
    urange, tp * np.ones_like(urange), BETA)

eps_k = np.linspace(-1., 1., 61)
plot_dispersions(giw_s, sigma_iw, urange, tp, w_n, w, w_set)
  • ../_images/sphx_glr_plot_line_dispersion_026.png
  • ../_images/sphx_glr_plot_line_dispersion_027.png
  • ../_images/sphx_glr_plot_line_dispersion_028.png
  • ../_images/sphx_glr_plot_line_dispersion_029.png
  • ../_images/sphx_glr_plot_line_dispersion_030.png
  • ../_images/sphx_glr_plot_line_dispersion_031.png
  • ../_images/sphx_glr_plot_line_dispersion_032.png
  • ../_images/sphx_glr_plot_line_dispersion_033.png
  • ../_images/sphx_glr_plot_line_dispersion_034.png
  • ../_images/sphx_glr_plot_line_dispersion_035.png
  • ../_images/sphx_glr_plot_line_dispersion_036.png
  • ../_images/sphx_glr_plot_line_dispersion_037.png
  • ../_images/sphx_glr_plot_line_dispersion_038.png
  • ../_images/sphx_glr_plot_line_dispersion_039.png
  • ../_images/sphx_glr_plot_line_dispersion_040.png
  • ../_images/sphx_glr_plot_line_dispersion_041.png
  • ../_images/sphx_glr_plot_line_dispersion_042.png
  • ../_images/sphx_glr_plot_line_dispersion_043.png
  • ../_images/sphx_glr_plot_line_dispersion_044.png
  • ../_images/sphx_glr_plot_line_dispersion_045.png
  • ../_images/sphx_glr_plot_line_dispersion_046.png
  • ../_images/sphx_glr_plot_line_dispersion_047.png
  • ../_images/sphx_glr_plot_line_dispersion_048.png
  • ../_images/sphx_glr_plot_line_dispersion_049.png
  • ../_images/sphx_glr_plot_line_dispersion_050.png
  • ../_images/sphx_glr_plot_line_dispersion_051.png
  • ../_images/sphx_glr_plot_line_dispersion_052.png
  • ../_images/sphx_glr_plot_line_dispersion_053.png
  • ../_images/sphx_glr_plot_line_dispersion_054.png
  • ../_images/sphx_glr_plot_line_dispersion_055.png
  • ../_images/sphx_glr_plot_line_dispersion_056.png
  • ../_images/sphx_glr_plot_line_dispersion_057.png
  • ../_images/sphx_glr_plot_line_dispersion_058.png
  • ../_images/sphx_glr_plot_line_dispersion_059.png
  • ../_images/sphx_glr_plot_line_dispersion_060.png
  • ../_images/sphx_glr_plot_line_dispersion_061.png
  • ../_images/sphx_glr_plot_line_dispersion_062.png
  • ../_images/sphx_glr_plot_line_dispersion_063.png
  • ../_images/sphx_glr_plot_line_dispersion_064.png
  • ../_images/sphx_glr_plot_line_dispersion_065.png
  • ../_images/sphx_glr_plot_line_dispersion_066.png
  • ../_images/sphx_glr_plot_line_dispersion_067.png
  • ../_images/sphx_glr_plot_line_dispersion_068.png
  • ../_images/sphx_glr_plot_line_dispersion_069.png
  • ../_images/sphx_glr_plot_line_dispersion_070.png

Out:

[308 197 178 102  75  42  18  10   8]

Insulators

tp = 0.5
urange = [0, .5, 2.175, 2.5, 3., 3.5, 4., 5.]
giw_s, sigma_iw, w_n = loop_u_tp(
    urange, tp * np.ones_like(urange), BETA)

eps_k = np.linspace(-1., 1., 61)
plot_dispersions(giw_s, sigma_iw, urange, tp, w_n, w, w_set)
  • ../_images/sphx_glr_plot_line_dispersion_071.png
  • ../_images/sphx_glr_plot_line_dispersion_072.png
  • ../_images/sphx_glr_plot_line_dispersion_073.png
  • ../_images/sphx_glr_plot_line_dispersion_074.png
  • ../_images/sphx_glr_plot_line_dispersion_075.png
  • ../_images/sphx_glr_plot_line_dispersion_076.png
  • ../_images/sphx_glr_plot_line_dispersion_077.png
  • ../_images/sphx_glr_plot_line_dispersion_078.png
  • ../_images/sphx_glr_plot_line_dispersion_079.png
  • ../_images/sphx_glr_plot_line_dispersion_080.png
  • ../_images/sphx_glr_plot_line_dispersion_081.png
  • ../_images/sphx_glr_plot_line_dispersion_082.png
  • ../_images/sphx_glr_plot_line_dispersion_083.png
  • ../_images/sphx_glr_plot_line_dispersion_084.png
  • ../_images/sphx_glr_plot_line_dispersion_085.png
  • ../_images/sphx_glr_plot_line_dispersion_086.png
  • ../_images/sphx_glr_plot_line_dispersion_087.png
  • ../_images/sphx_glr_plot_line_dispersion_088.png
  • ../_images/sphx_glr_plot_line_dispersion_089.png
  • ../_images/sphx_glr_plot_line_dispersion_090.png
  • ../_images/sphx_glr_plot_line_dispersion_091.png
  • ../_images/sphx_glr_plot_line_dispersion_092.png
  • ../_images/sphx_glr_plot_line_dispersion_093.png
  • ../_images/sphx_glr_plot_line_dispersion_094.png
  • ../_images/sphx_glr_plot_line_dispersion_095.png
  • ../_images/sphx_glr_plot_line_dispersion_096.png
  • ../_images/sphx_glr_plot_line_dispersion_097.png
  • ../_images/sphx_glr_plot_line_dispersion_098.png
  • ../_images/sphx_glr_plot_line_dispersion_099.png
  • ../_images/sphx_glr_plot_line_dispersion_100.png
  • ../_images/sphx_glr_plot_line_dispersion_101.png
  • ../_images/sphx_glr_plot_line_dispersion_102.png
  • ../_images/sphx_glr_plot_line_dispersion_103.png
  • ../_images/sphx_glr_plot_line_dispersion_104.png
  • ../_images/sphx_glr_plot_line_dispersion_105.png
  • ../_images/sphx_glr_plot_line_dispersion_106.png
  • ../_images/sphx_glr_plot_line_dispersion_107.png
  • ../_images/sphx_glr_plot_line_dispersion_108.png
  • ../_images/sphx_glr_plot_line_dispersion_109.png
  • ../_images/sphx_glr_plot_line_dispersion_110.png

Out:

[275 191  70  17  11  10   9   8]

Insulators

tp = 0.8
urange = [0, .5, 1.2, 1.5, 2., 2.5, 3., 3.5, 4., 5.]
giw_s, sigma_iw, w_n = loop_u_tp(
    urange, tp * np.ones_like(urange), BETA)

eps_k = np.linspace(-1., 1., 61)
plot_dispersions(giw_s, sigma_iw, urange, tp, w_n, w, w_set)
  • ../_images/sphx_glr_plot_line_dispersion_111.png
  • ../_images/sphx_glr_plot_line_dispersion_112.png
  • ../_images/sphx_glr_plot_line_dispersion_113.png
  • ../_images/sphx_glr_plot_line_dispersion_114.png
  • ../_images/sphx_glr_plot_line_dispersion_115.png
  • ../_images/sphx_glr_plot_line_dispersion_116.png
  • ../_images/sphx_glr_plot_line_dispersion_117.png
  • ../_images/sphx_glr_plot_line_dispersion_118.png
  • ../_images/sphx_glr_plot_line_dispersion_119.png
  • ../_images/sphx_glr_plot_line_dispersion_120.png
  • ../_images/sphx_glr_plot_line_dispersion_121.png
  • ../_images/sphx_glr_plot_line_dispersion_122.png
  • ../_images/sphx_glr_plot_line_dispersion_123.png
  • ../_images/sphx_glr_plot_line_dispersion_124.png
  • ../_images/sphx_glr_plot_line_dispersion_125.png
  • ../_images/sphx_glr_plot_line_dispersion_126.png
  • ../_images/sphx_glr_plot_line_dispersion_127.png
  • ../_images/sphx_glr_plot_line_dispersion_128.png
  • ../_images/sphx_glr_plot_line_dispersion_129.png
  • ../_images/sphx_glr_plot_line_dispersion_130.png
  • ../_images/sphx_glr_plot_line_dispersion_131.png
  • ../_images/sphx_glr_plot_line_dispersion_132.png
  • ../_images/sphx_glr_plot_line_dispersion_133.png
  • ../_images/sphx_glr_plot_line_dispersion_134.png
  • ../_images/sphx_glr_plot_line_dispersion_135.png
  • ../_images/sphx_glr_plot_line_dispersion_136.png
  • ../_images/sphx_glr_plot_line_dispersion_137.png
  • ../_images/sphx_glr_plot_line_dispersion_138.png
  • ../_images/sphx_glr_plot_line_dispersion_139.png
  • ../_images/sphx_glr_plot_line_dispersion_140.png
  • ../_images/sphx_glr_plot_line_dispersion_141.png
  • ../_images/sphx_glr_plot_line_dispersion_142.png
  • ../_images/sphx_glr_plot_line_dispersion_143.png
  • ../_images/sphx_glr_plot_line_dispersion_144.png
  • ../_images/sphx_glr_plot_line_dispersion_145.png
  • ../_images/sphx_glr_plot_line_dispersion_146.png
  • ../_images/sphx_glr_plot_line_dispersion_147.png
  • ../_images/sphx_glr_plot_line_dispersion_148.png
  • ../_images/sphx_glr_plot_line_dispersion_149.png
  • ../_images/sphx_glr_plot_line_dispersion_150.png
  • ../_images/sphx_glr_plot_line_dispersion_151.png
  • ../_images/sphx_glr_plot_line_dispersion_152.png
  • ../_images/sphx_glr_plot_line_dispersion_153.png
  • ../_images/sphx_glr_plot_line_dispersion_154.png
  • ../_images/sphx_glr_plot_line_dispersion_155.png
  • ../_images/sphx_glr_plot_line_dispersion_156.png
  • ../_images/sphx_glr_plot_line_dispersion_157.png
  • ../_images/sphx_glr_plot_line_dispersion_158.png
  • ../_images/sphx_glr_plot_line_dispersion_159.png
  • ../_images/sphx_glr_plot_line_dispersion_160.png

Out:

[185 136  48  25  14  10   9   8   7   7]

Insulators

tp = 0.95
urange = [0, .5, 1.2, 1.5, 2., 2.5, 3., 3.5, 4., 5.]
giw_s, sigma_iw, w_n = loop_u_tp(
    urange, tp * np.ones_like(urange), BETA)

eps_k = np.linspace(-1., 1., 61)
plot_dispersions(giw_s, sigma_iw, urange, tp, w_n, w, w_set)


#urange = [3.2]
#beta = 100.
#tp = 0.2
# giw_s, sigma_iw, w_n = loop_u_tp(
# urange, tp * np.ones_like(urange), beta)
#
#w = np.linspace(-8, 8, 1600)
#w_set = np.concatenate((np.arange(80), np.arange(90, 140, 25)))
#eps_k = np.linspace(-2., 1., 61)
#ss, gs = plot_dispersions(giw_s, sigma_iw, urange, tp, w_n, w, w_set)
#
#
#tau, w_n = gf.tau_wn_setup(dict(BETA=beta, N_MATSUBARA=max(5 * beta, 256)))
#tp = 0.2
# g0iw_d, g0iw_o = dimer.self_consistency(
# 1j * w_n, giw_s[0], giw_s[0], 0., tp, 0.25)
#siw_d, siw_o = ipt.dimer_sigma(urange[0], tp, g0iw_d, g0iw_o, tau, w_n)
#giw_d, giw_o = dimer.dimer_dyson(g0iw_d, g0iw_o, siw_d, siw_o)
# g0iw_d, g0iw_o = dimer.self_consistency(
# 1j * w_n, giw_s[0], giw_s[0], 0., tp, 0.25)
#siw_d, siw_o = ipt.dimer_sigma(urange[0], tp, g0iw_d, g0iw_o, tau, w_n)
# ss, gs = plot_dispersions(
# np.array([giw_d, giw_o]), np.array([siw_d, siw_o]), urange, tp, w_n, w,
# w_set)
  • ../_images/sphx_glr_plot_line_dispersion_161.png
  • ../_images/sphx_glr_plot_line_dispersion_162.png
  • ../_images/sphx_glr_plot_line_dispersion_163.png
  • ../_images/sphx_glr_plot_line_dispersion_164.png
  • ../_images/sphx_glr_plot_line_dispersion_165.png
  • ../_images/sphx_glr_plot_line_dispersion_166.png
  • ../_images/sphx_glr_plot_line_dispersion_167.png
  • ../_images/sphx_glr_plot_line_dispersion_168.png
  • ../_images/sphx_glr_plot_line_dispersion_169.png
  • ../_images/sphx_glr_plot_line_dispersion_170.png
  • ../_images/sphx_glr_plot_line_dispersion_171.png
  • ../_images/sphx_glr_plot_line_dispersion_172.png
  • ../_images/sphx_glr_plot_line_dispersion_173.png
  • ../_images/sphx_glr_plot_line_dispersion_174.png
  • ../_images/sphx_glr_plot_line_dispersion_175.png
  • ../_images/sphx_glr_plot_line_dispersion_176.png
  • ../_images/sphx_glr_plot_line_dispersion_177.png
  • ../_images/sphx_glr_plot_line_dispersion_178.png
  • ../_images/sphx_glr_plot_line_dispersion_179.png
  • ../_images/sphx_glr_plot_line_dispersion_180.png
  • ../_images/sphx_glr_plot_line_dispersion_181.png
  • ../_images/sphx_glr_plot_line_dispersion_182.png
  • ../_images/sphx_glr_plot_line_dispersion_183.png
  • ../_images/sphx_glr_plot_line_dispersion_184.png
  • ../_images/sphx_glr_plot_line_dispersion_185.png
  • ../_images/sphx_glr_plot_line_dispersion_186.png
  • ../_images/sphx_glr_plot_line_dispersion_187.png
  • ../_images/sphx_glr_plot_line_dispersion_188.png
  • ../_images/sphx_glr_plot_line_dispersion_189.png
  • ../_images/sphx_glr_plot_line_dispersion_190.png
  • ../_images/sphx_glr_plot_line_dispersion_191.png
  • ../_images/sphx_glr_plot_line_dispersion_192.png
  • ../_images/sphx_glr_plot_line_dispersion_193.png
  • ../_images/sphx_glr_plot_line_dispersion_194.png
  • ../_images/sphx_glr_plot_line_dispersion_195.png
  • ../_images/sphx_glr_plot_line_dispersion_196.png
  • ../_images/sphx_glr_plot_line_dispersion_197.png
  • ../_images/sphx_glr_plot_line_dispersion_198.png
  • ../_images/sphx_glr_plot_line_dispersion_199.png
  • ../_images/sphx_glr_plot_line_dispersion_200.png
  • ../_images/sphx_glr_plot_line_dispersion_201.png
  • ../_images/sphx_glr_plot_line_dispersion_202.png
  • ../_images/sphx_glr_plot_line_dispersion_203.png
  • ../_images/sphx_glr_plot_line_dispersion_204.png
  • ../_images/sphx_glr_plot_line_dispersion_205.png
  • ../_images/sphx_glr_plot_line_dispersion_206.png
  • ../_images/sphx_glr_plot_line_dispersion_207.png
  • ../_images/sphx_glr_plot_line_dispersion_208.png
  • ../_images/sphx_glr_plot_line_dispersion_209.png
  • ../_images/sphx_glr_plot_line_dispersion_210.png

Out:

[95 62 21 16 12 10  8  7  7  6]

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

Generated by Sphinx-Gallery