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

Reply via email to