
Dear all,
I'm triying to figure out how to attach symmetrical leads to a 3D zincblende -structure in kwant. The code I used so far:
lat = kwant.lattice.general([(0, 0.5, 0.5), (0.5, 0, 0.5), (0.5, 0.5, 0)], [(0, 0, 0), (0.25, 0.25, 0.25)]) a, b = lat.sublattices def make_cuboid(t=1.0, a=15, b=10, c=5): def cuboid_shape(pos): x, y, z = pos return 0 <= x < a and 0 <= y < b and 0 <= z < c
sys = kwant.Builder() sys[lat.shape(cuboid_shape, (0, 0, 0))] = 4 * t sys[lat.neighbors()] = -t
lead = kwant.Builder(kwant.TranslationalSymmetry((-1, 0, 0))) lead[(lat(0, j, i) for j in xrange(a) for i in xrange(b))] = 4 * t lead[lat.neighbors()] = -t
#sys.attach_lead(lead) #sys.attach_lead(lead.reversed())
return sys
causes errors. Could you help me and tell me how to attach the leads in 3D,please?
Best regards,
Julian Depatment of Physics & Astronomy University of Würzburg (Germany)

Dear Julian,
Once you execute make_cuboid(), you see the following error message:
12 13 lead = kwant.Builder(kwant.TranslationalSymmetry((-1, 0, 0))) ---> 14 lead[(lat(0, j, i) for j in xrange(a) for i in xrange(b))] = 4 * t 15 lead[lat.neighbors()] = -t 16
TypeError: 'Polyatomic' object is not callable
You wrote `lat(0, j, i)`, which is the correct way to deal with Monatomic lattices in Kwant. In fact this is just a short hand notation for a site of the lattice lat with Bravais vectors 0, j, i. If lat was a monatomic lattice, the code you're using would just add a bunch of sites of the form lat(0, j, i). In your case lat has several sublattices, so `lat(0, j, i)` does not have any meaning in Kwant. There are two ways to fix your code. If you want to stick to generator expressions [=loops of the form `(f(i) for i in somewhere)`], you can write e.g.
lead[(sublattice(0, y, z) for sublattice in lat.sublattices for y in xrange(a) for z in xrange(b))] = 4 * t
However, as you see, this becomes ugly. It's better to use shape, similarly to the way you defined the scattering region:
def lead_shape(pos): return 0 <= pos[1] < a and 0 <= pos[2] < b
sys[lat.shape(lead_shape, (0, 0, 0))] = 4 * t
Note that here the lead_shape doesn't depend on the x-coordinate of the site, as required by translation invariance in x-direction. More generally, the shape function for the lead should respect the lead translational symmetry, or the results may be not what you would expect.
I hope this helps, Anton
On Mon, May 19, 2014 at 9:39 AM, Julian Schary julian.schary@stud-mail.uni-wuerzburg.de wrote:
Dear all,
I'm triying to figure out how to attach symmetrical leads to a 3D zincblende -structure in kwant. The code I used so far:
lat = kwant.lattice.general([(0, 0.5, 0.5), (0.5, 0, 0.5), (0.5, 0.5,
0)], [(0, 0, 0), (0.25, 0.25, 0.25)]) a, b = lat.sublattices def make_cuboid(t=1.0, a=15, b=10, c=5): def cuboid_shape(pos): x, y, z = pos return 0 <= x < a and 0 <= y < b and 0 <= z < c
sys = kwant.Builder() sys[lat.shape(cuboid_shape, (0, 0, 0))] = 4 * t sys[lat.neighbors()] = -t lead = kwant.Builder(kwant.TranslationalSymmetry((-1, 0, 0))) lead[(lat(0, j, i) for j in xrange(a) for i in xrange(b))] = 4 * t lead[lat.neighbors()] = -t #sys.attach_lead(lead) #sys.attach_lead(lead.reversed()) return sys
causes errors. Could you help me and tell me how to attach the leads in 3D,please?
Best regards,
Julian Depatment of Physics & Astronomy University of Würzburg (Germany)
participants (2)
-
Anton Akhmerov
-
Julian Schary