-
Notifications
You must be signed in to change notification settings - Fork 52
Open
Description
Dear developer,
I calculated the Chern number of the Haldane model using software and found it to be incorrect. I am using the Haldane model provided in the book "Topological Insulators - Dirac Equation in Condensed Matters", which is not in Bloch form. However, I believe that the Chern number is not related to the gauge. I don't know where the reason lies or what parameters should be set. Here is my code and results.
import z2pack
import numpy as np
identity=np.identity(2,dtype=complex)
pauli_x=np.array([[0,1],[1,0]],dtype=complex)
pauli_y=np.array([[0,-1j],[1j,0]],dtype=complex)
pauli_z=np.array([[1,0],[0,-1]],dtype=complex)
def Hamilton(k,M,t1,t2,phi):
a=1
a1=np.array([0,1]);a2=np.array([-np.sqrt(3)*a/2,-a/2]);a3=np.array([np.sqrt(3)*a/2,-a/2]);
b1=a2-a3;b2=a3-a1;b3=a1-a2;
epsilon=2*t2*np.cos(phi)*(np.cos(np.dot(k,b1))+np.cos(np.dot(k,b2))+np.cos(np.dot(k,b3)))
dx=t1*(np.cos(np.dot(k,a1))+np.cos(np.dot(k,a2))+np.cos(np.dot(k,a3)))
dy=t1*(np.sin(np.dot(k,a1))+np.sin(np.dot(k,a2))+np.sin(np.dot(k,a3)))
dz=M-2*t2*np.sin(phi)*(np.sin(np.dot(k,b1))+np.sin(np.dot(k,b2))+np.sin(np.dot(k,b3)))
H=epsilon*identity+dx*pauli_x+dy*pauli_y+dz*pauli_z
return H
system=z2pack.hm.System(
lambda k:Hamilton(k,0.1,1,0.2,0.2*np.pi),
#lambda k:Hamilton(k,0.5,1.,1./3,0.5*np.pi),
#lambda k:Hamilton(k,0.5,1.,1./3,-0.5*np.pi),
bands=1,
dim=2
)
result=z2pack.surface.run(
system=system,
surface=lambda s,t:[t,s],
min_neighbour_dist=1e-5
)
print('Chern number:',z2pack.invariant.chern(result))
Chern number: 0.000314335120135396
Metadata
Metadata
Assignees
Labels
No labels