smatrix for up and down spin channels in graphene with KM Hamiltonian
Dear sir, I'm trying to get the transmission coefficients for up and down spin channels in graphene with Kane-Mele Hamiltonian (including Rashba term). So it needs to write the Hamiltonian for up and down spin separately. I started with this, sys=kwant.Builder() lat_u=kwant.lattice.honeycomb() lat_d=kwant.lattice.honeycomb() a,b= lat_u.sublattices c,d= lat_d.sublattices My confusion is that, can I declare these sublattices for up and down spins. With Regards, Sudin
Hi,
I'm trying to get the transmission coefficients for up and down spin channels in graphene with Kane-Mele Hamiltonian (including Rashba term). So it needs to write the Hamiltonian for up and down spin separately.
I started with this, sys=kwant.Builder() lat_u=kwant.lattice.honeycomb() lat_d=kwant.lattice.honeycomb() a,b= lat_u.sublattices c,d= lat_d.sublattices
My confusion is that, can I declare these sublattices for up and down spins.
Sure you can declare them! Kwant doesn't know anything about what the different degrees of freedom in your system actually *mean* -- it's up to you to encode that information by putting the correct Hamiltonian for your problem. Thanks, Joe
Dear Sir, I took the model where only nearest neighbor hopping exists. If I attach two leads (one at the Left and the other at the Right) for up spin only, and calculate smatrix(1,0), it shows step-like behaviour as a function of E. The same plot I got for the down spin only. If I attach four leads at the same time (two leads at the right for up and down spins and reversed), it is expected that smatrix(2,0)+smatrix(3,0)+smatrix(2,1)+smatrix(3,1) will be twice the value of smatrix(1,0) for up or down spin only. But it's not coming out. The band structure for leads are ok. I'm not getting where I'm doing wrong. I've appended the code below. Can you please help me in this regard. ====================code===================== import kwant from matplotlib import pyplot from numpy import sqrt from math import * sys=kwant.Builder() lat_u=kwant.lattice.honeycomb() lat_d=kwant.lattice.honeycomb() a,b= lat_u.sublattices c,d= lat_d.sublattices lx,ly=10,10 def Rectangle(pos,lx=lx,ly=ly): x,y=pos return 0<x<lx and 0<y<ly sys[lat_u.shape(Rectangle,(1,1))]=0 sys[lat_d.shape(Rectangle,(1,1))]=0 sys[lat_u.neighbors()] = -1 sys[lat_d.neighbors()] = -1 #================================up_lead0================ def lead0_shape_u(pos,ly=ly): x,y=pos return 0<y<ly # left lead sym0u = kwant.TranslationalSymmetry((-1,0)) sym0u.add_site_family(lat_u.sublattices[0], other_vectors=[(-1, 2)]) sym0u.add_site_family(lat_u.sublattices[1], other_vectors=[(-1, 2)]) lead0_u = kwant.Builder(sym0u) lead0_u[lat_u.shape(lead0_shape_u,(1,1))]=0 lead0_u[lat_u.neighbors()] = -1 sys.attach_lead(lead0_u) #================================down_lead0================== def lead0_shape_d(pos,ly=ly): x,y=pos return 0<y<ly sym0d = kwant.TranslationalSymmetry((-1,0)) sym0d.add_site_family(lat_d.sublattices[0], other_vectors=[(-1, 2)]) sym0d.add_site_family(lat_d.sublattices[1], other_vectors=[(-1, 2)]) lead0_d = kwant.Builder(sym0d) lead0_d[lat_d.shape(lead0_shape_d,(1,1))]=0 lead0_d[lat_d.neighbors()] = -1 sys.attach_lead(lead0_d) #=================================up_lead1================== def lead1_shape_u(pos,ly=ly): x,y=pos return 0<y<ly sym1u = kwant.TranslationalSymmetry((1,0)) sym1u.add_site_family(lat_u.sublattices[0], other_vectors=[(-1, 2)]) sym1u.add_site_family(lat_u.sublattices[1], other_vectors=[(-1, 2)]) lead1_u = kwant.Builder(sym1u) lead1_u[lat_u.shape(lead1_shape_u, (1, 1))] = 0#onsite lead1_u[lat_u.neighbors()] = -1 sys.attach_lead(lead1_u) #=================================down_lead1================== def lead1_shape_d(pos,ly=ly): x,y=pos return 0<y<ly sym1d = kwant.TranslationalSymmetry((1,0)) sym1d.add_site_family(lat_d.sublattices[0], other_vectors=[(-1, 2)]) sym1d.add_site_family(lat_d.sublattices[1], other_vectors=[(-1, 2)]) lead1_d = kwant.Builder(sym1d) lead1_d[lat_d.shape(lead1_shape_d, (1, 1))] = 0 lead1_d[lat_d.neighbors()] = -1 sys.attach_lead(lead1_d) #============================================================ def family_colors(site): return 0 if (site.family == a or site.family == c) else 1 def hopping_lw(site1, site2): return 0.04 if site1.family == site2.family else 0.1 def hopping_color(site1,site2): return 'g' if site1.family==site2.family else 'g' kwant.plot(sys,site_color=family_colors,site_lw=0.1, hop_lw=hopping_lw,hop_color=hopping_color,colorbar=False) sys=sys.finalized() #================================================= def plot_bandstructure(flead, momenta): bands = kwant.physics.Bands(flead) energies = [bands(k) for k in momenta] pyplot.figure() pyplot.plot(momenta, energies) pyplot.xlabel("momentum [(lattice constant)^-1]") pyplot.ylabel("energy [t]") pyplot.show() # Compute the band structure of lead 0. momenta = [-pi + 0.02 * pi * i for i in range(101)] plot_bandstructure(sys.leads[0], momenta) #================================================= def plot_conductance(sys, energies): data = [] for energy in energies: smatrix = kwant.smatrix(sys, energy) data.append(smatrix.transmission(2, 0)) pyplot.figure() pyplot.plot(energies, data) pyplot.xlabel("energy [t]") pyplot.ylabel("conductance [e^2/h]") pyplot.show() energies=[-3+i*0.02 for i in range(100)] #smatrix = kwant.smatrix(sys, 2) #print(smatrix.submatrix(1,0)) plot_conductance(sys,energies) With Regards, sudin
Hi again,
I took the model where only nearest neighbor hopping exists.
If I attach two leads (one at the Left and the other at the Right) for up spin only, and calculate smatrix(1,0), it shows step-like behaviour as a function of E. The same plot I got for the down spin only.
If I attach four leads at the same time (two leads at the right for up and down spins and reversed), it is expected that
smatrix(2,0)+smatrix(3,0)+smatrix(2,1)+smatrix(3,1) will be twice the value of smatrix(1,0) for up or down spin only. But it's not coming out.
The band structure for leads are ok. I'm not getting where I'm doing wrong. I've appended the code below. Can you please help me in this regard.
From briefly looking at your code I can see the following problems: • When you have only one spin species, I would imagine that "lead 0" refers to the left lead, and "lead 1" refers to the right lead. However, when you add both the spin species, your "lead 1" now refers to the left lead for the spin down species. This may be causing some confusion (the leads are numbered in the same order as you attach them to the system with `attach_lead`). • There is no coupling between the two spin lattices. The only hoppings you put are in the lines: sys[lat_u.neighbors()] = -1 sys[lat_d.neighbors()] = -1 this only provides hoppings between neighbors on the `lat_u` lattice (first line) and neighbors on the `lat_d` lattice (second line). It does not, therefore, surprise me that `transmission(1, 0)` is 0, because lead 0 is for the spin up species, lead 1 for the down, and the scattering region has no coupling between these. Hope that helps, Joe
Dear Sir, My intention was that there is no coupling between up and down spins. That's why I didn't apply any hopping between up and down spin. As you said, " There is no coupling between the two spin lattices. The only hoppings you put are in the lines: sys[lat_u.neighbors()] = -1 sys[lat_d.neighbors()] = -1 " then the transmission coefficients for up spin channel (smatrix(1,0) (when there is only two leads for up spins) will be same as smatrix(2,0) (when we add both up and down spin channels). With regards, Sudin
participants (2)
-
Joseph Weston -
Sudin Ganguly