Esempio n. 1
0
def test_figshare_download():

    data_2d = data(dataset="dft_2d")
    data_3d = data(dataset="dft_3d")
    data_ml = data(dataset="cfid_3d")
    data_ff = get_ff_eneleast()
    print("2d", len(data_2d))
    print("3d", len(data_3d))
    print("cfid3d", len(data_ml))
    print("ff", len(data_ff))
    assert (len(data_2d), len(data_3d), len(data_ml), len(data_ff)) == (
        1070,
        36099,
        35984,
        3291,
    )
    w, ef, atoms = get_wann_electron()
    hk = get_hk_tb(w=w)
    w, atoms = get_wann_phonon()
    w = Webpage(jid="JVASP-1002")
    info_mbj = w.get_dft_mbj_dielectric_function()
    info_opt = w.get_dft_semilocal_dielectric_function()
    info_pdos = w.get_dft_phonon_dos()
    info_edos = w.get_dft_electron_dos()
    k = w.list_keys()
Esempio n. 2
0
def test_figshare_download():

    data_2d = data(dataset="dft_2d")
    data_3d = data(dataset="dft_3d")
    data_ml = data(dataset="cfid_3d")
    data_ff = get_ff_eneleast()
    print("2d", len(data_2d))
    print("3d", len(data_3d))
    print("cfid3d", len(data_ml))
    print("ff", len(data_ff))
    assert (len(data_2d), len(data_3d), len(data_ml), len(data_ff)) == (
        1070,
        36099,
        35984,
        3291,
    )
Esempio n. 3
0
def test_figshare_download():

    data_2d = data(dataset="dft_2d")
    # data_3d = data(dataset="dft_3d")
    # data_ml = data(dataset="cfid_3d")
    data_ff = get_ff_eneleast()
    print("2d", len(data_2d))
    # print("3d", len(data_3d))
    # print("cfid3d", len(data_ml))
    print("ff", len(data_ff))
    # assert (len(data_2d), len(data_3d), len(data_ml), len(data_ff)) == (
    #    1070,
    #    36099,
    #    35984,
    #    3291,
    # )
    w, ef, atoms = get_wann_electron()
    hk = get_hk_tb(w=w)
    w, atoms = get_wann_phonon()
    w = Webpage(jid="JVASP-1002")
    info_mbj = w.get_dft_mbj_dielectric_function()
    info_opt = w.get_dft_semilocal_dielectric_function()
    info_pdos = w.get_dft_phonon_dos()
    info_edos = w.get_dft_electron_dos()
    k = w.list_keys()
    # dat = data(dataset="megnet")
    # dat = data(dataset="mp_3d")
    # dat = data(dataset="mp_3d_2020")
    # dat = data(dataset="qm9")
    # dat = data(dataset="aflow1")
    # dat = data(dataset="aflow2")
    # dat = data(dataset="oqmd_3d")
    # dat = data(dataset="twod_matpd")
    # dat = data(dataset="oqmd_3d_no_cfid")
    p, n = get_stm_2d_dataset()
Esempio n. 4
0
def test_dataset():
    d = data("dft_2d")
    x = []
    y = []
    z = []
    for i in d[0:100]:
        if i["formation_energy_peratom"] != "na":
            x.append(i["atoms"])
            y.append(i["formation_energy_peratom"])
            z.append(i["jid"])
    s = StructureDataset(x, y, ids=z)
Esempio n. 5
0
def get_ml_data(
    ml_property="formation_energy_peratom",
    dataset="cfid_3d",
    data_ranges=typical_data_ranges,
):
    """
    Provide arrays/pandas-dataframe as input for ML algorithms.

    Args:

        ml_property: target property to train

        data_ranges: range for filtering data

        dataset: dataset available in jarvis or other array

    Returns:
           X, Y , ids
    """
    import pandas as pd

    if isinstance(dataset, str):
        dataml = data(dataset)
        df = pd.DataFrame(dataml)
    else:
        df = pd.DataFrame(dataset)

    x = []
    y = []
    jid = []
    df2 = df[["desc", "jid", ml_property]].replace("na", np.nan).dropna()
    for ii, i in df2.iterrows():
        if data_ranges is None:
            if (
                len(i["desc"]) == 1557
                and float(i[ml_property]) != float("inf")
                and i[ml_property] != "na"
            ):
                x.append(i["desc"])
                y.append(i[ml_property])
                jid.append(i["jid"])
        else:
            if (
                len(i["desc"]) == 1557
                and float(i[ml_property]) != float("inf")
                and i[ml_property] != "na"
                and float(i[ml_property]) <= data_ranges[ml_property][1]
                and float(i[ml_property]) >= data_ranges[ml_property][0]
            ):
                x.append(i["desc"])
                y.append(i[ml_property])
                jid.append(i["jid"])
    return np.array(x, dtype="float"), np.array(y, dtype="float"), jid
Esempio n. 6
0
def test_ldau():
    d = data('dft_3d')
    for i in d:
        if i['jid'] == 'JVASP-29569':
            atoms = Atoms.from_dict(i['atoms'])
            ld = find_ldau_magmom(atoms=atoms, lsorbit=True)
            ld = find_ldau_magmom(atoms=atoms, lsorbit=False)

        if i['jid'] == 'JVASP-45':
            atoms = Atoms.from_dict(i['atoms'])
            ld = find_ldau_magmom(atoms=atoms, lsorbit=True)
            assert ld['LDAUU'] == '3.0 0'
            ld = find_ldau_magmom(atoms=atoms, lsorbit=False)
Esempio n. 7
0
def test_dataset():
    d = data("dft_2d")
    d = pd.DataFrame(d[:100])

    graphs = []
    for i, row in d.iterrows():
        structure = Atoms.from_dict(row["atoms"])
        g = Graph.atom_dgl_multigraph(
            structure,
            atom_features="atomic_number",
            compute_line_graph=False,
        )
        graphs.append(g)

    s = StructureDataset(d, graphs, "formation_energy_peratom")
    col = s.collate
Esempio n. 8
0
def test_lat():
    box = [[10, 0, 0], [0, 10, 0], [0, 0, 10]]
    lat = Lattice(box)
    td = lat.to_dict()
    fd = Lattice.from_dict(td)
    frac_coords = [[0, 0, 0], [0.5, 0.5, 0.5]]
    cart_coords = [[0, 0, 0], [5, 5, 5]]
    lll = lat._calculate_lll()
    # print ('lll',lll[0][0][0])
    lll_red = lat.get_lll_reduced_lattice()._lat
    # print("lll_educed", lat.get_lll_reduced_lattice()._lat[0][0])
    assert (
        lat.lat_lengths(),
        lat.lat_angles(),
        round(lat.inv_lattice()[0][0], 2),
        [round(i, 2) for i in lat.lat_angles(radians=True)],
        lat.cart_coords(frac_coords)[1][1],
        lat.frac_coords(cart_coords)[1][1],
        lat.volume,
        lat.parameters,
        lll[0][0][0],
        lll_red[0][0],
    ) == (
        [10.0, 10.0, 10.0],
        [90.0, 90.0, 90.0],
        0.1,
        [1.57, 1.57, 1.57],
        5.0,
        0.5,
        1000.0,
        [10.0, 10.0, 10.0, 90.0, 90.0, 90.0],
        10.0,
        10.0,
    )
    d = data('dft_3d')
    for i in d:
        if i['jid'] == 'JVASP-588':
            atoms = Atoms.from_dict(i['atoms'])
            lll = atoms.lattice._calculate_lll()
            assert lll[1][0][0] == -1
Esempio n. 9
0
def test_dataset():
    d = data("dft_2d")
    d = pd.DataFrame(d[:100])

    graphs = []
    for i, row in d.iterrows():
        structure = Atoms.from_dict(row["atoms"])
        g = Graph.atom_dgl_multigraph(
            structure,
            atom_features="atomic_number",
            compute_line_graph=False,
        )
        graphs.append(g)

    s = StructureDataset(
        d, graphs, "formation_energy_peratom", line_graph=True
    )
    col = s.collate
    col1 = s.collate_line_graph
    ix = s[0]
    sz = len(s)
    s_std = s.setup_standardizer([1, 2])
Esempio n. 10
0
def get_twod_defect_energy(vrun="", jid="", atom=""):
    """Get mono 2D defect formation energy with OptB88vdW data."""
    dft2d = data("dft_2d")

    def get_enp_jid(jid=""):
        for i in dft2d:
            if i["jid"] == jid:
                return (i["optb88vdw_total_energy"] /
                        Atoms.from_dict(i["atoms"]).num_atoms)

        # dir='JVASP-667_C_C_c'
        # tmp=dir.split('_')
        # jid=tmp[0]
        # atom=tmp[2]

    strt = vrun.all_structures[-1]
    natoms = strt.num_atoms
    fin_en = vrun.final_energy
    chem_pot = unary_energy(atom)
    bulk_en_pa = get_enp_jid(jid)
    Ef = fin_en - (natoms + 1) * bulk_en_pa + chem_pot
    return Ef
Esempio n. 11
0
)
from jarvis.io.phonopy.inputs import PhonopyInputs
from jarvis.analysis.structure.spacegroup import Spacegroup3D
from jarvis.io.wannier.outputs import WannierHam
import requests, tempfile, zipfile, io
from jarvis.io.vasp.outputs import Vasprun

# from phonopy.interface.vasp import read_vasp
from jarvis.analysis.phonon.force_constants import qpoint, read_fc
from jarvis.io.phonopy.outputs import get_phonon_tb
import matplotlib.pyplot as plt

plt.switch_backend("agg")
from jarvis.db.figshare import data

fls = data("raw_files")
fc_file = os.path.join(os.path.dirname(__file__), "FORCE_CONSTANTS")
pos = os.path.join(os.path.dirname(__file__), "POSCAR")
wtb = os.path.join(os.path.dirname(__file__), "phonopyTB_hr.dat")
totdos = os.path.join(os.path.dirname(__file__), "total_dos.dat")
band = os.path.join(os.path.dirname(__file__), "band.yaml")


def test_fc():
    fc = read_fc(fc_file)
    assert (fc[0][0][0][0]) == 12.960974735
    qp = qpoint(force_constant=fc, qpt=[0, 0, 0])
    assert (qp[0][0][0][0]) == 12.960974735


def test_wann():
Esempio n. 12
0
def upload_sample_data(curate_xml=False):
    """
    Generate and upload XML files.

    Set curate_xml==True to upload all the XML documents.
    """
    d = data("dft_2d")

    count = 0
    for i in d[0:1]:
        filname = str(i["jid"]) + str(".xml")
        if not os.path.exists(filname):
            count = count + 1
            energy = (str(i["optb88vdw_total_energy"]) + str(",") +
                      str(i["formation_energy_peratom"]))
            atoms = Atoms.from_dict(i["atoms"])
            formula = str(atoms.composition.reduced_formula)
            sgp = str(Spacegroup3D(atoms).space_group_symbol)
            name = str(i["jid"])
            print(name)
            # ref = str("")
            func = str("OptB88vdW")
            elem = ""
            species = atoms.elements
            for j in species:
                elem = str(elem) + str(j) + str("-")
            encut = str(i["encut"])
            kpoints = (str(i["kpoints_array"][0]) + str("x") +
                       str(i["kpoints_array"][1]) + str("x") +
                       str(i["kpoints_array"][2]))
            el_tens = "na"
            try:
                el_tens = str(",".join(
                    map(str,
                        np.array(i["elastic_tensor"]).flatten())))
            except Exception:
                pass
            KV = str(i["bulk_modulus_kv"])
            GV = str(i["shear_modulus_gv"])
            op_eg = str(i["optb88vdw_bandgap"])
            mbj_eg = str(i["mbj_bandgap"])
            realx_arr = str(i["epsx"])
            mrealx_arr = str(i["mepsx"])
            realy_arr = str(i["epsy"])
            mrealy_arr = str(i["mepsy"])
            realz_arr = str(i["epsz"])
            mrealz_arr = str(i["mepsz"])
            typ = str("2D")  # 3D
            other = str(
                "Citation: 1) DOI:10.1038/s41598-017-05402-0" +
                ",2) DOI: 10.1038/sdata.2018.82, 3) arXiv:1804.01033v2 ")
            struct = atoms.get_string()
            data_json(
                other=other,
                energy=energy,
                typ=typ,
                formula=formula,
                sgp=sgp,
                name=name,
                func=func,
                elem=elem,
                encut=encut,
                kpoints=kpoints,
                el_tens=el_tens,
                KV=KV,
                GV=GV,
                op_eg=op_eg,
                mbj_eg=mbj_eg,
                realx_arr=realx_arr,
                mrealx_arr=mrealx_arr,
                realy_arr=realy_arr,
                mrealy_arr=mrealy_arr,
                realz_arr=realz_arr,
                mrealz_arr=mrealz_arr,
                struct=struct,
                curate_xml=curate_xml,
            )
Esempio n. 13
0
def test_extra_spgs():
    from jarvis.db.figshare import data

    d = data("dft_3d")
    few_spgs = {
        "JVASP-4663": 119,
        "JVASP-4666": 194,
        "JVASP-588": 160,
        "JVASP-4669": 191,
        "JVASP-4672": 141,
        "JVASP-581": 164,
        "JVASP-4687": 139,
        "JVASP-4693": 62,
        "JVASP-4696": 187,
        "JVASP-4711": 225,
        "JVASP-4714": 2,
        "JVASP-4723": 60,
        "JVASP-32": 167,
        "JVASP-107": 186,
        "JVASP-4756": 63,
        "JVASP-96": 216,
        "JVASP-4334": 123,
        "JVASP-4222": 11,
        "JVASP-4804": 156,
        "JVASP-329": 129,
        "JVASP-4852": 163,
        "JVASP-155": 61,
        "JVASP-4340": 51,
        "JVASP-4343": 15,
        "JVASP-4361": 14,
        "JVASP-137": 72,
        "JVASP-4879": 166,
        "JVASP-4885": 19,
        "JVASP-4894": 31,
        "JVASP-4216": 12,
        "JVASP-4918": 121,
        "JVASP-4948": 25,
        "JVASP-4957": 221,
        "JVASP-4960": 65,
        "JVASP-5059": 189,
        "JVASP-5071": 66,
        "JVASP-5074": 150,
        "JVASP-5086": 74,
        "JVASP-4388": 64,
        "JVASP-4391": 136,
        "JVASP-5155": 127,
        "JVASP-5185": 43,
        "JVASP-5197": 59,
        "JVASP-5212": 29,
        "JVASP-164": 176,
        "JVASP-5224": 137,
        "JVASP-5227": 148,
        "JVASP-4234": 193,
        "JVASP-5257": 7,
        "JVASP-5266": 140,
        "JVASP-4397": 33,
        "JVASP-5317": 8,
        "JVASP-5332": 13,
        "JVASP-5353": 16,
        "JVASP-5371": 4,
        "JVASP-5407": 229,
        "JVASP-5416": 147,
        "JVASP-5509": 52,
        "JVASP-5536": 70,
        "JVASP-5560": 71,
        "JVASP-5680": 28,
        "JVASP-5740": 6,
        "JVASP-5839": 162,
        "JVASP-5863": 79,
        "JVASP-110": 99,
        "JVASP-579": 38,
        "JVASP-4501": 5,
        "JVASP-91": 227,
        "JVASP-41": 154,
        "JVASP-4516": 96,
        "JVASP-4564": 82,
        "JVASP-4645": 130,
        "JVASP-152": 55,
        "JVASP-4792": 88,
        "JVASP-5041": 107,
        "JVASP-5425": 87,
        "JVASP-5464": 115,
        "JVASP-5650": 157,
        "JVASP-4450": 36,
        "JVASP-22520": 152,
        "JVASP-22523": 205,
        "JVASP-11998": 53,
        "JVASP-22528": 58,
        "JVASP-22533": 41,
        "JVASP-12091": 32,
        "JVASP-22541": 215,
        "JVASP-22543": 97,
        "JVASP-22549": 9,
        "JVASP-12103": 138,
        "JVASP-22575": 40,
        "JVASP-22602": 180,
        "JVASP-22611": 182,
        "JVASP-12022": 85,
        "JVASP-22637": 111,
        "JVASP-12139": 10,
        "JVASP-22709": 92,
        "JVASP-12060": 20,
        "JVASP-12064": 1,
        "JVASP-12194": 185,
        "JVASP-13885": 128,
        "JVASP-14096": 56,
        "JVASP-14020": 122,
        "JVASP-13904": 54,
        "JVASP-13783": 135,
        "JVASP-14213": 26,
        "JVASP-14034": 23,
        "JVASP-14158": 113,
        "JVASP-14256": 21,
        "JVASP-32150": 217,
        "JVASP-28392": 224,
        "JVASP-32180": 146,
        "JVASP-32197": 57,
        "JVASP-31813": 67,
        "JVASP-31819": 219,
        "JVASP-29262": 39,
        "JVASP-29281": 102,
        "JVASP-31825": 226,
        "JVASP-29425": 143,
        "JVASP-29441": 42,
        "JVASP-29520": 73,
        "JVASP-29526": 18,
        "JVASP-29555": 149,
        "JVASP-29597": 151,
        "JVASP-29705": 174,
        "JVASP-31921": 199,
        "JVASP-33147": 161,
        "JVASP-33220": 46,
        "JVASP-33344": 114,
        "JVASP-30263": 44,
        "JVASP-33832": 155,
        "JVASP-30458": 69,
        "JVASP-30461": 144,
        "JVASP-30518": 132,
        "JVASP-36540": 198,
        "JVASP-36548": 220,
        "JVASP-36568": 3,
        "JVASP-36573": 145,
        "JVASP-35061": 131,
        "JVASP-35137": 125,
        "JVASP-35222": 204,
        "JVASP-35344": 109,
        "JVASP-42053": 173,
        "JVASP-40216": 91,
        "JVASP-38594": 165,
        "JVASP-37330": 86,
        "JVASP-37573": 84,
        "JVASP-36714": 47,
        "JVASP-36754": 98,
        "JVASP-59313": 230,
        "JVASP-46893": 95,
        "JVASP-46896": 76,
        "JVASP-45779": 30,
        "JVASP-45831": 158,
        "JVASP-46446": 35,
        "JVASP-44393": 159,
        "JVASP-44773": 22,
        "JVASP-47741": 78,
        "JVASP-47811": 181,
        "JVASP-48055": 94,
        "JVASP-48916": 34,
        "JVASP-49907": 190,
        "JVASP-50342": 223,
        "JVASP-50360": 68,
        "JVASP-50431": 37,
        "JVASP-52902": 142,
        "JVASP-52377": 24,
        "JVASP-50791": 214,
        "JVASP-54512": 108,
        "JVASP-56567": 213,
        "JVASP-54867": 126,
        "JVASP-55180": 81,
        "JVASP-57780": 212,
        "JVASP-57807": 118,
        "JVASP-57816": 50,
        "JVASP-57100": 197,
        "JVASP-57138": 116,
        "JVASP-58233": 124,
        "JVASP-59682": 200,
        "JVASP-20180": 206,
        "JVASP-21448": 203,
        "JVASP-40468": 90,
        "JVASP-42914": 17,
        "JVASP-21594": 100,
        "JVASP-21706": 188,
        "JVASP-22783": 218,
        "JVASP-24006": 202,
        "JVASP-30879": 83,
        "JVASP-31186": 49,
        "JVASP-21031": 110,
        "JVASP-21116": 192,
        "JVASP-25245": 134,
        "JVASP-7066": 169,
        "JVASP-13017": 112,
        "JVASP-58953": 105,
        "JVASP-8682": 183,
        "JVASP-9902": 80,
        "JVASP-34882": 208,
        "JVASP-34330": 179,
        "JVASP-34502": 48,
        "JVASP-62982": 178,
    }
    """
 mem=[]
 spgs=[]
 pos=[]
 info=defaultdict()
 for i in d:
     a=Atoms.from_dict(i['atoms'])
     spg=Spacegroup3D(a).space_group_number
     if spg not in spgs:
        spgs.append(spg)
        pos.append(i['jid'])
        info[i['jid']]=spg
        print (info)
        if len(spgs)==230:
            break
 """
    for i, j in few_spgs.items():
        for ii in d:
            if ii["jid"] == i:

                a = Atoms.from_dict(ii["atoms"])
                spg = Spacegroup3D(a).space_group_number
                assert j == spg

                lattice_mat = a.lattice_mat
                kp = Kpoints3D().automatic_length_mesh(lattice_mat=lattice_mat,
                                                       length=40)
                sym = kp.high_symm_path(a)._path
                # print (ii['jid'],a)
                # TODO: following line failing for JVASP-4222
                # x, y = kp.interpolated_points(a)
                break