def eval(Sigma, omega_vec, k_vec): Sigma_in = 1.0j / htr_to_meV width = 5.0 / htr_to_meV inv_sigma2 = (3.0 / width)**2 shift = np.linspace(-width, +width, num=21) weight_vec = np.sqrt(0.5 * inv_sigma2 / np.pi) * np.exp(-inv_sigma2 * shift**2) weight_vec /= np.sum(weight_vec) spec = np.zeros((omega_vec.size, k_vec.size)) for iomega in range(omega_vec.size): for ikpt in range(k_vec.size): ReS = 0; ImS = 0 for (omega, weight) in zip(omega_vec[iomega] + shift, weight_vec): kk = k_vec[ikpt] eps_k = -Sigma.sigma * 0.5 * kk**2 / Sigma.eff_mass Sigma_in = (omega - eps_k) + 0.1j / htr_to_meV (Sigma_out, it) = scf.self_energy(1, eta, Sigma, kk, Sigma_in) ReS += Sigma_out.real * weight ImS += Sigma_out.imag * weight spec[iomega, ikpt] += -ImS / (np.pi * ((omega - eps_k - ReS)**2 + ImS**2)) return spec
from __future__ import print_function from bose_einstein import bose_einstein from constant import htr_to_K, htr_to_meV, eta import argparser import mass_factor import norm_k import numpy as np import scf import system args = argparser.read_argument('Evaluate electron-phonon mass') thres = args.thres / htr_to_meV Sigma = system.make_data(args.dft, args.vb) for temp in np.arange(1.0, args.temp, 1.0): beta = htr_to_K / temp Sigma.bose_einstein = bose_einstein(Sigma.freq, beta) Sigma_in = 1j / htr_to_meV _, zz = scf.self_energy(1, thres, Sigma, eta, Sigma_in) lam = 1.0 / zz - 1.0 mf = mass_factor.eval(lam, args.method) print(temp, mf, zz, lam)
from __future__ import print_function from bose_einstein import bose_einstein from constant import htr_to_K, htr_to_meV, htr_to_eV import argparser import norm_k import numpy as np import scf import system args = argparser.read_argument('Evaluate step-like feature in electron-phonon coupling') thres = args.thres / htr_to_meV beta = htr_to_K / args.temp Sigma = system.make_data(args.dft, args.vb) Sigma.bose_einstein = bose_einstein(Sigma.freq, beta) for energy_meV in np.arange(0.0, args.energy, 0.5): energy = energy_meV / htr_to_meV kk = norm_k.eval(Sigma.eff_mass, energy) Sigma_in = 1e-3j / htr_to_meV Sigma_out, it = scf.self_energy(args.method, thres, Sigma, kk, Sigma_in) if args.vb: real_energy = -energy else: real_energy = energy print(real_energy * htr_to_meV, -Sigma_out.imag * htr_to_meV, it)
from __future__ import print_function from bose_einstein import bose_einstein from constant import htr_to_K, htr_to_meV, htr_to_THz import argparser import norm_k import numpy as np import scf import system args = argparser.read_argument('Evaluate electron-phonon lifetime') thres = args.thres / htr_to_meV Sigma = system.make_data(args.dft, args.vb) norm_k = norm_k.eval(Sigma.eff_mass, args.energy / htr_to_meV) for temp in np.arange(1.0, args.temp, 1.0): beta = htr_to_K / temp Sigma.bose_einstein = bose_einstein(Sigma.freq, beta) Sigma_in = 0.1j / htr_to_meV (Sigma_out, it) = scf.self_energy(args.method, thres, Sigma, norm_k, Sigma_in) print(temp, -2.0 * Sigma_out.imag * htr_to_THz, Sigma_out.imag * htr_to_meV, it)