Conductivity calculation using the kpm method for a spinful system
Dear developer, I was trying to calculate the conductivity of honeycomb lattice, where I have included the Haldane term along with the spin-orbit Rashba term (Kane-Mele model). I was following the tutorial provided in chapter 2.9 (https://kwant-project.org/doc/1/tutorial/kpm). The code shows an error when I include the spin in the system. My code is attached below, from matplotlib import pyplot as plt import tinyarray as tn import kwant import numpy as np t = 1 t2 = 0.3 sgm_0=tn.array([[1,0],[0,1]]) sgm_x=tn.array([[0,1],[1,0]]) sgm_y=tn.array([[0,-1j],[1j,0]]) sgm_z=tn.array([[1,0],[0,-1]]) def make_syst_topo(l=20, a=1, m=0): alpha = 0.01 syst = kwant.Builder() lat = kwant.lattice.honeycomb(a, norbs=1, name=['a', 'b']) a = lat.a b = lat.b def rectangle(pos): x, y = pos return - l<= x <= +l and - l<= y <= +l def rashba(site_i,site_j): d_ij = site_i.pos - site_j.pos return -1j*alpha*(sgm_x*d_ij[1]-sgm_y*d_ij[0]) def nn_hop(site_i, site_j): return rashba(site_i, site_j) - t * sgm_0 syst[lat.shape(rectangle, (0, 0))] = 0.0*sgm_0 syst[kwant.builder.HoppingKind((0, 0), a, b)] = nn_hop syst[kwant.builder.HoppingKind((0, 1), a, b)] = nn_hop syst[kwant.builder.HoppingKind((-1, 1), a, b)] = nn_hop syst[lat.a.neighbors()] = 1j * t2 * sgm_z syst[lat.b.neighbors()] = -1j * t2*sgm_z syst.eradicate_dangling() return lat, syst.finalized() def plot_system(syst): kwant.plot(syst,site_size=0.1, hop_lw=0.01) # Plot fill density of states plus curves on the same axes. def plot_dos_and_curves(dos, labels_to_data): plt.figure(figsize=(10,8)) plt.fill_between(dos[0], dos[1], label="DoS [a.u.]", alpha=0.5, color='gray') for label, (x, y) in labels_to_data: plt.plot(x, y, label=label, linewidth=2) plt.legend(loc='upper center', framealpha=0.5, fontsize=12) plt.xlabel(r'$E/t$'); # plt.ylabel('ylabel') plt.show() plt.clf() def conductivity_example(): # construct the Haldane model lat, fsyst = make_syst_topo() # find 'A' and 'B' sites in the unit cell at the center of the disk where = lambda s: np.linalg.norm(s.pos) < 1 # component 'xx' s_factory = kwant.kpm.LocalVectors(fsyst, where) cond_xx = kwant.kpm.conductivity(fsyst, alpha='x', beta='x', mean=True, num_vectors=None, vector_factory=s_factory) # component 'xx' s_factory = kwant.kpm.LocalVectors(fsyst, where) cond_yy = kwant.kpm.conductivity(fsyst, alpha='y', beta='y', mean=True, num_vectors=None, vector_factory=s_factory) # component 'xy' s_factory = kwant.kpm.LocalVectors(fsyst, where) cond_xy = kwant.kpm.conductivity(fsyst, alpha='x', beta='y', mean=True, num_vectors=None, vector_factory=s_factory) energies_x = cond_xx.energies energies_y = cond_yy.energies cond_array_xx = np.array([cond_xx(e, temperature=0.00) for e in energies_x]) cond_array_xy = np.array([cond_xy(e, temperature=0.00) for e in energies_x]) cond_array_yy = np.array([cond_yy(e, temperature=0.00) for e in energies_y]) # area of the unit cell per site area_per_site = np.abs(np.cross(*lat.prim_vecs)) / len(lat.sublattices) cond_array_xx /= area_per_site cond_array_xy /= area_per_site cond_array_yy /= area_per_site # ldos s_factory = kwant.kpm.LocalVectors(fsyst, where) spectrum = kwant.kpm.SpectralDensity(fsyst, num_vectors=None, vector_factory=s_factory) plot_dos_and_curves( (spectrum.energies, spectrum.densities * 8), [ (r'$\sigma_{xx} / 4$', (energies_x, cond_array_xx / 4)), (r'$\sigma_{xy}$', (energies_x, cond_array_xy)), (r'$\sigma_{yy} / 4$', (energies_y, cond_array_yy / 4))] ) def main(): fsyst = make_syst_topo()[1] plot_system(fsyst) conductivity_example() if __name__ == '__main__': main() I shall look forward to your kind reply.
participants (1)
-
mondal18@iitg.ac.in