Skip to content

Commit 4a867ad

Browse files
committed
Add Kane Mele model example
1 parent b317007 commit 4a867ad

File tree

1 file changed

+43
-0
lines changed
  • examples/hm/kane_mele_model

1 file changed

+43
-0
lines changed

examples/hm/kane_mele_model/run.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#!/usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
4+
import logging
5+
6+
import z2pack
7+
import numpy as np
8+
from numpy import cos, sin, kron, sqrt
9+
import matplotlib.pyplot as plt
10+
11+
logging.getLogger('z2pack').setLevel(logging.WARNING)
12+
13+
# defining pauli matrices
14+
identity = np.identity(2, dtype=complex)
15+
pauli_x = np.array([[0, 1], [1, 0]], dtype=complex)
16+
pauli_y = np.array([[0, -1j], [1j, 0]], dtype=complex)
17+
pauli_z = np.array([[1, 0], [0, -1]], dtype=complex)
18+
19+
def get_kane_mele_hamiltonian(t, lambda_v, lambda_R, lambda_SO):
20+
def inner(k):
21+
k = np.array(k) * 2 * np.pi
22+
kx, ky, kz = k
23+
x = kx / 2
24+
y = sqrt(3) * ky / 2
25+
return (
26+
t * (1 + 2 * cos(x) * cos(y)) * kron(pauli_x, identity) +
27+
lambda_v * kron(pauli_z, identity) +
28+
lambda_R * (1 - cos(x) * cos(y)) * kron(pauli_y, pauli_x) +
29+
-sqrt(3) * lambda_R * sin(x) * sin(y) * kron(pauli_y, pauli_y) +
30+
2 * t * cos(x) * sin(y) * kron(pauli_y, identity) +
31+
lambda_SO * (2 * sin(2 * x) - 4 * sin(x) * cos(y)) * kron(pauli_z, pauli_z) +
32+
lambda_R * cos(x) * sin(y) * kron(pauli_x, pauli_x) +
33+
-sqrt(3) * lambda_R * sin(x) * cos(y) * kron(pauli_x, pauli_y)
34+
)
35+
return inner
36+
37+
def get_z2(hamiltonian):
38+
system = z2pack.hm.System(hamiltonian, bands=2)
39+
res = z2pack.surface.run(system=system, surface=lambda s, t: [s / 2, t, 0])
40+
return z2pack.invariant.z2(res)
41+
42+
if __name__ == '__main__':
43+
print('Z2 invariant: {}'.format(get_z2(get_kane_mele_hamiltonian(t=1, lambda_v=0.1, lambda_R=0.05, lambda_SO=0.06))))

0 commit comments

Comments
 (0)