def test_berry_phase_loop(self, setup): g = setup.g.tile(2, 0).tile(2, 1).tile(2, 2) H = Hamiltonian(g) bz1 = BandStructure.param_circle(H, 20, 0.01, [0, 0, 1], [1 / 3] * 3) bz2 = BandStructure.param_circle(H, 20, 0.01, [0, 0, 1], [1 / 3] * 3, loop=True) assert np.allclose(berry_phase(bz1), berry_phase(bz2))
def test_berry_phase_method_fail(self): g = Geometry([[-.6, 0, 0], [0.6, 0, 0]], Atom(1, 1.001), sc=[2, 10, 10]) g.set_nsc([3, 1, 1]) H = Hamiltonian(g) H.construct([(0.1, 1.0, 1.5), (0, 1., 0.5)]) # Contour k = np.linspace(0.0, 1.0, 101) K = np.zeros([k.size, 3]) K[:, 0] = k bz = BrillouinZone(H, K) berry_phase(bz, method='unknown')
def test_berry_phase_zak(self): # SSH model, topological cell g = Geometry([[-.6, 0, 0], [0.6, 0, 0]], Atom(1, 1.001), sc=[2, 10, 10]) g.set_nsc([3, 1, 1]) H = Hamiltonian(g) H.construct([(0.1, 1.0, 1.5), (0, 1., 0.5)]) # Contour k = np.linspace(0.0, 1.0, 101) K = np.zeros([k.size, 3]) K[:, 0] = k bz = BrillouinZone(H, K) assert np.allclose(np.abs(berry_phase(bz, sub=0, method='zak')), np.pi) # Just to do the other branch berry_phase(bz, method='zak')
def test_berry_phase(self, setup): R, param = [0.1, 1.5], [1., 0.1] g = setup.g.tile(2, 0).tile(2, 1).tile(2, 2) H = Hamiltonian(g) H.construct((R, param)) bz = BandStructure.param_circle(H, 20, 0.01, [0, 0, 1], [1 / 3] * 3) berry_phase(bz) berry_phase(bz, sub=0) berry_phase(bz, eigvals=True, sub=0)
def test_berry_phase_fail_sc(self, setup): g = setup.g.tile(2, 0).tile(2, 1).tile(2, 2) H = Hamiltonian(g) bz = BandStructure.param_circle(H.geometry.sc, 20, 0.01, [0, 0, 1], [1 / 3] * 3) berry_phase(bz)