def test_singlepoint_dft_calc():
    import numpy as np
    from ase.calculators.singlepoint import (SinglePointDFTCalculator,
                                             arrays_to_kpoints)
    from ase.build import bulk

    rng = np.random.RandomState(17)
    nspins, nkpts, nbands = shape = 2, 4, 5
    eps = 2 * rng.rand(*shape)
    occ = rng.rand(*shape)
    weights = rng.rand(nkpts)

    kpts = arrays_to_kpoints(eps, occ, weights)

    atoms = bulk('Au')

    calc = SinglePointDFTCalculator(atoms)

    calc.kpts = kpts

    assert calc.get_number_of_spins() == nspins
    assert calc.get_spin_polarized()
    assert np.allclose(calc.get_k_point_weights(), weights)

    for s in range(nspins):
        for k in range(nkpts):
            eps1 = calc.get_eigenvalues(kpt=k, spin=s)
            occ1 = calc.get_occupation_numbers(kpt=k, spin=s)
            assert np.allclose(eps1, eps[s, k])
            assert np.allclose(occ1, occ[s, k])
Esempio n. 2
0
rng = np.random.RandomState(17)
nspins, nkpts, nbands = shape = 2, 4, 5
eps = 2 * rng.rand(*shape)
occ = rng.rand(*shape)
weights = rng.rand(nkpts)

kpts = arrays_to_kpoints(eps, occ, weights)



atoms = bulk('Au')

calc = SinglePointDFTCalculator(atoms)

calc.kpts = kpts

assert calc.get_number_of_spins() == nspins
assert calc.get_spin_polarized()
assert np.allclose(calc.get_k_point_weights(), weights)

for s in range(nspins):
    for k in range(nkpts):
        eps1 = calc.get_eigenvalues(kpt=k, spin=s)
        occ1 = calc.get_occupation_numbers(kpt=k, spin=s)
        assert np.allclose(eps1, eps[s, k])
        assert np.allclose(occ1, occ[s, k])


# XXX Should check more stuff.