# Define the graphene lattice
graphene = kwant.lattice.honeycomb()
a, b = graphene.sublattices
L=4
W=4
t=1
tt= 0.03 * t
phi=1*pi/2
def make_system(pot=0.000):
nnn_hoppinga=tt*e**(1j*phi)
nnn_hoppingb=tt*e**(1j*phi)
#### Define the scattering region. ####
def rec(pos):
x, y = pos
return 0 < x < L and 0 < y < W
sys = kwant.Builder()
# w: width and pot: potential maximum of the p-n junction
def potential(site):
(x, y) = site.pos
d = y * 2 + x * 3
return 0
sys[graphene.shape(rec, (1, 1))] = potential
# specify the hoppings of the graphene lattice
nn_hoppings = (((0, 0), a, b), ((0, 1), a, b), ((-1, 1), a, b))
nnn_hoppings_a = (((-1, 0), a, a), ((0, 1), a, a), ((1, -1), a, a))
nnn_hoppings_b = (((1, 0), b, b), ((0, -1), b, b), ((-1, 1), b, b))
sys[[kwant.builder.HoppingKind(*hopping) for hopping in nn_hoppings]] =
-t
sys[[kwant.builder.HoppingKind(*hopping) for hopping in
nnn_hoppings_a]] = -nnn_hoppinga
sys[[kwant.builder.HoppingKind(*hopping) for hopping in
nnn_hoppings_b]] = -nnn_hoppingb
#### Define the leads. ####
# left lead
sym0 = kwant.TranslationalSymmetry(graphene.vec((-1, 0)))
sym0.add_site_family(graphene.sublattices[0], other_vectors=[(-1, 2)])
sym0.add_site_family(graphene.sublattices[1], other_vectors=[(-1, 2)])
def lead0_shape(pos):
x, y = pos
return (0 < y < W)
lead0 = kwant.Builder(sym0)
lead0[graphene.shape(lead0_shape, (0, 0))] = -pot
lead0[[kwant.builder.HoppingKind(*hopping) for hopping in nn_hoppings]]
= -t
lead0[[kwant.builder.HoppingKind(*hopping) for hopping in
nnn_hoppings_a]] = -nnn_hoppinga
lead0[[kwant.builder.HoppingKind(*hopping) for hopping in
nnn_hoppings_b]] = -nnn_hoppingb
# right lead
sym1 = kwant.TranslationalSymmetry(graphene.vec((1, 0)))
sym1.add_site_family(graphene.sublattices[0], other_vectors=[(-1, 2)])
sym1.add_site_family(graphene.sublattices[1], other_vectors=[(-1, 2)])
def lead1_shape(pos):
x, y = pos
return (0 < y < W)
lead1 = kwant.Builder(sym1)
lead1[graphene.shape(lead1_shape, (0, 0))] = pot
lead1[[kwant.builder.HoppingKind(*hopping) for hopping in nn_hoppings]]
= -t
lead1[[kwant.builder.HoppingKind(*hopping) for hopping in
nnn_hoppings_a]] = -nnn_hoppinga
lead1[[kwant.builder.HoppingKind(*hopping) for hopping in
nnn_hoppings_b]] = -nnn_hoppingb
sys.attach_lead(lead1)
sys.attach_lead(lead0)
for site in sys.leads[0].interface+sys.leads[1].interface:
sys[site]=0
return sys
def jcurrent(sys):
J=kwant.operator.Current(sys)
wfs = kwant.wave_function(sys)
wf= wfs[0]
j=J(wf)
kwant.plotter.map(sys, j)
def main():
sys = make_system()
# Finalize the system.
sys = sys.finalized()
# Plot local current
jcurrent(sys)
# Call the main function if the script gets executed (as opposed to
imported).
# See <http://docs.python.org/library/__main__.html>.
if __name__ == '__main__':
main()