Hi Camilla, It is straightforward to check whether a site is in the system or if its position is inside the shape: http://nbviewer.jupyter.org/url/antonakhmerov.org/misc/site_in_syst.ipynb
Basically the site that you want is on the border of the shape and doesn't get includes due to using a strict inequality. As an extra remark I recommend not relying on strict vs non-strict inequality behavior due to float variable rounding. This is especially important if you are dealing with lattices with non-integer unit vectors. Instead a more robust solution would be to have e.g. (-a/2 < x < L+a/2) in the shape definition. Best, Anton On Mon, Oct 31, 2016 at 9:48 AM, Camilla Espedal <camilla.espe...@ntnu.no> wrote: > Thank you! > > > > That worked, but I still don't see why the last thing I did didn't work? > > > > I added a hopping for two points that were within bounds even if shape_sr > started at 1 instead of 0? What am I missing? > > > > Best, > > Camilla > > > > > > *From:* Bas Nijholt [mailto:basnijh...@gmail.com] > *Sent:* 31. oktober 2016 14:41 > *To:* Camilla Espedal <camilla.espe...@ntnu.no>; Anton Akhmerov < > anton.akhme...@gmail.com> > > *Cc:* kwant-discuss@kwant-project.org > *Subject:* Re: [Kwant] Hopping between different lattices and families > > > > The error message says it all :-) > > > > Using `return ((0 <= x < L) and (0 <= y < W)) ` should fix your problem. > > > > Best, Bas > > > > On Mon, 31 Oct 2016 at 14:29 Camilla Espedal <Camilla Espedal > <camilla%20espedal%20%3ccamilla.espe...@ntnu.no%3e>> wrote: > > Hi again, > > Thanks, I will try to write it more clearly. So the script I use to make > the system is: > > L = 100 > W = 40 > a = 1 > t = 1 > > def make_system(W,L,a,t): > > # Make the lattices > # We define two lattices (up and down) with two sublattices A and B > lat_up = kwant.lattice.general([(a,a),(a,-a)],[(0,0),(a,0)], name='up') > A_up, B_up = lat_up.sublattices > lat_down = kwant.lattice.general([(a,a),(a,-a)],[(0,0),(a,0)], > name='down') > A_down, B_down = lat_down.sublattices > > # Define the shape of the scattering region. Must return true where there > are sites. > def shape_sr(pos): > x, y = pos > return ((0 < x < L) and (0 < y < W)) > > > sys = kwant.Builder() > > sys[lat_up.shape(shape_sr, (1,1))] = 2 > sys[lat_down.shape(shape_sr, (1,1))] = 2 > > sys[A_up(1,1), A_down(2,1)] = 2 > > return sys > > The error message I get is: > KeyError: Site(kwant.lattice.Monoatomic([[1,1], [1,-1]], [0,0]. 'up0'), > array([1, 1])) > > I can not see why the spot should not be created, because it is within the > bounds of shapre_sr. > > Thanks, > > Best, > Camilla > > -----Original Message----- > From: Anton Akhmerov [mailto:anton.akhme...@gmail.com] > Sent: 31. oktober 2016 12:04 > To: Camilla Espedal <camilla.espe...@ntnu.no> > Cc: kwant-discuss@kwant-project.org > Subject: Re: [Kwant] Hopping between different lattices and families > > Hi Camilla, > > Please double-check the error message that you see. > > Your assumption why the code doesn't work is not right: it's possible to > add a hopping from any site to any site, regardless of distance or lattices > involved. My best guess is that the sites aren't present in the system yet. > > As a general advice, when describing a problem try to provide complete > information required to reproduce this problem. A script and the error > message would be usually useful. > > Best, > Anton > > On Mon, Oct 31, 2016 at 6:58 AM, Camilla Espedal <camilla.espe...@ntnu.no> > wrote: > > Hi again, > > > > I tried to add > > > > sys[A_up(2,2), B_down(2,2)] = 2 > > > > This does not work, and I think it is because A_up and B_down are not > > only on different sublattices, but on different lattices as well. In > > the tutorial on superconductors > > (https://kwant-project.org/doc/1.0/tutorial/tutorial5#lattice-descript > > ion-using-different-lattices) they define the hopping as > > > > sys[((lat_e(x, y), lat_h(x, y)) for x in range(Deltapos, L) > > for y in range(W))] = Delta > > > > between the lattices but on the same spatial point. But I want to hop > between two different lattices from one point in space to another, if that > makes sense. > > > > Best, > > Camilla > > > > -----Original Message----- > > From: Anton Akhmerov [mailto:anton.akhme...@gmail.com] > > Sent: 31. oktober 2016 11:48 > > To: Camilla Espedal <camilla.espe...@ntnu.no> > > Cc: kwant-discuss@kwant-project.org > > Subject: Re: [Kwant] Hopping between different lattices and families > > > > Hi Camilla, > > > > It's exactly like you would expect: syst[A_up(i, j), B_down(i, j)] = > > value. See e.g. https://kwant-project.org/doc/1/tutorial/tutorial4 > > > > Best, > > Anton > > > > On Mon, Oct 31, 2016 at 6:43 AM, Camilla Espedal < > camilla.espe...@ntnu.no> wrote: > >> Hi, > >> > >> > >> > >> To explain what I mean. I have a system where I have separated > >> spin-up and spin-down into two lattices (like electron and hole in > >> the example at the kwant site) so that it is would be easier to > >> extract spin-resolved information (G_up/up, Gup/down etc.). In > >> addition, these two lattices consists of two sublattices (A and B). > >> The code is like this > >> > >> > >> > >> lat_up = > >> kwant.lattice.general([(1,0),(s,c)],[(0,0),(0,1/sqrt(3))], > >> name='up') > >> > >> A_up, B_up = lat_up.sublattices > >> > >> lat_down = > >> kwant.lattice.general([(1,0),(s,c)],[(0,0),(0,1/sqrt(3))], > >> name='down') > >> > >> A_down, B_down = lat_down.sublattices > >> > >> > >> > >> What I want to do now, is to add a hopping term between say A_up > >> (i,j) and B_down (i.j). So a hopping term between the two different > >> lattices and sublattices. How can I implement this? Or is there a > >> better way to achieve what I want? > >> > >> > >> > >> Best > >> > >> Camilla Espedal > > >