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()