import numpy as np
import kwant
import matplotlib.pyplot as plt
rt3 = np.sqrt(3)
a1 = np.array([2*rt3, 0])/2/rt3
a2 = np.array([rt3/2, -1.5])/2/rt3
A_POS = np.array([0, 0])/2/rt3
B_POS = np.array([rt3/2, -0.5])/2/rt3
C_POS = np.array([np.sqrt(3), 0])/2/rt3
D_POS = np.array([np.sqrt(3)*3/2, -0.5])/2/rt3
graphene = kwant.lattice.general([a1, a2], # lattice vectors
[A_POS, B_POS, C_POS, D_POS]) # Coordinates of the sites
A, B, C, D = graphene.sublattices
zigzag_ribbon = kwant.Builder(kwant.TranslationalSymmetry([1, 0]))
zigzag_ribbon[graphene.shape((lambda pos: pos[1] > -30 and pos[1] <= 0), (0, 0))] = 0
hoppings0 = (((0, 0), A, B),
((0, 0), B, C),
((0, 0), C, D),
((0, -1), B, A),
((-1, 0), D, A))
t = 1
hopping_pi = ((0, -1), D, C)
zigzag_ribbon[[kwant.builder.HoppingKind(*hopping) for hopping in hoppings0]] = t
zigzag_ribbon[[kwant.builder.HoppingKind(*hopping_pi)]] = -t
def in_hole(site):
x, y = site.pos
return x == 0 and y == 0
for site in filter(in_hole, list(zigzag_ribbon.sites())):
del zigzag_ribbon[site]
bands = kwant.physics.Bands(zigzag_ribbon.finalized())
ks = np.linspace(0, 2* np.pi, 1024)
Ek = [bands(k) for k in ks]
|