Re: [Kwant] Kwant-discuss Digest, Vol 36, Issue 4
Your band structure is correct. When you add magnetic field you change your momentum p to (p-eA), or let's say you push your spectrum. Try it with with a chain with a width of 2 sites and you can see it better. On 25 August 2016 at 11:23, <kwant-discuss-request@kwant-project.org> wrote:
Send Kwant-discuss mailing list submissions to kwant-discuss@kwant-project.org
To subscribe or unsubscribe via the World Wide Web, visit https://mailman-mail5.webfaction.com/listinfo/kwant-discuss or, via email, send a message with subject or body 'help' to kwant-discuss-request@kwant-project.org
You can reach the person managing the list at kwant-discuss-owner@kwant-project.org
When replying, please edit your Subject line so it is more specific than "Re: Contents of Kwant-discuss digest..."
Today's Topics:
1. Re: Band structure under B-field (T.C. Wu)
---------- Forwarded message ---------- From: "T.C. Wu" <tcwu@connect.ust.hk> To: Michael Wimmer <m.t.wimmer@tudelft.nl>, < kwant-discuss@kwant-project.org> Cc: Date: Wed, 24 Aug 2016 19:50:49 +0800 Subject: Re: [Kwant] Band structure under B-field Hi Michael,
Thanks for your help. I modified the hopping of the vertical leads from -t to hopping_Ax. Some LL-like flat bands are observed. However, they are asymmetry about k = 0 (As shown in the attached figures) and it looks a bit strange to me. Is it making sense? I suspect something is still wrong with my code. Thanks for your time.
Best, Johnny
On 24 August 2016 at 18:43, Michael Wimmer <m.t.wimmer@tudelft.nl> wrote:
Dear Johnny,
you simply did not include any magnetic field in the vertical leads, see lead_hop_vert(). Passing the parameters as you do is fine.
Best,
Michael
Dear Kwant users,
I would like to plot the band structure of my system under a magnetic field. Based on the code demostrated in http://topocondmat.org/w3_pump_QHE/Laughlinargument.html, I plot the band structure but I cannot observe any Landau level like spectrum. I suspect it has something to do with the line
p = SimpleNamespace(t=1.0, mu=0.3, mu_lead=0.3, B=0.5) bands = kwant.physics.Bands(flead,args = [p])
Can the B-field be passed to the Hamiltonian in this way? The complete code is attached below. Thanks for your help.
Best, Johnny
#------My code-----------# from __future__ import division import numpy as np import kwant from matplotlib import pyplot as plt from math import pi
class SimpleNamespace(object): def __init__(self, **kwargs): self.__dict__.update(kwargs)
def qhe_corbino(r_out=100, r_in=65, w_lead=10): """Create corbino disk.
Square lattice, one orbital per site. Returns kwant system.
Arguments required in onsite/hoppings: t, mu, mu_lead, B, phi """ # ring shape def ring(pos): (x, y) = pos rsq = x ** 2 + y ** 2 return (r_in ** 2 < rsq < r_out ** 2)
# Onsite and hoppings def onsite(site, p): (x, y) = site.pos return 4 * p.t - p.mu <http://p.mu>
def crosses_branchcut(hop): x1, y1 = hop[0].pos x2, y2 = hop[1].pos return y1 < 0 and x1 > 0.5 and x2 < 0.5
def hopping(site1, site2, p): x1, y1 = site1.pos x2, y2 = site2.pos # Check for correctness! return -p.t * np.exp(-0.5j * p.B * (x1 - x2) * (y1 + y2))
def branchcut_hopping(site1, site2, p): return hopping(site1, site2, p) * np.exp(1j * p.phi)
# Building system lat = kwant.lattice.square() sys = kwant.Builder()
sys[lat.shape(ring, (0, r_in + 1))] = onsite sys[lat.neighbors()] = hopping
# adding special hoppings def hops_across_cut(sys): for hop in kwant.builder.HoppingKind((1, 0), lat, lat)(sys): if crosses_branchcut(hop): yield hop sys[hops_across_cut] = branchcut_hopping
# Attaching leads sym_lead = kwant.TranslationalSymmetry((-1, 0)) lead = kwant.Builder(sym_lead)
def lead_shape(pos): (x, y) = pos return (-w_lead / 2 < y < w_lead / 2)
lead[lat.shape(lead_shape, (0, 0))] = lambda site, p: 4 * p.t - p.mu_lead lead[lat.neighbors()] = lambda site1, site2, p: -p.t
#### Attach the leads and return the system. #### sys.attach_lead(lead) sys.attach_lead(lead, origin=lat(0, 0))
return sys
def total_charge(value_array): determinants = [np.linalg.det(s) for s in value_array] charge = np.cumsum(np.angle(determinants / np.roll(determinants, 1))) return charge / (2 * np.pi)
def qhe_ribbon(W, periodic=False): """ Creates ribbon system
If we have periodic boundary conditions, the flux through a single unit cell is quantized. """ W = 2 * (W // 2)
def ribbon_shape(pos): (x, y) = pos return (-W / 2 <= y <= W / 2)
def onsite(site, p): (x, y) = site.pos return 4 * p.t - p.mu <http://p.mu>
def hopping(site1, site2, p): x1, y1 = site1.pos x2, y2 = site2.pos return -p.t * np.exp(-0.5j * p.B * (x1 - x2) * (y1 + y2))
def hopping_periodic(site1, site2, p): x1, y1 = site1.pos x2, y2 = site2.pos return -p.t * np.exp(-1j * np.pi / (W + 1) * np.round((W + 1) * p.B / (2 * np.pi)) * (x1 - x2) * (y1 + y2))
lat = kwant.lattice.square() sym_sys = kwant.TranslationalSymmetry((-1, 0)) sys = kwant.Builder(sym_sys)
sys[lat.shape(ribbon_shape, (0, 0))] = onsite
if periodic: sys[lat.neighbors()] = hopping_periodic sys[lat(0, - W / 2), lat(0, + W / 2)] = hopping_periodic else: sys[lat.neighbors()] = hopping
return sys
# Quantum hall bar codes
def qhe_hall_bar(L=50, W=10, w_lead=10, w_vert_lead=None): """Create a hall bar system.
Square lattice, one orbital per site. Returns kwant system.
Arguments required in onsite/hoppings: t, mu, mu_lead """
L = 2 * (L // 2) W = 2 * (W // 2) w_lead = 2 * (w_lead // 2) if w_vert_lead is None: w_vert_lead = w_lead else: w_vert_lead = 2 * (w_vert_lead // 2)
# bar shape def bar(pos): (x, y) = pos return (x >= -L / 2 and x <= L / 2) and (y >= -W / 2 and y <= W / 2)
# Onsite and hoppings def onsite(site, p): (x, y) = site.pos return 4 * p.t - p.mu <http://p.mu>
def hopping_Ax(site1, site2, p): x1, y1 = site1.pos x2, y2 = site2.pos return -p.t * np.exp(-0.5j * p.B * (x1 + x2) * (y1 - y2))
def make_lead_hop_y(x0): def hopping_Ay(site1, site2, p): x1, y1 = site1.pos x2, y2 = site2.pos return -p.t * np.exp(-1j * p.B * x0 * (y1 - y2)) return hopping_Ay
def lead_hop_vert(site1, site2, p): return -p.t
# Building system lat = kwant.lattice.square() sys = kwant.Builder()
sys[lat.shape(bar, (0, 0))] = onsite sys[lat.neighbors()] = hopping_Ax
# Attaching leads sym_lead = kwant.TranslationalSymmetry((-1, 0)) lead = kwant.Builder(sym_lead)
def lead_shape(pos): (x, y) = pos return (-w_lead / 2 <= y <= w_lead / 2)
lead_onsite = lambda site, p: 4 * p.t - p.mu_lead
sym_lead_vertical = kwant.TranslationalSymmetry((0, 1)) lead_vertical1 = kwant.Builder(sym_lead_vertical) lead_vertical2 = kwant.Builder(sym_lead_vertical)
def lead_shape_vertical1(pos): (x, y) = pos return (-L / 4 - w_vert_lead / 2 <= x <= -L / 4 + w_vert_lead /
On 24-08-16 07:02, T.C. Wu wrote: 2)
def lead_shape_vertical2(pos): (x, y) = pos return (+L / 4 - w_vert_lead / 2 <= x <= +L / 4 + w_vert_lead /
2)
lead_vertical1[lat.shape(lead_shape_vertical1, (-L / 4, 0))] = lead_onsite lead_vertical1[lat.neighbors()] = lead_hop_vert lead_vertical2[lat.shape(lead_shape_vertical2, (L / 4, 0))] = lead_onsite lead_vertical2[lat.neighbors()] = lead_hop_vert
sys.attach_lead(lead_vertical1) sys.attach_lead(lead_vertical2)
sys.attach_lead(lead_vertical1.reversed()) sys.attach_lead(lead_vertical2.reversed())
lead[lat.shape(lead_shape, (-1, 0))] = lead_onsite lead[lat.neighbors()] = make_lead_hop_y(-L / 2)
sys.attach_lead(lead)
lead = kwant.Builder(sym_lead) lead[lat.shape(lead_shape, (-1, 0))] = lead_onsite lead[lat.neighbors()] = make_lead_hop_y(L / 2)
sys.attach_lead(lead.reversed())
return sys
def calculate_sigmas(G): # reduce by one dimension G -> G[temp, temp] temp = [0, 1, 3, 4, 5] G = G[temp, :] G = G[:, temp] # invert R = G^-1 # find out whether it is a numpy object r = np.linalg.inv(G) # Voltages follow: V = R I[temp] V = r.dot(np.array([0, 0, 0, 1, -1])) # Completely solved the six terminal system. # Consider the 2x2 conductance now: Use I = sigma U E_x = V[1] - V[0] E_y = V[1] - V[3] # formula above sigma_xx = E_x / (E_x**2 + E_y**2) sigma_xy = E_y / (E_x**2 + E_y**2) return sigma_xx, sigma_xy
def plot_bandstructure(flead, momenta):
bands = kwant.physics.Bands(flead,args = [p]) energies = [bands(k) for k in momenta]
plt.figure() plt.plot(momenta, energies) plt.xlabel(r"$k[a^{-1}]$") plt.ylabel(r"$E [t]$") plt.show()
sys = qhe_hall_bar(L=60, W=100, w_lead=90, w_vert_lead=28).finalized() kwant.plot(sys) p = SimpleNamespace(t=1.0, mu=0.3, mu_lead=0.3, B=0.5) Bs = np.linspace(0.02, 0.15, 200) num_leads = len(sys.leads)
momenta = [-pi + 0.02 * pi * i for i in range(101)] plot_bandstructure(sys.leads[2], momenta)
_______________________________________________ Kwant-discuss mailing list Kwant-discuss@kwant-project.org https://mailman-mail5.webfaction.com/listinfo/kwant-discuss
-- Sumit Ghosh Spintronics Theory Group PSE Division KAUST -- ------------------------------ This message and its contents, including attachments are intended solely for the original recipient. If you are not the intended recipient or have received this message in error, please notify me immediately and delete this message from your computer system. Any unauthorized use or distribution is prohibited. Please consider the environment before printing this email.
participants (1)
-
Sumit Ghosh