3D Current Density
Dear KWANT developers, I want to plot the current density for a 3D model with finite width in x and y direction. Below is the energy dispersion of the model Hamiltonian. To calculate the current density profile, I have assumed scattering region with a width of 60 unit cells in z-direction and leads with different onsite and same hoppings (as that of scattering region) are attached. For better understanding the code is attached below. For plotting current density, I have used 2D slices of y-z plane. Now my question is that, while building the second system, what onsite and Hopping terms should I have to use? Because I have already build a 3D system with particular onsite and hopping terms. Can I use onsite =0 for the second system? and what should be the hoppings for the second system? can I use simply lat2.neighbors() for the second system? I tried it in different ways, it gives me different results. I don't know which one correct. please suggest me the correct way. [image: image.png] *import kwantfrom numpy import exp,sin,linspace,sqrt, cos, piimport matplotlib as mplfrom matplotlib import pyplot as pltimport tinyarrayimport pandas as pd* *sigma_0 = tinyarray.array([[1, 0], [0, 1]])sigma_x = tinyarray.array([[0, 1], [1, 0]])sigma_y = tinyarray.array([[0, -1j], [1j, 0]])sigma_z = tinyarray.array([[1, 0], [0, -1]])lat=kwant.lattice.cubic(norbs=2)L=10W=80#H=60def onsite(site): return (1.0 * cos(1.05) + 2 * 1.0) * sigma_z* *def onsite_s(site): return (1.0 * cos(1.05) + 2 * 1.0) * sigma_z - 0.75 * sigma_0def hoppingx(site0, site1): return (-0.5 * 1.0 * sigma_z - 0.5 * 1j * 1.0 * sigma_x)def hoppingy(site0, site1): return -0.5 * 1.0 * sigma_z - 0.5 * 1j * 1.0 * sigma_ydef hoppingz(site0, site1): y = site1.pos[1] return (-0.5 * 1.0 * sigma_z - 0.5 * 1j * 0.25 * sigma_0) * exp(-2 * pi * 1j * 0.001 * 1.0 * (y-40))sys=kwant.Builder()sys[(lat(z,y,x) for z in range(0,10) for y in range(W) for x in range(L))]=onsite_ssys[kwant.builder.HoppingKind((0, 0, 1), lat, lat)] = hoppingxsys[kwant.builder.HoppingKind((0, 1, 0), lat, lat)] = hoppingysys[kwant.builder.HoppingKind((1, 0, 0), lat, lat)] = hoppingzsys[(lat(z,y,x) for z in range(10,70) for y in range(W) for x in range(L))]=onsitesys[kwant.builder.HoppingKind((0, 0, 1), lat, lat)] = hoppingxsys[kwant.builder.HoppingKind((0, 1, 0), lat, lat)] = hoppingysys[kwant.builder.HoppingKind((1, 0, 0), lat, lat)] = hoppingzsys[(lat(z,y,x) for z in range(70,80) for y in range(W) for x in range(L))]=onsite_ssys[kwant.builder.HoppingKind((0, 0, 1), lat, lat)] = hoppingxsys[kwant.builder.HoppingKind((0, 1, 0), lat, lat)] = hoppingysys[kwant.builder.HoppingKind((1, 0, 0), lat, lat)] = hoppingz* *# The scattering region 0 < W_z < 10 and 60 < W_z > 70 have onsite energy of leads.* *lead=kwant.Builder(kwant.TranslationalSymmetry((-1,0,0)))lead[(lat(0,y,x) for y in range(W) for x in range(L))] = onsite_slead[kwant.builder.HoppingKind((1, 0, 0), lat, lat)] = hoppingzlead[kwant.builder.HoppingKind((0, 1, 0), lat, lat)] = hoppingylead[kwant.builder.HoppingKind((0, 0, 1), lat, lat)] = hoppingxsys.attach_lead(lead)sys.attach_lead(lead.reversed())kwant.plot(sys)sysf=sys.finalized()Sites=list(sysf.sites)#print(Sites)wave=kwant.wave_function(sysf, energy=0.1)psi=wave(0)[0]#df = pd.DataFrame(Sites)#df.to_csv('data2.csv',index=False, header=False)def Plot(x,psi): def cut(site0,site1): return site0.pos[2]==x and site1.pos[2]==x J_0 = kwant.operator.Current(sysf, where=cut) current = J_0(psi) lat2=kwant.lattice.square(norbs=2) sys2=kwant.Builder() sys2[(lat2(site.pos[0],site.pos[1]) for site in Sites if site.pos[2]==x)]=onsite* * #sys2[(lat2(site.pos[0],site.pos[1]) for site in Sites if site.pos[2]==x)]=0* * sys2[kwant.builder.HoppingKind((1, 0), lat2, lat2)] = hoppingz sys2[kwant.builder.HoppingKind((0, 1), lat2, lat2)] = hoppingy* * #sys2[lat2.neighbors()]=-sigma_0* * #lead2=kwant.Builder(kwant.TranslationalSymmetry((-1, 0))) #lead2[(lat2(site.pos[0], site.pos[1]) for site in Sites if site.pos[2]==x)]=onsite_s #lead2[kwant.builder.HoppingKind((1, 0), lat2, lat2)] = hoppingz #lead2[kwant.builder.HoppingKind((0, 1), lat2, lat2)] = hoppingy #sys2.attach_lead(lead2) #sys2.attach_lead(lead2.reversed()) sys2f=sys2.finalized() #kwant.plot(sys2f) kwant.plotter.current(sys2f, current)for i in range(10): Plot(i,psi)* -- With Best Regards Naveen Yadav Ph.D Research Scholar Deptt. Of Physics & Astrophysics University Of Delhi.
participants (1)
-
Naveen Yadav