Dear kwant users
I was trying to implement the following Hamiltonian: H_j,j+1 = H_j+1,j = -t,
H_j,j = -0.02*t*cos(k_y + 2pi (phi/W)*j)
for a square lattice of size W*L with attached leads in y-direction.
Unfortunately it doesn't work. Could anyone give me a hint
how to do this the right way?
Thank you for your answers in advance
Best,
Simon
def make_system(a=1, L=60, W=30):
offdiagmat = np.zeros((W, W))
for i in range(W):
for j in range(W):
if i == j + 1 or j == i + 1:
offdiagmat[i][j] = 1
hamiltonian = "-1.0*offdiagmat - identity(4)*2*0.01*cos(k_y +
(2*pi*phi/30)*x)"
hamiltonian = kwant.continuum.sympify(hamiltonian,
locals=dict(offdiagmat=offdiagmat))
template = kwant.continuum.discretize(hamiltonian, grid=a)
def shape(site):
(x, y) = site.pos
return (0 <= x < W and 0 <= y < L)
def lead_shape(site):
(x, y) = site.pos
return (0 <= x < W)
syst = kwant.Builder()
syst.fill(template, shape, (0, 0))
lead = kwant.Builder(kwant.TranslationalSymmetry([0, -a]))
lead.fill(template, lead_shape, (0, 0))
syst.attach_lead(lead)
syst.attach_lead(lead.reversed())
syst = syst.finalized()
return syst
def analyze_system():
params = dict(phi=0.2)
syst = make_system()
kwant.plotter.bands(syst.leads[0], params=params, momenta=np.linspace(-pi,
pi, 200), show=False)
plt.grid(True)
plt.xlim(-pi, pi)
plt.xlabel('momentum [1/A]')
plt.ylabel('energy [eV]')
plt.show()
def main():
analyze_system()
if __name__ == '__main__':
main()