Dear KWANT developers,

I am trying to plot the energy bands as a function of k_x. The system has
finite width in z direction and infinite in y and x-direction. I have used
the wraparound module to plot the bands and I kept the translation
invariance in x-direction and attached the leads. But while plotting the
bands of lead using kwant.plotter.bands it shows an error. Please suggest
to me the correct way to plot the bands for such a system.
Thank you.
Regards

import numpy
from kwant.wraparound import wraparound,plot_2d_bands
from matplotlib import pyplot
import pandas as pd
get_ipython().magic('matplotlib inline')
import sys
import itertools
import collections
import cmath
import numpy as np
import tinyarray
from numpy import pi,sqrt,arccos,array, exp
import kwant
from kwant.builder import herm_conj
import scipy.linalg
import scipy.sparse.linalg as sla
import matplotlib as mpl
mpl.rc('text', usetex = True)
mpl.rc('font', family = 'serif')
#%matplotlib notebook
sigma_0 = tinyarray.array([[1, 0], [0, 1]])
sigma_x = tinyarray.array([[0, 1], [1, 0]])
sigma_y = tinyarray.array([[0, -1j], [1j, 0]])
sigma_z = tinyarray.array([[1, 0], [0, -1]])
a=1; L=30; W=1; H=1;
def onsite(site):
    return (2.0 * np.cos(1.5) + 4) * sigma_z

def hoppingx(site0, site1):
    return (-sigma_z - 1j * sigma_x)

def hoppingy(site0, site1):
    return -sigma_z - 1j * sigma_y

def hoppingz(site0, site1):
    return (-1 * 1.0 * sigma_z)

lat =kwant.lattice.cubic(norbs=2)
syst = kwant.Builder(kwant.TranslationalSymmetry(lat.vec((0, W, 0))))
syst[(lat(x, y, z) for x in range(L) for y in range(W) for z in range(H))]
= onsite
syst[kwant.builder.HoppingKind((1, 0, 0), lat, lat)] = hoppingx
syst[kwant.builder.HoppingKind((0, 1, 0), lat, lat)] = hoppingy
syst[kwant.builder.HoppingKind((0, 0, 1), lat, lat)] = hoppingz
syst = kwant.wraparound.wraparound(syst)

#Left lead
leadL = kwant.Builder(kwant.TranslationalSymmetry((-a, 0, 0), lat.vec((0,
W, 0))))  #trans inv in transport dir and ky
leadL[(lat(x, y, z) for x in range(L) for y in range(W) for z in range(H))]
= onsite
leadL[kwant.builder.HoppingKind((1, 0, 0), lat, lat)] = hoppingx
leadL[kwant.builder.HoppingKind((0, 1, 0), lat, lat)] = hoppingy
leadL[kwant.builder.HoppingKind((0, 0, 1), lat, lat)] = hoppingz
#Right lead
leadR = kwant.Builder(kwant.TranslationalSymmetry((-a, 0, 0), lat.vec((0,
W, 0))))
leadR[(lat(x, y, z) for x in range(L) for y in range(W) for z in range(H))]
= onsite
leadR[kwant.builder.HoppingKind((1, 0, 0), lat, lat)] = hoppingx
leadR[kwant.builder.HoppingKind((0, 1, 0), lat, lat)] = hoppingy
leadR[kwant.builder.HoppingKind((0, 0, 1), lat, lat)] = hoppingz

leadL = kwant.wraparound.wraparound(leadL, keep=0)  #keep the translational
invariance in x-direction
leadR = kwant.wraparound.wraparound(leadR, keep=0)

syst.attach_lead(leadL)
syst.attach_lead(leadR)

kwant.plot(syst)
syst = syst.finalized()

kwant.plotter.bands(syst.leads[1], momenta=np.linspace(-pi, pi, 101,
endpoint=False))

-

Reply via email to