Thanks for the suggestion. I could do the most part of it but got stuck at one point. I was trying to do it from lattice model (discrete), defining an onsite potential which is varying linearly along the lattice sites. But is still showing error. Could you please tell where I am making the mistake ?
import kwant import numpy as np import math ## import matplotlib #matplotlib.use('Agg') ## # For plotting from matplotlib import pyplot as plt # For matrix support import tinyarray I2 = tinyarray.array([[1,0], [0,1]]) Sx = tinyarray.array([[0,1], [1,0]]) Sy = tinyarray.array([[0,-1j], [1j,0]]) Sz = tinyarray.array([[1,0], [0,-1]]) Sp = tinyarray.array([[0,2], [0,0]]) Sm = tinyarray.array([[0,0], [2,0]]) def create_system(length=10): t1 = 0.5 ; t2 = 1.0 ; def Onsite(site): (x, ) = site.pos potential = x return x # system building lat = kwant.lattice.square(a=1, norbs=2) syst = kwant.Builder() # central scattering region syst[(lat(x, 0) for x in range(length))] = t1*Sx syst[lat.neighbors()] = (t2*Sx - 1j*t2*Sy)/2 # add leads sym = kwant.TranslationalSymmetry((-1, 0)) lead_left = kwant.Builder(sym) lead_left[lat(0, 0)] = t1*Sx + Onsite*I2 lead_left[lat.neighbors()] = (t2*Sx - 1j*t2*Sy)/2 syst.attach_lead(lead_left) syst.attach_lead(lead_left.reversed()) return syst def main(): # parameters # create system syst = create_system(length=10).finalized() # plot the system and dispersion kwant.plot(syst) kwant.plotter.bands(syst.leads[0], show=False) plt.plot([-np.pi, np.pi], [chemical_potential, chemical_potential], 'k--') plt.show() lead = syst.leads[0] bands = kwant.physics.Bands(lead) momenta = np.linspace(-2*np.pi, 2*np.pi, 401) energies = [bands(k) for k in momenta] plt.plot(momenta, energies,linestyle='--') plt.xlim(-2*np.pi, 2*np.pi) #pyplot.ylim(-5, 5) plt.xlabel("$k$") plt.ylabel("Energy") #pyplot.axhline(y=0.0, color='k', linestyle='-') plt.tight_layout() plt.grid() plt.show() plt.close() if __name__ == '__main__': main()