Leads with larger unit cell
Hello, I have a question regarding the construction of leads with periods greater than one lattice constant and having longer hoppings in those leads. I have constructed such a lead, but when I plot its band structure I am getting a different result than when plotting band structure of the exactly same system in PythTB (from David Vanderbilt's group at Rutgers University). My minimal working examples showing the issue are included below the message (I uploaded the resulting images to imgur: http://imgur.com/a/5uzyo , first image being the kwant's output). The band structure calculated by kwant seems to be folded in half - the energies in both programs are exactly the same, but they correspond to different crystal momentum. Am I defining the lead period in a wrong way? Best regards, Michal Papaj Kwant code: import kwant import matplotlib.pyplot as plt E = 0.0 t1 = 1.0 t2 = -1.0 width = 50 lat = kwant.lattice.square(1) sym = kwant.TranslationalSymmetry((-2, 0)) lead = kwant.Builder(sym) lead[(lat(0, y) for y in range(width))] = E lead[(lat(-1, y) for y in range(width))] = E lead[kwant.builder.HoppingKind((1, 0), lat, lat)] = t1 lead[kwant.builder.HoppingKind((0, 1), lat, lat)] = t1 lead[kwant.builder.HoppingKind((2, 0), lat, lat)] = t2 lead[kwant.builder.HoppingKind((0, 2), lat, lat)] = t2 kwant.plotter.bands(lead.finalized(), momenta=100) PythTB code: from pythtb import * import pylab as pl E = 0.0 t1 = 1.0 t2 = -1.0 width = 50 lat=[[1.0, 0.0],[0.0, 1.0]] orb=[[0.0,0.0]] test_model = tb_model(2,2,lat, orb) test_model.set_onsite([E]) test_model.set_hop(t1,0,0,[1.0,0.0]) test_model.set_hop(t1,0,0,[0.0,1.0]) test_model.set_hop(t2,0,0,[2.0,0.0]) test_model.set_hop(t2,0,0,[0.0,2.0]) test_model_cut=test_model.cut_piece(width,1,glue_edgs=False) path=[[-0.5],[0.0],[0.5]] kpts=k_path(path,50) evals_cut=test_model_cut.solve_all(kpts) fig=pl.figure() for i in range(width): pl.plot(evals_cut[i]) pl.show()
Hi Michal,
No, everything is correct. The problem is that Kwant currently does
not support periodic systems with hopping that goes by more than one
unit cell. This makes things more complicated if you have to deal with
band structure of the leads, since all the momenta are taken modulo
the inverse period of the multiplied unit cell, and the Brillouin zone
is folded. However this bears no consequence for transport. We plan to
get around this limitation in the next major version (Kwant 2.0).
Best,
Anton
On Sun, Sep 14, 2014 at 1:28 AM, Michal Papaj
Hello, I have a question regarding the construction of leads with periods greater than one lattice constant and having longer hoppings in those leads. I have constructed such a lead, but when I plot its band structure I am getting a different result than when plotting band structure of the exactly same system in PythTB (from David Vanderbilt's group at Rutgers University). My minimal working examples showing the issue are included below the message (I uploaded the resulting images to imgur: http://imgur.com/a/5uzyo , first image being the kwant's output). The band structure calculated by kwant seems to be folded in half - the energies in both programs are exactly the same, but they correspond to different crystal momentum. Am I defining the lead period in a wrong way? Best regards,
Michal Papaj
Kwant code: import kwant import matplotlib.pyplot as plt
E = 0.0 t1 = 1.0 t2 = -1.0 width = 50
lat = kwant.lattice.square(1) sym = kwant.TranslationalSymmetry((-2, 0)) lead = kwant.Builder(sym) lead[(lat(0, y) for y in range(width))] = E lead[(lat(-1, y) for y in range(width))] = E lead[kwant.builder.HoppingKind((1, 0), lat, lat)] = t1 lead[kwant.builder.HoppingKind((0, 1), lat, lat)] = t1 lead[kwant.builder.HoppingKind((2, 0), lat, lat)] = t2 lead[kwant.builder.HoppingKind((0, 2), lat, lat)] = t2
kwant.plotter.bands(lead.finalized(), momenta=100)
PythTB code: from pythtb import * import pylab as pl
E = 0.0 t1 = 1.0 t2 = -1.0 width = 50
lat=[[1.0, 0.0],[0.0, 1.0]] orb=[[0.0,0.0]]
test_model = tb_model(2,2,lat, orb)
test_model.set_onsite([E]) test_model.set_hop(t1,0,0,[1.0,0.0]) test_model.set_hop(t1,0,0,[0.0,1.0]) test_model.set_hop(t2,0,0,[2.0,0.0]) test_model.set_hop(t2,0,0,[0.0,2.0])
test_model_cut=test_model.cut_piece(width,1,glue_edgs=False)
path=[[-0.5],[0.0],[0.5]] kpts=k_path(path,50)
evals_cut=test_model_cut.solve_all(kpts)
fig=pl.figure() for i in range(width): pl.plot(evals_cut[i]) pl.show()
participants (2)
-
Anton Akhmerov
-
Michal Papaj