the quasi-one-dimensional Haldane model energy band structure

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()

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.graphen... https://github.com/topocm/topocm_content/blob/master/w4_haldane/haldane_mode... 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()
participants (2)
-
1833356804@qq.com
-
Adel Belayadi