Dear Naveen,

Yes, the code supports 3D systems, see the last section of the tutorial.

Best,
Anton

On Fri, 13 Sep 2019 at 10:00, Naveen Yadav <[email protected]> wrote:
>
> dear sir,
>
> I have tried it for 3D BHZ model but it is not working. Does it work for only 
> 2D system.
>
>
> On Thu, Sep 12, 2019 at 1:54 PM Anton Akhmerov <[email protected]> 
> wrote:
>>
>> 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
>
>
>
> --
>
>
> With Best Regards
> NAVEEN YADAV
> Ph.D Research Scholar
> Deptt. Of Physics & Astrophysics
> University Of Delhi.

Reply via email to