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-requ...@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-requ...@kwant-project.org
>
> You can reach the person managing the list at
>         kwant-discuss-ow...@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" <t...@connect.ust.hk>
> To: Michael Wimmer <m.t.wim...@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.wim...@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
>>
>>
>> On 24-08-16 07:02, T.C. Wu wrote:
>> > 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 /
>> 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.

Reply via email to