Hi,
*I am trying to build a 2D quantum wire with both Rashba spin coupling and
superconductivity*. I have been building on the code of superconductivity
already mentioned in the kwant documentation pdf and added the rashba
coupling terms to the code. However when I add the asymmetric terms of the
rashba spin coupling it creates some sort of an error giving me an
empty scattering matrix. What could be causing this?

After going through the documentation I realize that it's probably got
something to do with the fact that I have the wrong conservation law. I am
not sure how to set that up?

Sincerely,
Binayyak

I have attached my code below.

import kwant

import tinyarray
import numpy as np

# For plotting
from matplotlib import pyplot

tau_0 = tinyarray.array([[1, 0], [0, 1]])
tau_x = tinyarray.array([[0, 1], [1, 0]])
tau_y = tinyarray.array([[0, -1j], [1j, 0]])
tau_z = tinyarray.array([[1, 0], [0, -1]])


def make_system(
a=1,
W=10,
L=10,
barrier=1.5,
barrierpos=(3, 4),
mu=0.4,
Delta=0.1,
Deltapos=4,
t=1.0,
E_z=1e-1, # zeeman splitting field
alpha=1e-3, # rashba coupling coefficient
phs=True,
):
lat = kwant.lattice.square(norbs=2)
syst = kwant.Builder()

#### Define the scattering region. ####
# The superconducting order parameter couples electron and hole orbitals
# on each site, and hence enters as an onsite potential.
# The pairing is only included beyond the point 'Deltapos' in the
scattering region.
syst[(lat(x, y) for x in range(Deltapos) for y in range(W))] = (
4 * t - mu + E_z
) * tau_z
syst[(lat(x, y) for x in range(Deltapos, L) for y in range(W))] = (
4 * t - mu + E_z
) * tau_z + Delta * tau_x

# The tunnel barrier
syst[(lat(x, y) for x in range(barrierpos[0], barrierpos[1]) for y in
range(W))] = (
4 * t + barrier - mu + E_z
) * tau_z

# Hoppings
syst[kwant.builder.HoppingKind((1, 0), lat, lat)] = -t * tau_z + 1j * alpha
* tau_y
syst[kwant.builder.HoppingKind((0, 1), lat, lat)] = -t * tau_z - 1j * alpha
* tau_x
#### Define the leads. ####
# Left lead - normal, so the order parameter is zero.
sym_left = kwant.TranslationalSymmetry((-a, 0))
# Specify the conservation law used to treat electrons and holes separately.
# We only do this in the left lead, where the pairing is zero.
lead0 = kwant.Builder(sym_left, conservation_law=-tau_z,
particle_hole=tau_y)
lead0[(lat(0, j) for j in range(W))] = (4 * t - mu + E_z) * tau_z
lead0[kwant.builder.HoppingKind((1, 0), lat, lat)] = -t * tau_z + 1j *
alpha * tau_y
lead0[kwant.builder.HoppingKind((0, 1), lat, lat)] = -t * tau_z - 1j *
alpha * tau_x
# Right lead - superconducting, so the order parameter is included.
sym_right = kwant.TranslationalSymmetry((a, 0))
lead1 = kwant.Builder(sym_right)
lead1[(lat(0, j) for j in range(W))] = (4 * t - mu + E_z) * tau_z + Delta *
tau_x
lead1[kwant.builder.HoppingKind((1, 0), lat, lat)] = -t * tau_z + 1j *
alpha * tau_y
lead1[kwant.builder.HoppingKind((0, 1), lat, lat)] = -t * tau_z - 1j *
alpha * tau_x

#### Attach the leads and return the system. ####
syst.attach_lead(lead0)
syst.attach_lead(lead1)

for i in syst.leads[0].interface:
for j in syst.neighbors(i):
syst[i, j] = 0.1 * tau_0

for i in syst.leads[1].interface:
for j in syst.neighbors(i):
syst[i, j] = 0.1 * tau_0

return syst


def plot_conductance(syst, energies):
# Compute conductance
data = []
for energy in energies:
smatrix = kwant.smatrix(syst, energy)
# Conductance is N - R_ee + R_he
data.append(
smatrix.submatrix((0, 0), (0, 0)).shape[0]
- smatrix.transmission((0, 0), (0, 0))
+ smatrix.transmission((0, 1), (0, 0))
)
pyplot.figure()
pyplot.plot(energies, data)
pyplot.xlabel("energy [t]")
pyplot.ylabel("conductance [e^2/h]")
pyplot.show()


def check_PHS(syst):
# Scattering matrix
s = kwant.smatrix(syst, energy=0)
# Electron to electron block
s_ee = s.submatrix((0, 0), (0, 0))
# Hole to hole block
s_hh = s.submatrix((0, 1), (0, 1))
print("s_ee: \n", np.round(s_ee, 3))
print("s_hh: \n", np.round(s_hh[::-1, ::-1], 3))
print("s_ee - s_hh^*: \n", np.round(s_ee - s_hh[::-1, ::-1].conj(), 3), "\n"
)
# Electron to hole block
s_he = s.submatrix((0, 1), (0, 0))
# Hole to electron block
s_eh = s.submatrix((0, 0), (0, 1))
print("s_he: \n", np.round(s_he, 3))
print("s_eh: \n", np.round(s_eh[::-1, ::-1], 3))
print("s_he + s_eh^*: \n", np.round(s_he + s_eh[::-1, ::-1].conj(), 3))


def main():
syst = make_system(W=10)

# Check that the system looks as intended.
kwant.plot(syst)

# Finalize the system.
syst = syst.finalized()

# Check particle-hole symmetry of the scattering matrix
check_PHS(syst)

# Compute and plot the conductance
plot_conductance(syst, energies=[0.002 * i for i in range(-10, 100)])


# Call the main function if the script gets executed (as opposed to
imported).
# See <http://docs.python.org/library/__main__.html>.
if __name__ == "__main__":
main()

Reply via email to