
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()

Hi, In fact, your system does not have spin conductance, the spin-up (spin-down) representations are the same even you lifted the degeneracy. I mean the hopping of your system does not contain any of the diagonal terms (ie, spin-up =spin-down). I am puzzled by the expression "syst[graphene.shape(circle, (0, 0))] = (4 * t * sigma_0 +* alpha * sigma_y)*" I guess the rashba affects the hopping term not the onsite energy "you can kindly see the kwant site for more details) For you question related to plotting the spin conductance, here is the script: You need to add a conservation_law in the lead lead = kwant.Builder(kwant.TranslationalSymmetry((1, 0)), conservation_law=-sigma_z) and the the spin conductance is defined as def plot_conductance(syst, energies): Gup = [] Gdn = [] G=[] for energy in energies: smatrix = kwant.smatrix(syst, energy) Gup.append(smatrix.transmission((1, 0), (0, 0))) Gdn.append(smatrix.transmission((1, 1), (0, 0))) G.append(smatrix.transmission((1, 0), (0, 0))+smatrix.transmission((1, 1), (0, 0))) pyplot.figure() pyplot.plot(energies, G, 'k', linewidth=3.5,) pyplot.plot(energies, Gup, linestyle='dashdot', color='C0', linewidth=2, ) pyplot.plot(energies, Gdn, linestyle='dashdot', color='C3', linewidth=2, ) Best Adel Le ven. 7 mars 2025 à 09:49, <18682755968@163.com> a écrit :
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()
participants (2)
-
18682755968@163.com
-
Adel Belayadi