Four leads or six leads in hall bar-How to use " add_site_family" exactly in Kwant

Dear Joe "add_site_family" did work in graphene zigzag nanoribbon.When I use "add_site_family",the central scattering region would not enlarge after connected with leads in zigzag nanoribbon.But when I use it in graphene armchair nanoribbon,the central scattering region will enlarge. If you have spare time,you can run my code,and you can see the picture that the central scattering is enlarge a little in up and downd leads,left and right lead is right. Thank you Bill Yang This is my code from math import pi, sqrt, tanh import kwant # For computing eigenvalues import scipy.sparse.linalg as sla # For plotting from matplotlib import pyplot #Paramter LeftLength=0.5 #width of scattering region RightLength=5 UpWidth=0 DownWidth=2*4+1#length of scattering region UnitCell=int((DownWidth-1)/2)+1 #unit cell # Define the graphene lattice sin_30, cos_30 = (1 / 2, sqrt(3) / 2) graphene = kwant.lattice.general([(1, 0), (sin_30, cos_30)], [(0, 0), (0, 1 / sqrt(3))]) a,b=graphene.sublattices #graphene2 = graphene = kwant.lattice.general([(sqrt(3)/2, 1/2), (0, 1)], #[(0, 0), (1 / (2*sqrt(3)),1/2)]) def make_system(LeftLength,RightLength,UpWidth,DownWidth): #### Define the scattering region. #### # circular scattering region def circle(pos): x, y = pos return (-LeftLength <= x <= RightLength and (-(sqrt(3)/2*DownWidth+1/2/sqrt(3))<=y<=sqrt(3)/2*UpWidth)) syst = kwant.Builder() # w: width and pot: potential maximum of the p-n junction def potential(pos): #def potential(pos): (x, y) = pos return 0 syst[graphene.shape(circle, (0, 0))] = potential # specify the hoppings of the graphene lattice in the # format expected by builder.HoppingKind hoppings = (((0, 0), a, b), ((0, 1), a, b), ((-1, 1), a, b)) syst[[kwant.builder.HoppingKind(*hopping) for hopping in hoppings]] = -1 # Lead left and right sym0 = kwant.TranslationalSymmetry(graphene.vec((-1, 0))) sym0.add_site_family(graphene.sublattices[0], other_vectors=[(1, -2)]) sym0.add_site_family(graphene.sublattices[1], other_vectors=[(1, -2)]) def lead0_shape(pos): x, y = pos return (-(sqrt(3)/2*DownWidth+1/2/sqrt(3))<=y<=sqrt(3)/2*UpWidth) lead0= kwant.Builder(sym0) lead0[graphene.shape(lead0_shape, (0, 0))] = 0 lead0[[kwant.builder.HoppingKind(*hopping) for hopping in hoppings]] = -1 #Lead up and down sym1 = kwant.TranslationalSymmetry(graphene.vec((-1, 2))) #sym1.add_site_family(graphene.sublattices[0], other_vectors=[(1,1)]) #sym1.add_site_family(graphene.sublattices[1], other_vectors=[(1,1)]) def lead1_shape(pos): x, y = pos return (-1<x<6) lead1= kwant.Builder(sym1) lead1[graphene.shape(lead1_shape, (0, 0))] = 0 lead1[[kwant.builder.HoppingKind(*hopping) for hopping in hoppings]] = -1 return syst, [lead0,lead0.reversed(),lead1,lead1.reversed()] def compute_evs(syst): # Compute some eigenvalues of the closed system sparse_mat = syst.hamiltonian_submatrix(sparse=True) evs = sla.eigs(sparse_mat, 2)[0] print(evs.real) def plot_conductance(syst, energies): # Compute transmission as a function of energy data = [] for energy in energies: smatrix = kwant.smatrix(syst, energy) data.append(smatrix.transmission(0, 1)) pyplot.figure() pyplot.plot(energies, data) pyplot.xlabel("energy [t]") pyplot.ylabel("conductance [e^2/h]") pyplot.show() 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() def main(): pot = 0 syst, leads = make_system(LeftLength,RightLength,UpWidth,DownWidth) # To highlight the two sublattices of graphene, we plot one with # a filled, and the other one with an open circle: def family_colors(site): return 0 if site.family == a else 1 # Plot the closed system without leads. #kwant.plot(syst, site_color=family_colors, site_lw=0.1, colorbar=False) # Attach the leads to the system. for lead in leads: syst.attach_lead(lead) # Then, plot the system with leads. kwant.plot(syst, site_color=family_colors, site_lw=0.1, lead_site_lw=0, colorbar=False) # Finalize the system. syst = syst.finalized() # Plot conductance. '''energies = [] for ie in range(1,400): energy = ie * 0.01 energies.append(energy) plot_conductance(syst, energies)''' # 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()

Hi Bill,
Dear Joe "add_site_family" did work in graphene zigzag nanoribbon.When I use "add_site_family",the central scattering region would not enlarge after connected with leads in zigzag nanoribbon.But when I use it in graphene armchair nanoribbon,the central scattering region will enlarge. If you have spare time,you can run my code,and you can see the picture that the central scattering is enlarge a little in up and downd leads,left and right lead is right. Thank you Bill Yang
Ah, I understand now. In your original email you talked about a "triangle of sites", which I did not see in the images you posted, so I was unsure what you were talking about. I don't think you be able to get rid of the "extra added bit" with a judicious choice of 'other_vectors'; I think you'll have to define the lattice differently in order to do what you want. On the other hand, is this extra added region such a problem? There will be no physical consequences, as the extra added piece has the same Hamiltonian as the leads... Happy Kwanting, Joe
participants (2)
-
hui yang
-
Joseph Weston