Dear Yuhao, To expand Joe's answer: I have created a demo notebook for graphene with 3NN hoppings: http://nbviewer.jupyter.org/urls/owncloud.lorentz.leidenuniv.nl/index.php/s/... (also in attachment). Tricky part here is that you need to select correct unit cell, so that periodic boundary condition hopping, created by wraparound, does not compete with hoppings in system and is not overwritten. There are some examples how to deal with it. Also: for my experience, wraparound works not always nicely with non-square lattices, I hope we have catched all the bugs there, but please always check consistency of you results with some common sence. On Mon, Apr 02, 2018 at 05:42:53PM -0400, yuhao kang wrote:
Hello,
I want to create a graphene-like system with periodic BC at transverse direction. I'm following
the discussion at https://www.mail-archive.com/kwant-discuss@kwant-project.org/msg00036.html.
For nearest-neighbor hopping, it works. There is hopping between the upper and lower side.
But when I add NNN hopping using:
A,B=graphene.sublattices
sys[A.neighbors()]=hopp_qsvh
sys[B.neighbors()]=hopp_qsvh
The NNN hopping doesn't exist between the upper and lower side.
Is there any way to solve it?
Thank you,
Yuhao
Attached is the code:
import numpy as np
import kwant
X,Y = 4, 4
s0=np.identity(2)
sz=np.array([[1,0],[0,-1]])
graphene = kwant.lattice.honeycomb(1,'b')
A,B=graphene.sublattices
def rectangle(pos):
x, y = pos
return -X/2 < x < X/2
def onsite_qsvh(site):
x,y=site.pos
if y<0:
onsite_a = .4*s0
onsite_b = -.4*s0
return onsite_a if site.family == A else onsite_b
else:
return np.zeros([2,2])
def hopp_qsvh(site1,site2):
x1,y1=site1.pos
x2,y2=site2.pos
hop_a = .4*1j*sz
hop_b = -.4*1j*sz
if (y1+0.1)*(y2+0.1)>0 and y1+0.1>0:
return hop_a if site1.family == A else hop_b
else:
return np.zeros([2,2])
sym = kwant.TranslationalSymmetry(graphene.vec((-Y/2,Y)))
anc = kwant.Builder(sym)
anc[graphene.shape(rectangle,(0, 0))] = None
anc[graphene.neighbors()] = None
sys = kwant.Builder()
sys[anc.sites()] = onsite_qsvh
sys[((a, sym.to_fd(b)) for a, b in anc.hoppings())] = -s0
sys[A.neighbors()]=hopp_qsvh
sys[B.neighbors()]=hopp_qsvh
sys = sys.finalized()
kwant.plot(sys,fig_size=(20, 10))
-- With best regards, Viacheslav Ostroukh Leiden University, Instituut-Lorentz Niels Bohrweg 2, Office 259 2333 CA Leiden, Netherlands +31 6 44 49 68 12 +380 99 721 76 06