Dear all,
Using the Kwant package to calculate the spin-resolved conductance of a
graphene nanoribbon, where the device region incorporates Rashba spin-orbit
coupling (RSOC) in its Hamiltonian while the leads do not. The left lead is
numbered 0 and the right lead is numbered 1. The goal is to obtain the
conductance from spin-up electrons in the left lead to spin-down electrons in
the right lead. How should the program be written?
For reference and convenience, I attach the code I'm using at the end of
this message, but the result was unsatisfactory.
Any help and guidance would be appreciated!
Best regards,
Rease
##############################################################
import kwant
import numpy as np
from matplotlib import pyplot
from tinyarray import array
sigma_0 = array([[1, 0], [0, 1]])
sigma_x = array([[0, 1], [1, 0]])
sigma_y = array([[0, -1j], [1j, 0]])
sigma_z = array([[1, 0], [0, -1]])
graphene = kwant.lattice.general([(1, 0), (0.5, np.sqrt(3) / 2)],
[(0, 0), (0, 1 / np.sqrt(3))],norbs=2)
a, b = graphene.sublattices
def make_system(W=10, L=30, t=1.0, alpha=0.1):
syst = kwant.Builder()
def circle(pos):
x, y = pos
return abs(x)<=L and abs(y)<=W
syst[graphene.shape(circle, (0, 0))] = (4 * t * sigma_0 + alpha * sigma_y)
syst[graphene.neighbors()] = -t * sigma_0
def lead_shape(pos):
return abs(pos[1]) < W
lead = kwant.Builder(kwant.TranslationalSymmetry((1, 0)))
lead[graphene.shape(lead_shape, (0, 0))] = 4 * t * sigma_0
lead[graphene.neighbors()] = -t * sigma_0
syst.attach_lead(lead)
syst.attach_lead(lead.reversed())
return syst
def plot_conductance(syst, energies):
data = [ ]
for energy in energies:
smatrix = kwant.smatrix(syst, energy)
data.append(smatrix.transmission((1, 1), (0, 0)))
pyplot.figure()
pyplot.plot(energies, data)
pyplot.xlabel("energy [t]")
pyplot.ylabel("conductance [e^2/h]")
pyplot.show()
def main():
syst = make_system()
kwant.plot(syst)
syst = syst.finalized()
plot_conductance(syst, energies=[0.01 * i for i in range(100)])
if __name__ == "__main__":
main()