Hello all, I’m interested in simulating a tight-binding system with matrix elements beyond nearest neighbor hopping (which I’ll call extended hopping, for short). I initially realized that the InfiniteSystem finalizer did not allow this construction when I tried to plot the band structure of an infinite lead. It is not clear to me why this restriction exists; I can see that the code in physics/dispersion.py only accounts for nearest neighbor hopping anyway (which could easily be changed), but since the error I encountered occurs in builder.py, I suspect that there’s a deeper reason for disallowing extended hopping terms. Forging ahead, it occurred to me that I could simply enlarge the unit cell so that all of my hopping terms only extended by a single unit cell away. Unfortunately, this also has the effect of band folding (quite a lot in my case), so the dispersion plot generated by Kwant is somewhat useless for me. But that’s of little consequence, because I’m more interested in transport. Now, since the error I encountered happens during finalization, I imagine I cannot even attach a lead with extended hopping to my finite sample. I *could* enlarge the unit cell (i.e. enlarge the translational symmetry vector) like I did for the band structure calculation, and I suspect that Kwant would happily (i.e. without runtime errors) carry out the calculation in this case. However, I worry that my artificial restriction of the leads’ translational symmetry could have some unintended consequences in the transport calculation. I’d appreciate any comments on the codebase or from experience that might suggest whether this is a safe manipulation to make or not. I’m also somewhat curious why this restriction exists, if anyone has insight to that. Thanks! Cheers, Matthew Daniels
Hi Matthew, The restriction of finalized systems to only nearest neighbor hopping between the unit cells is a choice we've made for simplicity. In that case it is much easier to formulate the algorithm for calculating modes in the leads. We are likely to relax this in the coming rewrite of the systems format [1]. Right now it is a nuisance in some cases, but not a real limitation.
Forging ahead, it occurred to me that I could simply enlarge the unit cell so that all of my hopping terms only extended by a single unit cell away. Unfortunately, this also has the effect of band folding (quite a lot in my case), so the dispersion plot generated by Kwant is somewhat useless for me. But that’s of little consequence, because I’m more interested in transport.
For avoiding band structure folding you can use the hack implemented by Christoph Groth [2]. That module allows to transform a system with a translation symmetry and a long range hopping between unit cells into a system with no symmetry but with an extra argument, momentum. Obviously finalizing the resulting system and looping over momenta is an easy way to calculate band structure that has no folding.
Now, since the error I encountered happens during finalization, I imagine I cannot even attach a lead with extended hopping to my finite sample. I *could* enlarge the unit cell (i.e. enlarge the translational symmetry vector) like I did for the band structure calculation, and I suspect that Kwant would happily (i.e. without runtime errors) carry out the calculation in this case.
However, I worry that my artificial restriction of the leads’ translational symmetry could have some unintended consequences in the transport calculation.
No worries, this is the way to go. This, as far as I can tell, does not reduce the performance. The same conventions for attaching such a lead apply: the hopping between the lead and the system must be the same as the hopping between the neighboring unit cells. Best, Anton [1] https://gitlab.kwant-project.org/kwant/kwant/wikis/Low-Level-System-Format [2] https://gitlab.kwant-project.org/cwg/wraparound
participants (2)
-
Anton Akhmerov
-
Matthew Daniels