Exemplo n.º 1
0
 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])
Exemplo n.º 2
0
    def test_as_wrap(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)
        assert len(bz) == 2 ** 3

        # Check with a wrap function
        def wrap_reverse(arg):
            return arg[::-1]

        asarray = bz.asarray().eigh(wrap=wrap_reverse)
        aslist = np.array(bz.aslist().eigh(wrap=wrap_reverse))
        asyield = np.array([a for a in bz.asyield().eigh(wrap=wrap_reverse)])
        asaverage = bz.asaverage().eigh(wrap=wrap_reverse)
        assert np.allclose(asarray, aslist)
        assert np.allclose(asarray, asyield)
        # Average needs to be performed
        assert np.allclose((asarray / len(bz)).sum(0), asaverage)

        # Now we should check whether the reverse is doing its magic!
        mylist = [wrap_reverse(H.eigh(k=k)) for k in bz]
        assert np.allclose(aslist, mylist)
Exemplo n.º 3
0
    def test_wrap_kwargs(arg):
        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)
        assert len(bz) == 2 ** 3

        def wrap_none(arg):
            return arg
        def wrap_kwargs(arg, parent, k, weight):
            return arg * weight

        E = np.linspace(-2, 2, 100)
        asarray1 = (bz.asarray().DOS(E, wrap=wrap_none) * bz.weight.reshape(-1, 1)).sum(0)
        asarray2 = bz.asarray().DOS(E, wrap=wrap_kwargs).sum(0)
        aslist1 = (np.array(bz.aslist().DOS(E, wrap=wrap_none)) * bz.weight.reshape(-1, 1)).sum(0)
        aslist2 = np.array(bz.aslist().DOS(E, wrap=wrap_kwargs)).sum(0)
        asyield1 = (np.array([a for a in bz.asyield().DOS(E, wrap=wrap_none)]) * bz.weight.reshape(-1, 1)).sum(0)
        asyield2 = np.array([a for a in bz.asyield().DOS(E, wrap=wrap_kwargs)]).sum(0)
        asaverage = bz.asaverage().DOS(E, wrap=wrap_none)
        assum = bz.assum().DOS(E, wrap=wrap_kwargs)

        assert np.allclose(asarray1, asaverage)
        assert np.allclose(asarray2, asaverage)
        assert np.allclose(aslist1, asaverage)
        assert np.allclose(aslist2, asaverage)
        assert np.allclose(asyield1, asaverage)
        assert np.allclose(asyield2, asaverage)
        assert np.allclose(assum, asaverage)
Exemplo n.º 4
0
 def test_class3(self, setup):
     class Test(SuperCellChild):
         def __init__(self, sc):
             self.set_supercell(sc)
         def eigh(self, k, *args, **kwargs):
             return np.arange(3)
         def eig(self, k, *args, **kwargs):
             return np.arange(3) - 1
     bz = MonkhorstPack(Test(setup.s1), [2] * 3)
     # Try the yield method
     bz.asyield()
     for val in bz.eigh():
         assert np.allclose(val, np.arange(3))
     for val in bz.eig():
         assert np.allclose(val, np.arange(3) - 1)
     # Average
     assert np.allclose(bz.asaverage().eigh(), np.arange(3))
    def test_as_simple(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)
        assert len(bz) == 2 ** 3

        # Assert that as* all does the same
        asarray = bz.asarray().eigh()
        aslist = np.array(bz.aslist().eigh())
        asyield = np.array([a for a in bz.asyield().eigh()])
        asaverage = bz.asaverage().eigh()
        assert np.allclose(asarray, aslist)
        assert np.allclose(asarray, asyield)
        # Average needs to be performed
        assert np.allclose((asarray / len(bz)).sum(0), asaverage)