How to get higher plateaus in quantum Hall conductivity?

Hello Kwant community, I am using the KPM method to calculate conductivities in the simplest QHE system -- square lattice nearest hopping gas. The goal is to see well-quantized plateaus up to n=5. I use local vectors at the center of the system. But it seems not available at all as far as I've tried increasing system size (like 80*80) and number of moments (like 500). I doubt if it really needs so demanding computational resources in order to get n=5. Hopefully I missed something basic here. Thank you!
from cmath import exp import numpy as np import time import sys import kwant
#from matplotlib import pyplot from matplotlib import pyplot as plt
L_sys = [50, 50]
E_F=0.4
def make_system(a=1, t=1): lat = kwant.lattice.square(a, norbs=1) syst = kwant.Builder() def fluxx(site1, site2, Bvec): pos = [(site1.pos[i]+site2.pos[i]-L_sys[i])/2.0 for i in range(2)] return exp(-1j * Bvec * pos[1] ) def fluxy(site1, site2, Bvec): pos = [(site1.pos[i]+site2.pos[i]-L_sys[i])/2.0 for i in range(2)] return 1 #exp(-1j * (-Bvec * pos[0]))
def hopx(site1, site2, Bvec): # The magnetic field is controlled by the parameter Bvec return fluxx(site1, site2, Bvec) * t def hopy(site1, site2, Bvec): # The magnetic field is controlled by the parameter Bvec return fluxy(site1, site2, Bvec) * t def onsite(site): return 4*t
#### Define the scattering region. #### syst[(lat(x, y) for x in range(L_sys[0]) for y in range(L_sys[1]))] = onsite # hoppings in x-direction syst[kwant.builder.HoppingKind((1, 0), lat, lat)] = hopx # hoppings in y-directions syst[kwant.builder.HoppingKind((0, 1), lat, lat)] = hopy
# Finalize the system. syst = syst.finalized() return lat, syst
def cond(lat, syst, random_vecs_flag=False): center_pos = [x/2 for x in L_sys] center0 = lambda s: np.linalg.norm(s.pos-center_pos) < 2 num_mmts = 800; if random_vecs_flag: center_vecs = kwant.kpm.RandomVectors(syst, where=center0) one_vec = next(center_vecs) num_vecs = 10 # len(center_vecs) else: center_vecs = np.array(list(kwant.kpm.LocalVectors(syst, where=center0))) one_vec = center_vecs[0] num_vecs = len(center_vecs) area_per_orb = np.abs(np.cross(*lat.prim_vecs)) norm = area_per_orb * np.linalg.norm(one_vec) ** 2
Binvfields = np.arange(3.01, 26.2, 1) params = dict(Bvec=0)
dataxx = [] dataxy = [] for Binv in Binvfields: params['Bvec'] = 1/Binv cond_xx = kwant.kpm.conductivity(syst, params=params, alpha='x', beta='x', mean=True, num_moments=num_mmts, num_vectors=num_vecs, vector_factory=center_vecs) cond_xy = kwant.kpm.conductivity(syst, params=params, alpha='x', beta='y', mean=True, num_moments=num_mmts, num_vectors=num_vecs, vector_factory=center_vecs) dataxx.append(5*cond_xx(mu=E_F, temperature=0.0)/norm) dataxy.append(-cond_xy(mu=E_F, temperature=0.0)/norm) print(dataxx) print(dataxy)
plot_curves( [ (r'$\sigma_{xx}\times5$',(Binvfields,dataxx)), (r'$\sigma_{xy}$',(Binvfields,dataxy)), ] )
def plot_curves(labels_to_data): plt.figure(figsize=(12,10)) for label, (x, y) in labels_to_data: plt.plot(x, y, label=label, linewidth=2) plt.legend(loc=2, framealpha=0.5) plt.xlabel("1/B") plt.ylabel(r'$\sigma [e^2/h]$') plt.show() plt.clf()
def main(): lat, syst = make_system() cond(lat, syst)
if __name__ == '__main__': main()
participants (1)
-
Jerry xhm