NNN hopping with periodic BC
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))
Hi,
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.
If you only want 1 direction to have periodic boundary conditions (and finite in the other direction) why not just create a system with a 1D translational symmetry? This will make your life a lot easier. Happy Kwanting, Joe
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
participants (3)
-
Joseph Weston -
Viacheslav Ostroukh -
yuhao kang