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