def test_wrap_oplist(self, setup): R, param = [0.1, 1.5], [1, 2.1] H = Hamiltonian(setup.g.copy()) H.construct([R, param]) bz = MonkhorstPack(H, [10, 10, 1]) E = np.linspace(-4, 4, 1000) dist = get_distribution('gaussian', smearing=0.05) def wrap(es, parent, k, weight): DOS = es.DOS(E, distribution=dist) PDOS = es.PDOS(E, distribution=dist) vel = es.velocity() * es.occupation().reshape(-1, 1) return oplist([DOS, PDOS, vel]) bz.asaverage() results = bz.eigenstate(wrap=wrap) assert np.allclose(bz.DOS(E, distribution=dist), results[0]) assert np.allclose(bz.PDOS(E, distribution=dist), results[1])
def test_as_wrap_default_oplist(self): from sisl import geom, Hamiltonian g = geom.graphene() H = Hamiltonian(g) H.construct([[0.1, 1.44], [0, -2.7]]) bz = MonkhorstPack(H, [2, 2, 2], trs=False).asaverage() assert len(bz) == 2 ** 3 # Check with a wrap function E = np.linspace(-2, 2, 100) def wrap_sum(es, weight): PDOS = es.PDOS(E) * weight return PDOS.sum(0), PDOS DOS, PDOS = bz.assum().eigenstate(wrap=wrap_sum) assert np.allclose(bz.DOS(E), DOS) assert np.allclose(bz.PDOS(E), PDOS)