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
