Hopping between different lattices and families
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
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
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
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-description-usi...) 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.akhmerov@gmail.com]
Sent: 31. oktober 2016 11:48
To: Camilla Espedal
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
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
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-description-usi...) 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.akhmerov@gmail.com] Sent: 31. oktober 2016 11:48 To: Camilla Espedal
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
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
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.akhmerov@gmail.com]
Sent: 31. oktober 2016 12:04
To: Camilla Espedal
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.akhmerov@gmail.com] Sent: 31. oktober 2016 11:48 To: Camilla Espedal
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
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
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
<
mailto:Camilla Espedal
wrote:
a, pre, code, a:link, body { word-wrap: break-word !important; } 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: mailto:anton.akhmerov@gmail.com ] Sent: 31. oktober 2016 12:04 To: Camilla Espedal < mailto:camilla.espedal@ntnu.no
Cc: mailto: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 < mailto:camilla.espedal@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: mailto:anton.akhmerov@gmail.com ]
Sent: 31. oktober 2016 11:48
To: Camilla Espedal < mailto:camilla.espedal@ntnu.no
Cc: mailto: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 < mailto:camilla.espedal@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
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:basnijholt@gmail.com]
Sent: 31. oktober 2016 14:41
To: Camilla Espedal
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.akhmerov@gmail.commailto:anton.akhmerov@gmail.com] Sent: 31. oktober 2016 11:48 To: Camilla Espedal
mailto:camilla.espedal@ntnu.no> Cc: kwant-discuss@kwant-project.orgmailto: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
mailto:camilla.espedal@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
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
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:basnijholt@gmail.com] *Sent:* 31. oktober 2016 14:41 *To:* Camilla Espedal
; Anton Akhmerov < anton.akhmerov@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
> 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.akhmerov@gmail.com] Sent: 31. oktober 2016 12:04 To: Camilla Espedal
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
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.akhmerov@gmail.com] Sent: 31. oktober 2016 11:48 To: Camilla Espedal
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.espedal@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
Hello everyone, I am dealing with exactly the same problem, but in other context (I want to create a one-dimensional p-wave superconductor with two lattices). But the thing is that when I try to implement it just like above, I am neglecting the lat_h(0,y) position, and also losing the lat_e(L,y) position. How can I take this positions without counting two times the "bulk" positions? def make_system(a=1.0, W=1, L=50, mu=1.0, Delta=1.0, t=1.0): # Start with an empty tight-binding system and two square lattices, # corresponding to electron and hole degree of freedom lat_e = kwant.lattice.square(a=1.0, name='e') lat_h = kwant.lattice.square(a=1.0, name='h') sys = kwant.Builder() #### Define the scattering region. #### sys[(lat_e(x, y) for x in range(L) for y in range(W))] = - mu sys[(lat_h(x, y) for x in range(L) for y in range(W))] = mu # hoppings for both electrons and holes sys[lat_e.neighbors()] = -t sys[lat_h.neighbors()] = t # Superconducting order parameter enters as hopping between # electrons and holes sys[lat_e(x,y), lat_h(x+1,y) for x in range(L-1) for y in range(W)] = Delta Cheers. Antônio. ----- Mensagem original -----
De: "Anton Akhmerov"
Para: "Camilla Espedal" Cc: kwant-discuss@kwant-project.org, "Bas Nijholt" Enviadas: Segunda-feira, 31 de Outubro de 2016 13:22:01 Assunto: Re: [Kwant] Hopping between different lattices and families
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.espedal@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: basnijholt@gmail.com ]
Sent: 31. oktober 2016 14:41
To: Camilla Espedal < camilla.espedal@ntnu.no >; Anton Akhmerov < anton.akhmerov@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 > 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.akhmerov@gmail.com ]
Sent: 31. oktober 2016 12:04
To: Camilla Espedal < camilla.espedal@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.espedal@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.akhmerov@gmail.com ]
Sent: 31. oktober 2016 11:48
To: Camilla Espedal < camilla.espedal@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.espedal@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
Hi Antonio,
I'm sorry, I don't understand your question. What exactly doesn't work, and
what do you want to achieve?
Best,
Anton
On Mon, Oct 31, 2016 at 11:52 AM,
Hello everyone,
I am dealing with exactly the same problem, but in other context (I want to create a one-dimensional p-wave superconductor with two lattices). But the thing is that when I try to implement it just like above, I am neglecting the lat_h(0,y) position, and also losing the lat_e(L,y) position. How can I take this positions without counting two times the "bulk" positions?
def make_system(a=1.0, W=1, L=50, mu=1.0, Delta=1.0, t=1.0): # Start with an empty tight-binding system and two square lattices, # corresponding to electron and hole degree of freedom lat_e = kwant.lattice.square(a=1.0, name='e') lat_h = kwant.lattice.square(a=1.0, name='h')
sys = kwant.Builder()
#### Define the scattering region. #### sys[(lat_e(x, y) for x in range(L) for y in range(W))] = - mu sys[(lat_h(x, y) for x in range(L) for y in range(W))] = mu
# hoppings for both electrons and holes sys[lat_e.neighbors()] = -t sys[lat_h.neighbors()] = t
# Superconducting order parameter enters as hopping between # electrons and holes sys[lat_e(x,y), lat_h(x+1,y) for x in range(L-1) for y in range(W)] = Delta
Cheers. Antônio.
------------------------------
*De: *"Anton Akhmerov"
*Para: *"Camilla Espedal" *Cc: *kwant-discuss@kwant-project.org, "Bas Nijholt" *Enviadas: *Segunda-feira, 31 de Outubro de 2016 13:22:01 *Assunto: *Re: [Kwant] Hopping between different lattices and families
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
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:basnijholt@gmail.com] *Sent:* 31. oktober 2016 14:41 *To:* Camilla Espedal
; Anton Akhmerov < anton.akhmerov@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
> 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.akhmerov@gmail.com] Sent: 31. oktober 2016 12:04 To: Camilla Espedal
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
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.akhmerov@gmail.com] Sent: 31. oktober 2016 11:48 To: Camilla Espedal
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.espedal@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
Hi Anton, I want to implement a p-wave superconductor using two lattices (for electrons and holes). I've done that using Pauli matrices with no problem. The thing is that I expect to get Majorana zero energy modes, but I don't. I belive that the problem is the way that I am defining the pairing, which does not take account for the lat_h(0,0) and lat_e(L,0) positions. I wonder if any of you have some tips to implement this coupling with this approach (two lattices) to get the zero energy modes. Best, Antônio. ----- Mensagem original -----
De: "Anton Akhmerov"
Para: antoniolrm@usp.br Cc: kwant-discuss@kwant-project.org, "Bas Nijholt" , "Camilla Espedal" Enviadas: Quarta-feira, 2 de Novembro de 2016 22:26:30 Assunto: Re: [Kwant] Hopping between different lattices and families
Hi Antonio,
I'm sorry, I don't understand your question. What exactly doesn't work, and what do you want to achieve?
Best, Anton
On Mon, Oct 31, 2016 at 11:52 AM, < antoniolrm@usp.br > wrote:
Hello everyone,
I am dealing with exactly the same problem, but in other context (I want to create a one-dimensional p-wave superconductor with two lattices). But the thing is that when I try to implement it just like above, I am neglecting the lat_h(0,y) position, and also losing the lat_e(L,y) position. How can I take this positions without counting two times the "bulk" positions?
def make_system(a=1.0, W=1, L=50, mu=1.0, Delta=1.0, t=1.0):
# Start with an empty tight-binding system and two square lattices,
# corresponding to electron and hole degree of freedom
lat_e = kwant.lattice.square(a=1.0, name='e')
lat_h = kwant.lattice.square(a=1.0, name='h')
sys = kwant.Builder()
#### Define the scattering region. ####
sys[(lat_e(x, y) for x in range(L) for y in range(W))] = - mu
sys[(lat_h(x, y) for x in range(L) for y in range(W))] = mu
# hoppings for both electrons and holes
sys[lat_e.neighbors()] = -t
sys[lat_h.neighbors()] = t
# Superconducting order parameter enters as hopping between
# electrons and holes
sys[lat_e(x,y), lat_h(x+1,y) for x in range(L-1) for y in range(W)] = Delta
Cheers.
Antônio.
De: "Anton Akhmerov" < anton.akhmerov@gmail.com >
Para: "Camilla Espedal" < camilla.espedal@ntnu.no >
Cc: kwant-discuss@kwant-project.org , "Bas Nijholt" < basnijholt@gmail.com >
Enviadas: Segunda-feira, 31 de Outubro de 2016 13:22:01
Assunto: Re: [Kwant] Hopping between different lattices and families
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.espedal@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: basnijholt@gmail.com ]
Sent: 31. oktober 2016 14:41
To: Camilla Espedal < camilla.espedal@ntnu.no >; Anton Akhmerov < anton.akhmerov@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
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.akhmerov@gmail.com ]
Sent: 31. oktober 2016 12:04
To: Camilla Espedal < camilla.espedal@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.espedal@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.akhmerov@gmail.com ]
Sent: 31. oktober 2016 11:48
To: Camilla Espedal < camilla.espedal@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.espedal@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
Hi,
I want to implement a p-wave superconductor using two lattices (for electrons and holes). I've done that using Pauli matrices with no problem. The thing is that I expect to get Majorana zero energy modes, but I don't. I belive that the problem is the way that I am defining the pairing, which does not take account for the lat_h(0,0) and lat_e(L,0) positions. I wonder if any of you have some tips to implement this coupling with this approach (two lattices) to get the zero energy modes.
Looking at the code you initially posted, it seems that you do not have any spin degree of freedom in your system. This is a necessary condition for Majoranas. Look again more closely at the Hamiltonians from the literature (e.g. https://arxiv.org/abs/1003.1145). You will see that there are two kinds of Pauli matrices (usually denoted with sigma and tau respectively), one which acts on the spin space, and one which acts on the particle-hole space. You can treat all the onsite degrees of freedom on the same footing by having 4x4 matrix onsites, or you can "split off" the particle-hole degrees of freedom onto separate lattices, and keep a 2x2 onsite structure for the spin. Hope that helps, Joe
Hi Antonio,
It's not really about Kwant, but rather how you define your system.
Specifically you have forgotten one pairing term. Using
sys[((lat_e(x,y), lat_h(x+1,y)) for x in range(L-1) for y in range(W))] =
Delta
sys[((lat_h(x,y), lat_e(x+1,y)) for x in range(L-1) for y in range(W))] =
-Delta
fixes the problem.
Best,
Anton
On Thu, Nov 3, 2016 at 9:52 AM,
Hi Anton,
I want to implement a p-wave superconductor using two lattices (for electrons and holes). I've done that using Pauli matrices with no problem. The thing is that I expect to get Majorana zero energy modes, but I don't. I belive that the problem is the way that I am defining the pairing, which does not take account for the lat_h(0,0) and lat_e(L,0) positions. I wonder if any of you have some tips to implement this coupling with this approach (two lattices) to get the zero energy modes.
Best, Antônio.
------------------------------
*De: *"Anton Akhmerov"
*Para: *antoniolrm@usp.br *Cc: *kwant-discuss@kwant-project.org, "Bas Nijholt" , "Camilla Espedal" *Enviadas: *Quarta-feira, 2 de Novembro de 2016 22:26:30 *Assunto: *Re: [Kwant] Hopping between different lattices and families
Hi Antonio,
I'm sorry, I don't understand your question. What exactly doesn't work, and what do you want to achieve?
Best, Anton
On Mon, Oct 31, 2016 at 11:52 AM,
wrote: Hello everyone,
I am dealing with exactly the same problem, but in other context (I want to create a one-dimensional p-wave superconductor with two lattices). But the thing is that when I try to implement it just like above, I am neglecting the lat_h(0,y) position, and also losing the lat_e(L,y) position. How can I take this positions without counting two times the "bulk" positions?
def make_system(a=1.0, W=1, L=50, mu=1.0, Delta=1.0, t=1.0): # Start with an empty tight-binding system and two square lattices, # corresponding to electron and hole degree of freedom lat_e = kwant.lattice.square(a=1.0, name='e') lat_h = kwant.lattice.square(a=1.0, name='h')
sys = kwant.Builder()
#### Define the scattering region. #### sys[(lat_e(x, y) for x in range(L) for y in range(W))] = - mu sys[(lat_h(x, y) for x in range(L) for y in range(W))] = mu
# hoppings for both electrons and holes sys[lat_e.neighbors()] = -t sys[lat_h.neighbors()] = t
# Superconducting order parameter enters as hopping between # electrons and holes sys[lat_e(x,y), lat_h(x+1,y) for x in range(L-1) for y in range(W)] = Delta
Cheers. Antônio.
------------------------------
*De: *"Anton Akhmerov"
*Para: *"Camilla Espedal" *Cc: *kwant-discuss@kwant-project.org, "Bas Nijholt" < basnijholt@gmail.com> *Enviadas: *Segunda-feira, 31 de Outubro de 2016 13:22:01 *Assunto: *Re: [Kwant] Hopping between different lattices and families 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
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:basnijholt@gmail.com] *Sent:* 31. oktober 2016 14:41 *To:* Camilla Espedal
; Anton Akhmerov < anton.akhmerov@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
> 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.akhmerov@gmail.com] Sent: 31. oktober 2016 12:04 To: Camilla Espedal
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.espedal@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.akhmerov@gmail.com] Sent: 31. oktober 2016 11:48 To: Camilla Espedal
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.espedal@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
Hi,
Looking at the code you initially posted, it seems that you do not have any spin degree of freedom in your system. This is a necessary condition for Majoranas. Look again more closely at the Hamiltonians from the literature (e.g. https://arxiv.org/abs/1003.1145). You will see that there are two kinds of Pauli matrices (usually denoted with sigma and tau respectively), one which acts on the spin space, and one which acts on the particle-hole space.
Disregard all this, I looked a bit closer and saw you were using Kitaev's model directly Sorry for the noise! Joe
Hi Anton, You are right! My bad. Thanks a lot. Best, Antônio. ----- Mensagem original -----
De: "Anton Akhmerov"
Para: antoniolrm@usp.br, kwant-discuss@kwant-project.org Enviadas: Quinta-feira, 3 de Novembro de 2016 12:54:44 Assunto: Re: [Kwant] Hopping between different lattices and families
Hi Antonio,
It's not really about Kwant, but rather how you define your system. Specifically you have forgotten one pairing term. Using
sys[((lat_e(x,y), lat_h(x+1,y)) for x in range(L-1) for y in range(W))] = Delta sys[((lat_h(x,y), lat_e(x+1,y)) for x in range(L-1) for y in range(W))] = -Delta
fixes the problem.
Best, Anton
On Thu, Nov 3, 2016 at 9:52 AM, < antoniolrm@usp.br > wrote:
Hi Anton,
I want to implement a p-wave superconductor using two lattices (for electrons and holes). I've done that using Pauli matrices with no problem. The thing is that I expect to get Majorana zero energy modes, but I don't. I belive that the problem is the way that I am defining the pairing, which does not take account for the lat_h(0,0) and lat_e(L,0) positions. I wonder if any of you have some tips to implement this coupling with this approach (two lattices) to get the zero energy modes.
Best,
Antônio.
De: "Anton Akhmerov" < anton.akhmerov@gmail.com >
Para: antoniolrm@usp.br
Cc: kwant-discuss@kwant-project.org , "Bas Nijholt" < basnijholt@gmail.com >, "Camilla Espedal" < camilla.espedal@ntnu.no
Enviadas: Quarta-feira, 2 de Novembro de 2016 22:26:30
Assunto: Re: [Kwant] Hopping between different lattices and families
Hi Antonio,
I'm sorry, I don't understand your question. What exactly doesn't work, and what do you want to achieve?
Best,
Anton
On Mon, Oct 31, 2016 at 11:52 AM, < antoniolrm@usp.br > wrote:
Hello everyone,
I am dealing with exactly the same problem, but in other context (I want to create a one-dimensional p-wave superconductor with two lattices). But the thing is that when I try to implement it just like above, I am neglecting the lat_h(0,y) position, and also losing the lat_e(L,y) position. How can I take this positions without counting two times the "bulk" positions?
def make_system(a=1.0, W=1, L=50, mu=1.0, Delta=1.0, t=1.0):
# Start with an empty tight-binding system and two square lattices,
# corresponding to electron and hole degree of freedom
lat_e = kwant.lattice.square(a=1.0, name='e')
lat_h = kwant.lattice.square(a=1.0, name='h')
sys = kwant.Builder()
#### Define the scattering region. ####
sys[(lat_e(x, y) for x in range(L) for y in range(W))] = - mu
sys[(lat_h(x, y) for x in range(L) for y in range(W))] = mu
# hoppings for both electrons and holes
sys[lat_e.neighbors()] = -t
sys[lat_h.neighbors()] = t
# Superconducting order parameter enters as hopping between
# electrons and holes
sys[lat_e(x,y), lat_h(x+1,y) for x in range(L-1) for y in range(W)] = Delta
Cheers.
Antônio.
De: "Anton Akhmerov" < anton.akhmerov@gmail.com >
Para: "Camilla Espedal" < camilla.espedal@ntnu.no >
Cc: kwant-discuss@kwant-project.org , "Bas Nijholt" < basnijholt@gmail.com >
Enviadas: Segunda-feira, 31 de Outubro de 2016 13:22:01
Assunto: Re: [Kwant] Hopping between different lattices and families
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.espedal@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: basnijholt@gmail.com ]
Sent: 31. oktober 2016 14:41
To: Camilla Espedal < camilla.espedal@ntnu.no >; Anton Akhmerov < anton.akhmerov@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 > 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.akhmerov@gmail.com ]
> Sent: 31. oktober 2016 12:04
> To: Camilla Espedal < camilla.espedal@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.espedal@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.akhmerov@gmail.com > > ]
> > Sent: 31. oktober 2016 11:48
> > To: Camilla Espedal < camilla.espedal@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.espedal@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
Hi Joseph, No problem! Thanks for your attention anyway. Antônio. ----- Mensagem original -----
De: "Joseph Weston"
Para: antoniolrm@usp.br Cc: "Anton Akhmerov" , kwant-discuss@kwant-project.org, "Bas Nijholt" , "Camilla Espedal" Enviadas: Quinta-feira, 3 de Novembro de 2016 13:06:02 Assunto: Re: [Kwant] Hopping between different lattices and families
Hi,
Looking at the code you initially posted, it seems that you do not have any spin degree of freedom in your system. This is a necessary condition for Majoranas. Look again more closely at the Hamiltonians from the literature (e.g. https://arxiv.org/abs/1003.1145). You will see that there are two kinds of Pauli matrices (usually denoted with sigma and tau respectively), one which acts on the spin space, and one which acts on the particle-hole space.
Disregard all this, I looked a bit closer and saw you were using Kitaev's model directly
Sorry for the noise!
Joe
Hello again everyone, Now I have a problem with plotting this system. To make things easier, I used a chain lattice, and I want to plot the probability density of the eigenspinors, and I am aware that when dealing with a scalar field (1-component spinor) I need to order the atomic positions by doing something like xs = np.array([i.pos[0] for i in sys.sites]) indx = np.argsort(xs) and, for a given eigenspinor, ploting the square modulus of the norm wf_sq can be node by plt.plot(xs[indx], wf_sq[indx]) plt.show(). But when I add more lattices in the system, the matrix 'xs' becomes a little bit confuse. How can I order this to plot wf_sq porperly? Best, Antônio. ----- Mensagem original -----
De: "Anton Akhmerov"
Para: antoniolrm@usp.br, kwant-discuss@kwant-project.org Enviadas: Quinta-feira, 3 de Novembro de 2016 12:54:44 Assunto: Re: [Kwant] Hopping between different lattices and families
Hi Antonio,
It's not really about Kwant, but rather how you define your system. Specifically you have forgotten one pairing term. Using
sys[((lat_e(x,y), lat_h(x+1,y)) for x in range(L-1) for y in range(W))] = Delta sys[((lat_h(x,y), lat_e(x+1,y)) for x in range(L-1) for y in range(W))] = -Delta
fixes the problem.
Best, Anton
On Thu, Nov 3, 2016 at 9:52 AM, < antoniolrm@usp.br > wrote:
Hi Anton,
I want to implement a p-wave superconductor using two lattices (for electrons and holes). I've done that using Pauli matrices with no problem. The thing is that I expect to get Majorana zero energy modes, but I don't. I belive that the problem is the way that I am defining the pairing, which does not take account for the lat_h(0,0) and lat_e(L,0) positions. I wonder if any of you have some tips to implement this coupling with this approach (two lattices) to get the zero energy modes.
Best,
Antônio.
De: "Anton Akhmerov" < anton.akhmerov@gmail.com >
Para: antoniolrm@usp.br
Cc: kwant-discuss@kwant-project.org , "Bas Nijholt" < basnijholt@gmail.com >, "Camilla Espedal" < camilla.espedal@ntnu.no
Enviadas: Quarta-feira, 2 de Novembro de 2016 22:26:30
Assunto: Re: [Kwant] Hopping between different lattices and families
Hi Antonio,
I'm sorry, I don't understand your question. What exactly doesn't work, and what do you want to achieve?
Best,
Anton
On Mon, Oct 31, 2016 at 11:52 AM, < antoniolrm@usp.br > wrote:
Hello everyone,
I am dealing with exactly the same problem, but in other context (I want to create a one-dimensional p-wave superconductor with two lattices). But the thing is that when I try to implement it just like above, I am neglecting the lat_h(0,y) position, and also losing the lat_e(L,y) position. How can I take this positions without counting two times the "bulk" positions?
def make_system(a=1.0, W=1, L=50, mu=1.0, Delta=1.0, t=1.0):
# Start with an empty tight-binding system and two square lattices,
# corresponding to electron and hole degree of freedom
lat_e = kwant.lattice.square(a=1.0, name='e')
lat_h = kwant.lattice.square(a=1.0, name='h')
sys = kwant.Builder()
#### Define the scattering region. ####
sys[(lat_e(x, y) for x in range(L) for y in range(W))] = - mu
sys[(lat_h(x, y) for x in range(L) for y in range(W))] = mu
# hoppings for both electrons and holes
sys[lat_e.neighbors()] = -t
sys[lat_h.neighbors()] = t
# Superconducting order parameter enters as hopping between
# electrons and holes
sys[lat_e(x,y), lat_h(x+1,y) for x in range(L-1) for y in range(W)] = Delta
Cheers.
Antônio.
De: "Anton Akhmerov" < anton.akhmerov@gmail.com >
Para: "Camilla Espedal" < camilla.espedal@ntnu.no >
Cc: kwant-discuss@kwant-project.org , "Bas Nijholt" < basnijholt@gmail.com >
Enviadas: Segunda-feira, 31 de Outubro de 2016 13:22:01
Assunto: Re: [Kwant] Hopping between different lattices and families
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.espedal@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: basnijholt@gmail.com ]
Sent: 31. oktober 2016 14:41
To: Camilla Espedal < camilla.espedal@ntnu.no >; Anton Akhmerov < anton.akhmerov@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 > 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.akhmerov@gmail.com ]
> Sent: 31. oktober 2016 12:04
> To: Camilla Espedal < camilla.espedal@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.espedal@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.akhmerov@gmail.com > > ]
> > Sent: 31. oktober 2016 11:48
> > To: Camilla Espedal < camilla.espedal@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.espedal@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
participants (6)
-
Anton Akhmerov
-
Anton Akhmerov
-
antoniolrm@usp.br
-
Bas Nijholt
-
Camilla Espedal
-
Joseph Weston