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 xcoordinate of the site, as required by translation invariance in xdirection. 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@studmail.uniwuerzburg.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