def test_pbs_fail(self, setup): with pytest.raises(ValueError): BandStructure(setup.s1, [[0] * 3, [.5] * 3, [.25] * 3], 1) with pytest.raises(ValueError): BandStructure(setup.s1, [[0] * 3, [.5] * 3, [.25] * 3], [1, 1, 1, 1]) with pytest.raises(ValueError): BandStructure(setup.s1, [[0] * 3, [.5] * 3, [.25] * 3], [1, 1, 1])
def test_bs_insert_jump_fail(self): g = geom.graphene() nk = 10 bs = BandStructure(g, [[0] * 3, [0.5, 0, 0], None, [0] * 3, [0., 0.5, 0]], nk, ['A', 'B', 'C', 'D']) d = np.empty([nk + 1]) with pytest.raises(ValueError): bs.insert_jump(d)
def test_eig3(self, setup): setup.HS.construct([(0.1, 1.5), ((1., 1.), (0.1, 0.1))]) BS = BandStructure(setup.HS, [[0, 0, 0], [0.5, 0.5, 0]], 10) eigs = BS.asarray().eigh() assert len(BS) == eigs.shape[0] assert len(setup.HS) == eigs.shape[1] eig2 = np.array([eig for eig in BS.asyield().eigh()]) assert np.allclose(eigs, eig2) setup.HS.empty()
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_bs_jump_skipping_none(self): g = geom.graphene() bs1 = BandStructure( g, [[0] * 3, [0.5, 0, 0], None, [0] * 3, [0., 0.5, 0]], 30, ['A', 'B', 'C', 'D']) bs2 = BandStructure( g, [[0] * 3, [0.5, 0, 0], None, [0] * 3, [0., 0.5, 0], None], 30, ['A', 'B', 'C', 'D']) assert np.allclose(bs1.k, bs2.k)
def test_pbz1(self, setup): bz = BandStructure(setup.s1, [[0] * 3, [.5] * 3], 300) assert len(bz) == 300 bz2 = BandStructure(setup.s1, [[0] * 2, [.5] * 2], 300, ['A', 'C']) assert len(bz) == 300 bz3 = BandStructure(setup.s1, [[0] * 2, [.5] * 2], [150] * 2) assert len(bz) == 300 bz.lineartick() bz.lineark() bz.lineark(True)
def test_berry_phase_fail_loop(self, setup): g = setup.g.tile(2, 0).tile(2, 1).tile(2, 2) H = Hamiltonian(g) bz = BandStructure.param_circle(H, 20, 0.01, [0, 0, 1], [1 / 3] * 3, loop=True) elec.berry_phase(bz)
def test_bs_insert_jump(self): g = geom.graphene() nk = 10 bs = BandStructure( g, [[0] * 3, [0.5, 0, 0], None, [0] * 3, None, [0., 0.5, 0]], nk, ['A', 'B', 'C', 'D']) d = np.empty([nk]) d_jump = bs.insert_jump(d) assert d_jump.shape == (nk + 2, ) d = np.empty([nk, 5]) d_jump = bs.insert_jump(d) assert d_jump.shape == (nk + 2, 5) assert np.isnan(d_jump).sum() == 10 d_jump = bs.insert_jump(d.T, value=np.inf) assert d_jump.shape == (5, nk + 2) assert np.isinf(d_jump).sum() == 10
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_bandstructure_pickle(self, setup): import pickle as p bz1 = BandStructure(setup.s1, [[0] * 2, [.5] * 2], 300, ['A', 'C']) n = p.dumps(bz1) bz2 = p.loads(n) assert np.allclose(bz1.k, bz2.k) assert np.allclose(bz1.weight, bz2.weight) assert bz1.parent == bz2.parent assert np.allclose(bz1.point, bz2.point) assert np.allclose(bz1.division, bz2.division) assert bz1.name == bz2.name
def finite_bands(dev, pot, SF): H = Hamiltonian(dev) R = np.array([1.4, 1.44, 3.33, 3.37]) * SF t = (0, 3.16, 0, 0.39) H.construct([R, t]) energies = pot.pot_func(dev.xyz) for i in dev.iter(): H[i, i] = energies[i] #band = BandStructure(H, [[-np.pi / 2.46, 0, 0], [np.pi / 2.46, 0, 0]], # 400, [r'$-\pi$',r'$\pi$']) band = BandStructure( H, [[0, 0, 0], [0, 0.5, 0], [1 / 3, 2 / 3, 0], [0, 0, 0]], 400, [r'$\Gamma$', r'$M$', r'$K$', r'$\Gamma$']) bnds = band.asarray().eigh() lk, kt, kl = band.lineark(True) fig = plt.figure() ax = fig.add_subplot(111) for bnd in bnds.T: ax.plot(lk, bnd) plt.xticks(kt, kl) plt.xlim(0, lk[-1]) #plt.ylim([0, 0.055]) plt.ylim([-3, 3]) #ax.set_ylim(-.1,.1) plt.show()
def test_pbz2(self, setup): bz = BandStructure(setup.s1, [[0] * 3, [.25] * 3, [.5] * 3], 300) assert len(bz) == 300
def test_pbs_divisions(self, setup): bz = BandStructure(setup.s1, [[0] * 3, [.25] * 3, [.5] * 3], [10, 10]) assert len(bz) == 21
def test_pbs_missing_arguments(self, setup): with pytest.raises(ValueError): bz = BandStructure(setup.s1, divisions=[10, 10])
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)
def test_pbs_deprecate_arguments(self, setup): with pytest.deprecated_call(): bz = BandStructure(setup.s1, [[0] * 3, [.25] * 3, [.5] * 3], division=[10, 10])
def test_bs_jump(self): g = geom.graphene() bs = BandStructure(g, [[0] * 3, [0.5, 0, 0], None, [0] * 3, [0., 0.5, 0]], 30, ['A', 'B', 'C', 'D']) assert len(bs) == 30