Dear all,
I want to calculate the transmission vs incident angle in graphene with a potential barrier. I use sys = kwant.wraparound.wraparound(sys) and lead = kwant.wraparound.wraparound(lead, keep=0) to construct the periodical system. I almost get the correct results, but I find that the definition of angle is different. Could you please help me to find out the reason. The results comparison is also attached.
Regards,
Khani Hosein
my code is:
import numpy as np
import matplotlib.pyplot as plt
from numpy import pi,sqrt
import kwant
import sys
from numpy import pi
from math import asin
from matplotlib import pyplot
a = 1.
V0 = 0.0
W = 2.
L = 448
t = 3
def Rectangle(pos):
x,y=pos
return 0<=x<=L and -0.5<=y<=W
sin_30, cos_30 = (1 / 2, sqrt(3) / 2)
lat = kwant.lattice.general([(1, 0), (sin_30, cos_30)],
[(0, 0), (1/2, 1 / (2*sqrt(3)))])
a,b= lat.sublattices
sys = kwant.Builder(kwant.TranslationalSymmetry(lat.vec((-1, 2))))
sys[lat.shape(Rectangle,(0,0.6))]= 0.2
sys[lat.neighbors(1)] = -t
sys = kwant.wraparound.wraparound(sys)
def lead_shape(pos):
x,y=pos
return -0.5<=y<=W
lead = kwant.Builder(kwant.TranslationalSymmetry((1, 0), lat.vec((-1, 2))))
lead[lat.shape(lead_shape,(0,0.6))] = 0.
lead[lat.neighbors(1)] = -t
lead = kwant.wraparound.wraparound(lead, keep=0)
kwant.plot(sys)
sys.attach_lead(lead)
sys.attach_lead(lead.reversed())
kwant.plot(sys)
sys = sys.finalized()
ky=0.
momenta = [-2*pi + 0.002 * 2*pi * i for i in range(1001)]
bands = kwant.physics.Bands(sys.leads[0],[ky])
energies = [bands(k) for k in momenta]
pyplot.figure()
pyplot.plot(momenta, energies)
pyplot.xlabel("momentum [(lattice constant)^-1]")
pyplot.ylabel("energy [t]")
pyplot.show()
kys = np.arange(-0.08, 0.08, 0.0002)
kysp =np.arange(-90, 90, 0.225)
energy=0.08
transmission = []
num_prop = []
thetap=[]
for ky in kys:
theta=180.*asin(ky/energy)/pi
thetap.append(theta)
smatrix = kwant.smatrix(sys, energy, [ky])
transmission.append(smatrix.transmission(1, 0))
num_prop.append(smatrix.num_propagating(0))
print (ky)
plt.plot(thetap, transmission)
plt.show()