
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 <naveengunwal72@gmail.com> 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 <naveengunwal72@gmail.com> 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 <naveengunwal72@gmail.com> 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 <anton.akhmerov+kd@gmail.com> 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-fi... (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/lan...
Let me know if that answers your question, Anton
On Wed, 11 Sep 2019 at 18:39, Naveen Yadav <naveengunwal72@gmail.com> 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 <abbout.adel@gmail.com> 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 <naveengunwal72@gmail.com> 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 <abbout.adel@gmail.com> 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 <naveengunwal72@gmail.com> 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