Hi all,


I am working on trying to create a system where there is a lead which wraps around the edge of a sample.


For example, I have included a code which generates a square scattering region with two contacts, one extending vertically and the other extending horizontally.  What I would like to do is combine these two contacts into a single contact, so this might represent a system where there is a contact that has been etched surrounding a central region. 


I think that the way to approach this would be to generate one wide contact, whose width is equal to the combined with of the contacts in my code (40 in my example). This contact would then be attached to the channel and its interface would be wrapped around the channel. Unfortunately, I am at a bit of a loss as to how I would code this.


My main reason for wanting to do this rather than treat the problem with two separate leads is that the modes are going to be different between the two. Ultimately, it would be nice to be able to do this in a way that wraps the lead completely around the outer edge of the channel to simulate some sort of open boundary condition. Additionally, it would be nice to do something similar with a hole in the middle of the scattering region, to construct a Corbino disk.


If anyone as any advice, I would love to hear it!


Thanks,


Sam LaGasse


Here is the code:


import kwant
import matplotlib.pyplot as plt

lat = kwant.lattice.square(a=1)

s = 20.0
t = 1
def square(pos):
    x, y = pos
    return x <= s/2 and x >= -s/2 and y <= s/2 and y >= -s/2

y_min = -10.
y_max = +10.

x_min = -10.
x_max = +10.

def y_contact(pos):
    x, y = pos
    return x >= y_min and x <= y_max
def x_contact(pos):
    x, y = pos
    return y >= y_min and y <= y_max

sys = kwant.Builder()
sys[lat.shape(square, (0,0))] = 4*t
sys[lat.neighbors()] = -t

sym0 = kwant.TranslationalSymmetry((-1,0))
sym_down = kwant.TranslationalSymmetry((0,1))

lead0 = kwant.Builder(sym_down)
lead0[lat.shape(y_contact, (0, 0))] = 0
lead0[lat.neighbors()] = -t

lead1 = kwant.Builder(sym0)
lead1[lat.shape(x_contact, (0, 0))] = 0
lead1[lat.neighbors()] = -t

sys.attach_lead(lead0) # top
sys.attach_lead(lead1) # left
kwant.plot(sys)
plt.show()