Dear Sir/Madam, It seems you are not getting the main idea related to the Haldane model. In this model, you need to break the inversion symmetry that protects the Dirac point.
For this purpose, to break the symmetry it is wrong to use directly lead0[Haldane.a.neighbors()] = t2*np.exp(-1j*phi) lead0[Haldane.b.neighbors()] = t2*np.exp(1j*phi) or syst[Haldane.a.neighbors()] = t2*np.exp(-1j*phi) syst[Haldane.b.neighbors()] = t2*np.exp(1j*phi) The script (in red) of your code does not break the symmetry. Instead, you need next-nearest neighbor hoppings by adding imaginary second-nearest neighbor hoppings, with a given distinctive pattern or direction: nnn_hoppings_a = (((-1, 0), a, a), ((0, 1), a, a), ((1, -1), a, a)) nnn_hoppings_b = (((1, 0), b, b), ((0, -1), b, b), ((-1, 1), b, b)) nnn_hoppings = nnn_hoppings_a + nnn_hoppings_b syst[[kwant.builder.HoppingKind(*hopping) for hopping in nnn_hoppings]] = t2*1j and lead0[[kwant.builder.HoppingKind(*hopping) for hopping in nnn_hoppings]] = t2*1j by doing so, we will get the correct spectrum of the Haldane model. For more insight I strongly recommend you to see the following useful links: https://github.com/kwant-project/kwant-tutorial-2016/blob/master/3.4.graphene_qshe.ipynb https://github.com/topocm/topocm_content/blob/master/w4_haldane/haldane_model.md Best Adel Le ven. 24 mars 2023 à 15:25, 1833356804--- via Kwant-discuss < kwant-discuss@python.org> a écrit : > Dear professionals, I am a beginner and I have encountered a problem with > my Haldane model. The band structure I obtained with this parameter is > different from the ones obtained by others. I am not sure where the error > lies and I would appreciate it if you could help me look into it. Thank > you for your time and assistance. I am looking forward to hearing from > you. > > my codes are as follows: > > import kwant > import numpy as np > from math import pi, sqrt, tanh > from matplotlib import pyplot > #HIDDEN_BEGIN_makesyst > Haldane = kwant.lattice.honeycomb() > a, b = Haldane.sublattices > > L=10 > > W=20 > > M=2/3 > t=1 > t2=1/3 > phi=np.pi/4 > > def rec(pos): > x, y = pos > return 0<=x<=L and 0<=y<=W > > syst = kwant.Builder() > syst[Haldane.shape(rec, (0, 0))] = M > syst[Haldane.neighbors()] = t > > # add second neighbours hoppings > syst[Haldane.a.neighbors()] = t2*np.exp(1j*phi) > syst[Haldane.b.neighbors()] = t2*np.exp(-1j*phi) > > > syst.eradicate_dangling() > > > > sym0 = kwant.TranslationalSymmetry(Haldane.vec((-1, 0))) > def lead0_shape(pos): > x, y = pos > return (0<y<W) > sym0.add_site_family(Haldane.sublattices[0] , other_vectors=[(1,-2)]) > sym0.add_site_family(Haldane.sublattices[1] , other_vectors=[(1,-2)]) > lead0 = kwant.Builder(sym0) > lead0[Haldane.shape(lead0_shape, (0, 0))] = M > lead0[Haldane.neighbors()] = t > > # add second neighbours hoppings > lead0[Haldane.a.neighbors()] = t2*np.exp(-1j*phi) > lead0[Haldane.b.neighbors()] = t2*np.exp(1j*phi) > > lead0.eradicate_dangling() > > > syst.attach_lead(lead0) > syst.attach_lead(lead0.reversed()) > > > > #kwant.plot(syst) > > > syst = syst.finalized() > > > bands = kwant.physics.Bands(syst.leads[0]) > j=np.linspace(0, 5, 101) > energies = [bands(k) for k in j] > pyplot.figure() > pyplot.plot(j, energies) > pyplot.xlabel("momentum [(lattice constant)^-1]") > pyplot.ylabel("energy [t]") > pyplot.show() >