Onsite potential only at the edge of the sample in Kwant
Dear developers, I’m interested in investigating the influence of the edge potential of the sample. For example, in an example by tutorial “quantum_wire.py”, I would like to put onsite potential only at the edge atoms. One could determine whether the site is edge or not by reading the number of neighbors of the site by using “degree”. For example, if the degree is 3 there is an onsite potentials , else 0. Is there any example code from which I can learn to use this function? Best, Dongwook.
Dear Dongwook,
In order to select the sites at the edge, you can use the function 'degree'
as follows : sys.degree(site)<=3
So you will have in your code something like:
for site in sys.expand(lat.shape(ring, (0, r1 + 1))):
if sys.degree(site)<=3 and abs(site.pos[0])!=19:
sys[site]=edge_potential
Just becareful about the sites connected to the leads. I guess that you do
not want to put them at the potential you chose for the edge.
Here, I added the condition 'abs(site.pos[0])!=19' to deselect them as an
example.
I strongly suggest for you to plot your system with a different color for
the sites you put at that potential to check if you really selected only
those you wanted.
An example is provided below.
I hope that this helps
Adel
from cmath import exp
from math import pi
import kwant
from matplotlib import pyplot
def make_system(a=1, t=1.0, W=10, r1=10, r2=20,edge_potential=0):
lat = kwant.lattice.square(a)
sys = kwant.Builder()
#### Define the scattering region. ####
# Now, we aim for a more complex shape, namely a ring (or annulus)
def ring(pos):
(x, y) = pos
rsq = x ** 2 + y ** 2
return (r1 ** 2 < rsq < r2 ** 2)
# and add the corresponding lattice points using the `shape`function
sys[lat.shape(ring, (0, r1 + 1))]=4*t
sys[lat.neighbors()] = t
#change the values of the potential at the edge
for site in sys.expand(lat.shape(ring, (0, r1 + 1))):
if sys.degree(site)<=3 and abs(site.pos[0])!=19:
#abs(site.pos[0])!=19 execludes the interfaces with the leads
sys[site]=edge_potential
sym_lead = kwant.TranslationalSymmetry((a, 0))
lead = kwant.Builder(sym_lead)
def lead_shape(pos):
(x, y) = pos
return (W / 2 < y < W / 2)
lead[lat.shape(lead_shape, (0, 0))] = 4 * t
lead[lat.neighbors()] = t
#### Attach the leads and return the system. ####
sys.attach_lead(lead)
sys.attach_lead(lead.reversed())
return sys
edge_potential=10
sys = make_system(edge_potential=edge_potential)
def family_color(site):
#print(sys[site])
if sys[site]==edge_potential:
return 'green'
else: return 'black'
def site_size(site):
if sys[site]==edge_potential:
return 0.35
else:return 0.2
# Check that the system looks as intended.
kwant.plot(sys,site_color=family_color,site_size=site_size)
On Tue, Jan 3, 2017 at 6:08 AM, Dongwook Go
Dear developers,
I’m interested in investigating the influence of the edge potential of the sample. For example, in an example by tutorial “quantum_wire.py”, I would like to put onsite potential only at the edge atoms.
One could determine whether the site is edge or not by reading the number of neighbors of the site by using “degree”. For example, if the degree is 3 there is an onsite potentials , else 0. Is there any example code from which I can learn to use this function?
Best, Dongwook.
 Abbout Adel
Dear Dongwook,
It is the easiest to achieve what you want while you are defining your
scattering region, specifically by using the Builder.degree method. So
if you have a builder syst with all the hoppings already added, your
desired result would be achieved by
syst[(site for site in syst.sites() if syst.degree(site))) != 4)] =
boundary_potential
Best,
Anton
On Tue, Jan 3, 2017 at 4:08 AM, Dongwook Go
Dear developers,
I’m interested in investigating the influence of the edge potential of the sample. For example, in an example by tutorial “quantum_wire.py”, I would like to put onsite potential only at the edge atoms.
One could determine whether the site is edge or not by reading the number of neighbors of the site by using “degree”. For example, if the degree is 3 there is an onsite potentials , else 0. Is there any example code from which I can learn to use this function?
Best, Dongwook.
participants (3)

Abbout Adel

Anton Akhmerov

Dongwook Go