File: test_electronic_structure.py

package info (click to toggle)
python-emmet-core 0.84.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 77,220 kB
  • sloc: python: 16,355; makefile: 30
file content (98 lines) | stat: -rw-r--r-- 3,117 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import pytest
from monty.serialization import loadfn

from emmet.core.electronic_structure import ElectronicStructureDoc


@pytest.fixture(scope="session")
def structure(test_dir):
    """
    Fe (mp-13) structure with correct magmoms
    """
    structure = loadfn(test_dir / "electronic_structure/Fe_structure.json")
    return structure


@pytest.fixture(scope="session")
def bandstructure(test_dir):
    """
    Fe (mp-13) line-mode band structure
    """
    bs = loadfn(test_dir / "electronic_structure/Fe_bs.json")
    return bs


@pytest.fixture(scope="session")
def dos(test_dir):
    """
    Fe (mp-13) dos
    """
    dos = loadfn(test_dir / "electronic_structure/Fe_dos.json")
    return dos


def test_from_bsdos_1(bandstructure, dos, structure):
    pytest.importorskip("seekpath") # pymatgen/symmetry/kpath.py needs SeeK-path Hinuma et al. (2015)
    es_doc = ElectronicStructureDoc.from_bsdos(
        material_id="mp-13",
        dos={"mp-1671247": dos},
        is_gap_direct=False,
        is_metal=True,
        deprecated=False,
        setyawan_curtarolo={"mp-1056141": bandstructure},
        structures={"mp-1671247": structure, "mp-1056141": structure},
    )

    assert str(es_doc.material_id) == "mp-13"
    assert es_doc.band_gap == 0.0
    assert es_doc.cbm is None
    assert es_doc.vbm is None
    assert es_doc.efermi == 5.18804178
    assert es_doc.is_gap_direct is False
    assert es_doc.is_metal is True
    assert str(es_doc.magnetic_ordering) == "Ordering.FM"

    assert str(es_doc.bandstructure.setyawan_curtarolo.task_id) == "mp-1056141"
    assert es_doc.bandstructure.setyawan_curtarolo.band_gap == 0.0
    assert es_doc.bandstructure.setyawan_curtarolo.efermi == 5.18804178
    assert es_doc.bandstructure.setyawan_curtarolo.nbands == 96.0


@pytest.fixture
def bandstructure_fs(test_dir):
    bs = loadfn(test_dir / "electronic_structure/es_bs_objs.json.gz")
    return bs


@pytest.fixture
def dos_fs(test_dir):
    dos = loadfn(test_dir / "electronic_structure/es_dos_objs.json.gz")
    return dos

def test_from_bsdos_2(bandstructure_fs, dos_fs):
    pytest.importorskip("seekpath") # pymatgen/symmetry/kpath.py needs SeeK-path Hinuma et al. (2015)
    dos = dos_fs[0]["data"]
    bs = bandstructure_fs[0]["data"]

    es_doc = ElectronicStructureDoc.from_bsdos(
        material_id="mp-25375",
        dos={"mp-823888": dos},
        is_gap_direct=False,
        is_metal=True,
        deprecated=False,
        setyawan_curtarolo={"mp-1612487": bs},
    )

    assert str(es_doc.material_id) == "mp-25375"
    assert es_doc.band_gap == 0.0
    assert es_doc.cbm == 2.7102
    assert es_doc.vbm == 2.9396
    assert es_doc.efermi == 2.75448867
    assert es_doc.is_gap_direct is False
    assert es_doc.is_metal is True
    assert str(es_doc.magnetic_ordering) == "Ordering.NM"

    assert str(es_doc.bandstructure.setyawan_curtarolo.task_id) == "mp-1612487"
    assert es_doc.bandstructure.setyawan_curtarolo.band_gap == 1.9916
    assert es_doc.bandstructure.setyawan_curtarolo.efermi == 2.49084067
    assert es_doc.bandstructure.setyawan_curtarolo.nbands == 64.0