Quantum transport in system with periodic boundary condition.
Dear all, With an other student, we are trying to study transport in infinity system, especially we want study tunnel Klein effect in graphene. We are trying to erase edge effect by add a periodic boundary condition, the system should be like a giant nanotube. We do ancillaries system an copy hopping terms for sytem and lead, it produce some mistake, kwant say: "connects non-neighboring lead unit cells.Only nearest-cell hoppings are allowed (consider increasing the lead period)" when we try to attach lead. I attach the script, It is possible to produce this kind of system easily and compute the transmission? Regards, Sébastien Guissart def main() : X = 20 Y = 10 t=1.0 e0=2 def rectangle(pos): x, y = pos return -X/2-1 < x < X/2-1 graphene = kwant.lattice.honeycomb(1,'b') sym = kwant.TranslationalSymmetry(graphene.vec((-Y/2,Y))) anc = kwant.Builder(sym) ### 2D periodic conditions anc[graphene.shape(rectangle,(0, 0))] = None anc[graphene.neighbors()] = None sys = kwant.Builder() sys[anc.sites()] = e0 sys[((a, sym.to_fd(b)) for a, b in anc.hoppings())] = -t sym_anc = kwant.TranslationalSymmetry(graphene.vec((1,0)),graphene.vec((-Y/2,Y))) anc_left = kwant.Builder(sym_anc) sym_left = kwant.TranslationalSymmetry(graphene.vec((1,0))) lead_left = kwant.Builder(sym_left) anc_left[graphene.shape(lambda p: True,(0, 0))] = None anc_left[graphene.neighbors()] = None lead_left[anc_left.sites()] = e0 lead_left[((a, sym_anc.to_fd(b)) for a, b in anc_left.hoppings())] = -t sys.attach_lead(lead_left) sys.attach_lead(lead_left.reversed()) sys = sys.finalized() kwant.plot(sys)
Dear all, Sébastien and Julien tried to attach leads with periodic boundary conditions to a scattering region with periodic boundary conditions. This is something that Kwant does not support well yet, as finalized builders may only have a single symmetry vector. On an earlier occasion we showed how to make a Kwant system with PBCs (without leads): http://www.mail-archive.com/kwant-discuss%40kwant-project.org/msg00036.html How to use this trick for a system with leads? Sebastien Guissart writes:
With an other student, we are trying to study transport in infinity system, especially we want study tunnel Klein effect in graphene. We are trying to erase edge effect by add a periodic boundary condition, the system should be like a giant nanotube. We do ancillaries system an copy hopping terms for sytem and lead, it produce some mistake, kwant say:
"connects non-neighboring lead unit cells.Only nearest-cell hoppings are allowed (consider increasing the lead period)"
You got it almost right. Basically the only thing that was wrong in your script is that the line lead_left[((a, sym_anc.to_fd(b)) for a, b in anc_left.hoppings())] = -t needs to be replaced by lead_left[((a, sym.to_fd(b)) for a, b in anc_left.hoppings())] = -t This is because we want to apply the PBCs only transversally and keep the longitudinal symmetry intact. However, even after this modification your script fails with the same error message as before. It is instructive to add the line kwant.plot(lead_left) just before the call to attach_lead. We see that the unit cell is correct, but the problem is that the “wrapped” hopping spans across multiple lead unit cells. This is something that Kwant does not allow. Choosing a less slanted unit cell would avoid the problem, however Kwant automatically chooses the transversal direction of the “fundamental domain” of a symmetry according to a fixed algorithm, and this determines the shape of the unit cell. Normally this does not matter, but here it is a problem due to the long “wrapped” hopping. There are two ways to work around this problem: (1) Increase the length of the unit cell so that the long hopping does not span multiple unit cells anymore. In your case this means replacing graphene.vec((1,0)) by graphene.vec((5,0)). This solution is ugly, costly in terms of computation time and leads to overcharged band structure plots. (2) Kwant actually does offer a way to control the transversal direction of the unit cell, though in a rather obscure way. Add the following code after sym_left has been created: for fam in graphene.sublattices: sym_left.add_site_family(fam, [(-Y/2,Y)]) Have a look at the documentation to see what is going on. Hope this helps, Christoph
participants (2)
-
christoph.groth@cea.fr -
Sebastien Guissart