Dear all
I am having a problem defining a system which matches leads I want.
'''I start by defining a rectangular graphene lattice of size 0<=x<L in the x direction and 0<=x<W in the y direction. (By "rectangular" I mean in the real space coordinates, not the crystallographic coordinates.)
I want to attach a lead to the left-had end of this rectangle, going to minus infinity. Therefore, I define a lead with translational symmetry (-1,0) and the appropriate hopping. I attach the lead and plot the system.
When I plot the system, I find that the lead has been attached along the (0,1) crystallographic direction (so, that is along the (1/2, sqrt(3)/3) real space vector). A triangle of extra sites have been added for x<0 (real space) so that the total shape of the scattering region is now not rectangular.'''
This is David's question.Link is https://mailman-mail5.webfaction.com/pipermail/kwant-discuss/2014-October/00....
and Anton had givern the answer:"We should use add_site_family"
I use "add_site_family",but it didn't work.
*In summary,I don't know how to use "add_site_family" exactly in kwant.Then I can't create armchair nonaribbon and four leads*
*or six leads hall bar (The up and down leads are wrong.Left and right leads are right according to my code.The central scattering*
* region is rectangle).Can you explain "add_site_family" in detail or *
*give me a six leads hall bar code to compare with my code .I have spent a lot of time but I can't solve it.*
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()
Thanks in advance.
Bill Yang
Dear Bill,
This is David's question.Link is https://mailman-mail5.webfaction.com/pipermail/kwant-discuss/2014-October/00... https://mailman-mail5.webfaction.com/pipermail/kwant-discuss/2014-October/000169.html.
In a response to that question Michael Wimmer posted example code [1] that uses 'add_site_family'. Did you try doing as he suggests in that post?
I use "add_site_family",but it didn't work.
What, exactly, did not work? Did it raise an exception? Did it not raise an exception, but the result was not what you expected?
Happy Kwanting,
Joe
[1]: https://mailman-mail5.webfaction.com/pipermail/kwant-discuss/2014-October/00...