Great,

Just to add a concluding remark: Landau fan requires a continuum
approximation of the Hamiltonian. If you start with a tight-binding
Hamiltonian you'd get fractal spectrum and the Hofstadter butterfly
instead.

Happy Kwanting,
Anton

On Thu, 12 Sep 2019 at 10:09, Naveen Yadav <[email protected]> wrote:
>
> The second problem is solved. I got the landau fan for BHZ model.
> Thank you for the support.
>
>
> On Thu, Sep 12, 2019, 12:46 Naveen Yadav <[email protected]> wrote:
>>
>> Dear sir,
>>
>> I have updated KWANT, but it shows the AttributeError: module 
>> 'kwant.continuum' has no attribute 'discretize_landau'. And in browser also, 
>> it is showing the same error. I have downloaded the landau_levels.py file 
>> and put it into the continuum folder. But it is not working.
>>
>>
>> On Wed, Sep 11, 2019, 23:47 Naveen Yadav <[email protected]> wrote:
>>>
>>> Dear sir,
>>>
>>> That is exactly what I am looking for.
>>> But in my case Hamiltonian is not polynomial in k. It contains Sine and 
>>> Cosine terms. It's a tight binding Hamiltonian having coupling  terms like 
>>> sigma_x *Sin(kx)+ sigma_y *sin(ky) and mass term in the trignometric form. 
>>> So, can I proceed by writing the trignometric terms in some lower order 
>>> polynomial terms? Does that make sense?
>>> Please make some comment regarding this.
>>> Thank you very much.
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> Naveen
>>> Department of Physics & Astrophysics
>>> University of Delhi
>>> New Delhi-110007
>>>
>>> On Wed, Sep 11, 2019, 22:18 Anton Akhmerov <[email protected]> 
>>> wrote:
>>>>
>>>> Dear Naveen,
>>>>
>>>> If you are dealing with a continuum Hamiltonian (so a polynomial in
>>>> k-space), then there is a recent addition to Kwant, that allows to
>>>> compute Landau levels. Please check out if this tutorial is what you
>>>> are looking for:
>>>> https://kwant-project.org/doc/dev/tutorial/magnetic_field#adding-magnetic-field
>>>> (if you click the "activate thebelab" button, you can also play around
>>>> with the code in your browser).
>>>>
>>>> If that suits your needs, you'd need to either install a development
>>>> version of Kwant or just get this file:
>>>> https://gitlab.kwant-project.org/kwant/kwant/blob/master/kwant/continuum/landau_levels.py
>>>>
>>>> Let me know if that answers your question,
>>>> Anton
>>>>
>>>> On Wed, 11 Sep 2019 at 18:39, Naveen Yadav <[email protected]> 
>>>> wrote:
>>>> >
>>>> > Dear sir,
>>>> >
>>>> > I understood that this code is off no use. The leads are useless here.
>>>> > Actually, I want to plot the Landau fan. Can KWANT  do the job here?
>>>> >
>>>> >
>>>> >
>>>> >
>>>> >
>>>> >
>>>> >
>>>> >
>>>> >
>>>> >
>>>> >
>>>> > Naveen
>>>> > Department of Physics & Astrophysics
>>>> > University of Delhi
>>>> > New Delhi-110007
>>>> >
>>>> > On Mon, Sep 9, 2019, 00:50 Abbout Adel <[email protected]> wrote:
>>>> >>
>>>> >> Dear Naveen,
>>>> >>
>>>> >> If your concern is the program which is slow, that is not an issue 
>>>> >> since it takes just few minutes.
>>>> >> Now, if you are talking about the result, I want to be sure that you 
>>>> >> notice that your system is not infinite as you claim in your email.
>>>> >> You can check that by adding extra cells from the lead" 
>>>> >> syst.attach_lead(lead, add_cells=10)
>>>> >> Actually, in your case, the presence of the leads is useless since at 
>>>> >> the end, you are just diagonalizing the Hamiltonian of the central 
>>>> >> system.
>>>> >> If you want to study an infinite system in x and y, you need to look at 
>>>> >> the module "wraparound" and the example of graphene that is in the 
>>>> >> archive of kwant.
>>>> >> For the magnetic field, you can use the Pierls substitution. check for 
>>>> >> example this paper [1]
>>>> >>
>>>> >> You can also think about the use of continuous Hamiltonian in kwant. 
>>>> >> You may find it very useful [2]
>>>> >> I hope this helps.
>>>> >>
>>>> >> Regards,
>>>> >> Adel
>>>> >>
>>>> >>
>>>> >> [1]  https://arxiv.org/pdf/1601.06507.pdf
>>>> >> [2] https://kwant-project.org/doc/1/tutorial/discretize
>>>> >>
>>>> >> On Sun, Sep 8, 2019 at 6:16 PM Naveen Yadav <[email protected]> 
>>>> >> wrote:
>>>> >>>
>>>> >>> Dear Sir,
>>>> >>> Thanks for the tips. As you told, I have tried in other way also but I 
>>>> >>> am getting the same result which are very tedious. I don't know where 
>>>> >>> is fault.
>>>> >>> Now the code looks like
>>>> >>>
>>>> >>> import kwant
>>>> >>> import scipy.sparse.linalg as sla
>>>> >>> import matplotlib.pyplot as plt
>>>> >>> import tinyarray
>>>> >>> import numpy as np
>>>> >>> from numpy import cos, sin, pi
>>>> >>> import cmath
>>>> >>> from cmath import exp
>>>> >>>
>>>> >>> 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]])
>>>> >>>
>>>> >>>
>>>> >>> def make_system(a=1, L=30, W=10, H=10, t=1.0, t_x=1.0, t_y=1.0, 
>>>> >>> t_z=1.0, lamda=0.1, beta=1.05):
>>>> >>>     def onsite(site):
>>>> >>>         return (t_z * cos(beta) + 2 * t) * sigma_z
>>>> >>>
>>>> >>>     def hoppingx(site0, site1):
>>>> >>>         return (-0.5 * t * sigma_z - 0.5 * 1j * t_x * sigma_x)
>>>> >>>
>>>> >>>     def hoppingy(site0, site1):
>>>> >>>         return -0.5 * t * sigma_z - 0.5 * 1j * t_y * sigma_y
>>>> >>>
>>>> >>>     def hoppingz(site0, site1, B):
>>>> >>>         y = site1.pos[1]
>>>> >>>         return (-0.5 * t_z * sigma_z - 0.5 * 1j * lamda * sigma_0) * 
>>>> >>> exp(2 * pi * 1j * B * a * (y-40))
>>>> >>>
>>>> >>>
>>>> >>>     syst = kwant.Builder()
>>>> >>>     lat = kwant.lattice.cubic(a)
>>>> >>>     syst[(lat(z, y, x) for z in range(H) for y in range(W) for x in 
>>>> >>> range(L))] = onsite
>>>> >>>     syst[kwant.builder.HoppingKind((1, 0, 0), lat, lat)] = hoppingz
>>>> >>>     syst[kwant.builder.HoppingKind((0, 1, 0), lat, lat)] = hoppingy
>>>> >>>     syst[kwant.builder.HoppingKind((0, 0, 1), lat, lat)] = hoppingx
>>>> >>>
>>>> >>>     lead1=kwant.Builder(kwant.TranslationalSymmetry((0,-a,0)))
>>>> >>>     lead1[(lat(z,y,x)  for z in range(H)for y in range(W)for x in 
>>>> >>> range(L))]=onsite
>>>> >>>     lead1[kwant.builder.HoppingKind((1, 0, 0), lat, lat)] = hoppingz
>>>> >>>     lead1[kwant.builder.HoppingKind((0, 1, 0), lat, lat)] = hoppingy
>>>> >>>     lead1[kwant.builder.HoppingKind((0, 0, 1), lat, lat)] = hoppingx
>>>> >>>
>>>> >>>     syst.attach_lead(lead1)
>>>> >>>     syst.attach_lead(lead1.reversed())
>>>> >>>
>>>> >>>     lead2=kwant.Builder(kwant.TranslationalSymmetry((-a,0,0)))
>>>> >>>     lead2[(lat(z,y,x)  for z in range(H)for y in range(W)for x in 
>>>> >>> range(L))]=onsite
>>>> >>>     lead2[kwant.builder.HoppingKind((1, 0, 0), lat, lat)] = hoppingz
>>>> >>>     lead2[kwant.builder.HoppingKind((0, 1, 0), lat, lat)] = hoppingy
>>>> >>>     lead2[kwant.builder.HoppingKind((0, 0, 1), lat, lat)] = hoppingx
>>>> >>>
>>>> >>>     syst.attach_lead(lead2)
>>>> >>>     syst.attach_lead(lead2.reversed())
>>>> >>>     syst = syst.finalized()
>>>> >>>     return syst
>>>> >>>
>>>> >>> def analyze_system(syst, Bfields):
>>>> >>>     syst = make_system()
>>>> >>>     kwant.plot(syst)
>>>> >>>     energies = []
>>>> >>>     for B in Bfields:
>>>> >>>         #print(B)
>>>> >>>         ham_mat = syst.hamiltonian_submatrix(params=dict(B=B), 
>>>> >>> sparse=True)
>>>> >>>         ev, evec = sla.eigsh(ham_mat.tocsc(), k=20, sigma=0)
>>>> >>>         energies.append(ev)
>>>> >>>     #print (energies)
>>>> >>>
>>>> >>>     plt.figure()
>>>> >>>     plt.plot(Bfields, energies)
>>>> >>>     plt.xlabel("magnetic field [${10^-3 h/e}$]")
>>>> >>>     plt.ylabel("energy [t]")
>>>> >>>
>>>> >>>     plt.ylim(0, 0.11)
>>>> >>>     plt.show()
>>>> >>> def main():
>>>> >>>     syst = make_system()
>>>> >>>     analyze_system(syst, [B * 0.00002 for B in range(101)])
>>>> >>> main()
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>>
>>>> >>> Naveen
>>>> >>> Department of Physics & Astrophysics
>>>> >>> University of Delhi
>>>> >>> New Delhi-110007
>>>> >>>
>>>> >>> On Sun, Sep 8, 2019, 17:37 Abbout Adel <[email protected]> wrote:
>>>> >>>>
>>>> >>>> Dear Naveen,
>>>> >>>>
>>>> >>>> Your program works fine. You have just a small problem of plotting.  
>>>> >>>> You can solve that by changing "plt.show"  by "plt.show()".
>>>> >>>>
>>>> >>>> Think about putting  print (B) inside the loop when you debug your 
>>>> >>>> program. That will help you for example to see if the program is 
>>>> >>>> running well, and you  can detect what may be wrong.
>>>> >>>> Think also about returning Energies in your function. This way you 
>>>> >>>> can try potting the result outside the function you called.  Don't 
>>>> >>>> hesitate to put some extra lines in your program to follow the 
>>>> >>>> progress when you think that there is a problem.
>>>> >>>>
>>>> >>>>
>>>> >>>> I hope this helps.
>>>> >>>> Regards,
>>>> >>>> Adel
>>>> >>>>
>>>> >>>> On Thu, Sep 5, 2019 at 7:32 PM Naveen Yadav 
>>>> >>>> <[email protected]> wrote:
>>>> >>>>>
>>>> >>>>> Dear Sir,
>>>> >>>>>
>>>> >>>>> I am trying to plot the energy as a function of magnetic field for a 
>>>> >>>>> 3D case, but I am getting tedious results. The system is infinite in 
>>>> >>>>> two directions and has some width in the third direction. Please 
>>>> >>>>> have a look at the code attached below. I tried a lot but failed. Is 
>>>> >>>>> the code correct or I am wrong somewhere.
>>>> >>>>> Thank you.
>>>> >>>>>
>>>> >>>>>
>>>> >>>>> import kwant
>>>> >>>>> import scipy.sparse.linalg as sla
>>>> >>>>> import matplotlib.pyplot as plt
>>>> >>>>> import tinyarray
>>>> >>>>> import numpy as np
>>>> >>>>> from numpy import cos, sin, pi
>>>> >>>>> import cmath
>>>> >>>>> from cmath import exp
>>>> >>>>>
>>>> >>>>> 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]])
>>>> >>>>>
>>>> >>>>>
>>>> >>>>> def make_system(a=1, L=30, W=10, H=10, t=1.0, t_x=1.0, t_y=1.0, 
>>>> >>>>> t_z=1.0, lamda=0.1, beta=1.05):
>>>> >>>>>     def onsite(site):
>>>> >>>>>         return (t_z * cos(beta) + 2 * t) * sigma_z
>>>> >>>>>
>>>> >>>>>     def hoppingx(site0, site1):
>>>> >>>>>         return (-0.5 * t * sigma_z - 0.5 * 1j * t_x * sigma_x)
>>>> >>>>>
>>>> >>>>>     def hoppingy(site0, site1):
>>>> >>>>>         return -0.5 * t * sigma_z - 0.5 * 1j * t_y * sigma_y
>>>> >>>>>
>>>> >>>>>     def hoppingz(site0, site1, B):
>>>> >>>>>         y = site1.pos[1]
>>>> >>>>>         return (-0.5 * t_z * sigma_z - 0.5 * 1j * lamda * sigma_0) * 
>>>> >>>>> exp(2 * pi * 1j * B * a * (y-40))
>>>> >>>>>
>>>> >>>>>
>>>> >>>>>     syst = kwant.Builder()
>>>> >>>>>     lat = kwant.lattice.cubic(a)
>>>> >>>>>     syst[(lat(z, y, x) for z in range(H) for y in range(W) for x in 
>>>> >>>>> range(L))] = onsite
>>>> >>>>>     syst[kwant.builder.HoppingKind((1, 0, 0), lat, lat)] = hoppingz
>>>> >>>>>     syst[kwant.builder.HoppingKind((0, 1, 0), lat, lat)] = hoppingy
>>>> >>>>>     syst[kwant.builder.HoppingKind((0, 0, 1), lat, lat)] = hoppingx
>>>> >>>>>
>>>> >>>>>     lead1=kwant.Builder(kwant.TranslationalSymmetry((0,-a,0)))
>>>> >>>>>     lead1[(lat(z,y,x)  for z in range(H)for y in range(W)for x in 
>>>> >>>>> range(L))]=onsite
>>>> >>>>>     lead1[kwant.builder.HoppingKind((1, 0, 0), lat, lat)] = hoppingz
>>>> >>>>>     lead1[kwant.builder.HoppingKind((0, 1, 0), lat, lat)] = hoppingy
>>>> >>>>>     lead1[kwant.builder.HoppingKind((0, 0, 1), lat, lat)] = hoppingx
>>>> >>>>>
>>>> >>>>>     syst.attach_lead(lead1)
>>>> >>>>>     syst.attach_lead(lead1.reversed())
>>>> >>>>>
>>>> >>>>>     lead2=kwant.Builder(kwant.TranslationalSymmetry((-a,0,0)))
>>>> >>>>>     lead2[(lat(z,y,x)  for z in range(H)for y in range(W)for x in 
>>>> >>>>> range(L))]=onsite
>>>> >>>>>     lead2[kwant.builder.HoppingKind((1, 0, 0), lat, lat)] = hoppingz
>>>> >>>>>     lead2[kwant.builder.HoppingKind((0, 1, 0), lat, lat)] = hoppingy
>>>> >>>>>     lead2[kwant.builder.HoppingKind((0, 0, 1), lat, lat)] = hoppingx
>>>> >>>>>
>>>> >>>>>     syst.attach_lead(lead2)
>>>> >>>>>     syst.attach_lead(lead2.reversed())
>>>> >>>>>     syst = syst.finalized()
>>>> >>>>>     return syst
>>>> >>>>>
>>>> >>>>> def analyze_system():
>>>> >>>>>     syst = make_system()
>>>> >>>>>     kwant.plot(syst)
>>>> >>>>>     Bfields = np.linspace(0, 0.002, 100)
>>>> >>>>>     energies = []
>>>> >>>>>     for B in Bfields:
>>>> >>>>>         ham_mat = syst.hamiltonian_submatrix(params=dict(B=B), 
>>>> >>>>> sparse=True)
>>>> >>>>>         ev, evec = sla.eigsh(ham_mat.tocsc(), k=20, sigma=0)
>>>> >>>>>         energies.append(ev)
>>>> >>>>>     #print(energies)
>>>> >>>>>
>>>> >>>>>     plt.figure()
>>>> >>>>>     plt.plot(Bfields, energies)
>>>> >>>>>     plt.xlabel("magnetic field [${10^-3 h/e}$]")
>>>> >>>>>     plt.ylabel("energy [t]")
>>>> >>>>>
>>>> >>>>>     plt.ylim(0, 0.11)
>>>> >>>>>     plt.show
>>>> >>>>> def main():
>>>> >>>>>     syst = make_system()
>>>> >>>>>     analyze_system()
>>>> >>>>> main()
>>>> >>>>>
>>>> >>>>>
>>>> >>>>>
>>>> >>>>>
>>>> >>>>> --
>>>> >>>>>
>>>> >>>>>
>>>> >>>>> With Best Regards
>>>> >>>>> NAVEEN YADAV
>>>> >>>>> Ph.D Research Scholar
>>>> >>>>> Deptt. Of Physics & Astrophysics
>>>> >>>>> University Of Delhi.
>>>> >>>>
>>>> >>>>
>>>> >>>>
>>>> >>>> --
>>>> >>>> Abbout Adel
>>>> >>
>>>> >>
>>>> >>
>>>> >> --
>>>> >> Abbout Adel

Reply via email to