Scattering rates change across the Metal Insulator Transition

Explore the low energy expansion of the Matsubara self-energy. The zero frequency value being the scattering rate.

# Created Mon Mar  7 01:14:02 2016
# Author: Óscar Nájera

from __future__ import division, absolute_import, print_function

from math import log, ceil
import numpy as np
import matplotlib.pyplot as plt
import dmft.dimer as dimer
import dmft.common as gf
import dmft.ipt_imag as ipt
plt.matplotlib.rcParams.update({'axes.labelsize': 22,
                                'xtick.labelsize': 14, 'ytick.labelsize': 14,
                                'axes.titlesize': 22})


def loop_u_tp(u_range, tp_range, beta, seed='mott gap'):
    """Solves IPT dimer and return Im Sigma_AA, Re Simga_AB

    returns list len(betarange) x 2 Sigma arrays
"""
    tau, w_n = gf.tau_wn_setup(
        dict(BETA=beta, N_MATSUBARA=max(2**ceil(log(4 * beta) / log(2)), 256)))
    giw_d, giw_o = dimer.gf_met(w_n, 0., 0., 0.5, 0.)
    if seed == 'I':
        giw_d, giw_o = 1 / (1j * w_n - 4j / w_n), np.zeros_like(w_n) + 0j

    sigma_iw = []
    iterations = []
    for tp, u_int in zip(tp_range, u_range):
        giw_d, giw_o, loops = dimer.ipt_dmft_loop(
            beta, u_int, tp, giw_d, giw_o, tau, w_n, 1e-3)
        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.imag, siw_o.real))

    print(np.array(iterations))

    return sigma_iw

U_int = np.arange(.5, 4.5, 0.1)
sigmasM_Ur = loop_u_tp(U_int, .3 * np.ones_like(U_int), 200., 'M')
sigmasI_Ur = loop_u_tp(U_int[::-1], .3 * np.ones_like(U_int), 200., 'I')[::-1]

Out:

[187  17  27  31  22  36  31  31  35  40  44  39  38  42  41  40  39  38
  37  40  35  34  32  30  28  24  22  19  16  13  12   4   4   4   4   4
   4   4   4   3]
[  5   4   4   4   4   4   4   4   4   4   4   4   4   4   5   5   5   6
   6   6   8  10  14 119  41  46  42  43  43  44  40  45  40  41  31  27
  36  22  32  26]
def plot_zero_w(function_array, iter_range, beta, entry, label_head, ax, dx):
    """Plot the zero frequency extrapolation of a function
    Parameters
    ----------
    function_array: real ndarray
      contains the function (G, Sigma) to linearly fit over 2 first frequencies
    iter_range: list floats
      values of changing variable U or tp
    berarange: real ndarray 1D, values of beta
    entry: 0, 1 corresponds to diagonal or off-diagonal entry of function
    label_head: string for label
    ax, dx: matplotlib axis to plot in
    """
    tau, w_n = gf.tau_wn_setup(dict(BETA=beta, N_MATSUBARA=20))

    dat = []
    for j, u in enumerate(iter_range):
        dat.append(np.polyfit(w_n[:2], function_array[j][entry][:2], 1))
    ax.plot(iter_range, -np.array(dat)[:, 1], label=label_head)
    dx.plot(iter_range, -np.array(dat)[:, 0], label=label_head)


f, (si, ds) = plt.subplots(2, 2, sharex=True)
plot_zero_w(sigmasI_Ur, U_int, 100., 0, 'INS', si[0], ds[0])
plot_zero_w(sigmasM_Ur, U_int, 100., 0, 'MET', si[0], ds[0])
plot_zero_w(sigmasI_Ur, U_int, 100., 1, 'INS', si[1], ds[1])
plot_zero_w(sigmasM_Ur, U_int, 100., 1, 'MET', si[1], ds[1])

si[0].legend(loc=0, prop={'size': 8})

si[0].set_ylabel(r'-$\Im \Sigma_{AA}(w=0)$')
ds[0].set_ylabel(r'-$\Im d\Sigma_{AA}(w=0)$')
si[1].set_ylabel(r'-$\Re \Sigma_{AB}(w=0)$')
ds[1].set_ylabel(r'-$\Re d\Sigma_{AB}(w=0)$')

ds[0].set_xlabel('$U/D$')
ds[1].set_xlabel('$U/D$')
../_images/sphx_glr_plot_scatering_fixB_001.png

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

Generated by Sphinx-Gallery