Exemple #1
0
    def test_mpr_pipeline(self):
        from pymatgen import MPRester
        mpr = MPRester()
        data = mpr.get_pourbaix_entries(["Zn"])
        pbx = PourbaixDiagram(data, filter_solids=True, conc_dict={"Zn": 1e-8})
        pbx.find_stable_entry(10, 0)

        data = mpr.get_pourbaix_entries(["Ag", "Te"])
        pbx = PourbaixDiagram(data,
                              filter_solids=True,
                              conc_dict={
                                  "Ag": 1e-8,
                                  "Te": 1e-8
                              })
        self.assertEqual(len(pbx.stable_entries), 30)
        test_entry = pbx.find_stable_entry(8, 2)
        self.assertAlmostEqual(test_entry.energy, 2.3936747835000016, 3)

        # Test custom ions
        entries = mpr.get_pourbaix_entries(["Sn", "C", "Na"])
        ion = IonEntry(Ion.from_formula("NaO28H80Sn12C24+"), -161.676)
        custom_ion_entry = PourbaixEntry(ion, entry_id='my_ion')
        pbx = PourbaixDiagram(entries + [custom_ion_entry],
                              filter_solids=True,
                              comp_dict={
                                  "Na": 1,
                                  "Sn": 12,
                                  "C": 24
                              })
        self.assertAlmostEqual(
            pbx.get_decomposition_energy(custom_ion_entry, 5, 2),
            8.31202738629504, 2)
 def test_heavy(self):
     from pymatgen import MPRester
     mpr = MPRester()
     entries = mpr.get_pourbaix_entries(["Li", "Mg", "Sn", "Pd"])
     pbx = PourbaixDiagram(entries, nproc=4, filter_solids=False)
     entries = mpr.get_pourbaix_entries(["Ba", "Ca", "V", "Cu", "F"])
     pbx = PourbaixDiagram(entries, nproc=4, filter_solids=False)
     entries = mpr.get_pourbaix_entries(["Ba", "Ca", "V", "Cu", "F", "Fe"])
     pbx = PourbaixDiagram(entries, nproc=4, filter_solids=False)
     entries = mpr.get_pourbaix_entries(["Na", "Ca", "Nd", "Y", "Ho", "F"])
     pbx = PourbaixDiagram(entries, nproc=4, filter_solids=False)
    def test_mpr_pipeline(self):
        from pymatgen import MPRester
        mpr = MPRester()
        data = mpr.get_pourbaix_entries(["Zn"])
        pbx = PourbaixDiagram(data, filter_solids=True, conc_dict={"Zn": 1e-8})
        pbx.find_stable_entry(10, 0)

        data = mpr.get_pourbaix_entries(["Ag", "Te"])
        pbx = PourbaixDiagram(data,
                              filter_solids=True,
                              conc_dict={
                                  "Ag": 1e-8,
                                  "Te": 1e-8
                              })
        self.assertEqual(len(pbx.stable_entries), 30)
        test_entry = pbx.find_stable_entry(8, 2)
        self.assertAlmostEqual(test_entry.energy, 2.3894017960000009, 1)

        # Test custom ions
        entries = mpr.get_pourbaix_entries(["Sn", "C", "Na"])
        ion = IonEntry(Ion.from_formula("NaO28H80Sn12C24+"), -161.676)
        custom_ion_entry = PourbaixEntry(ion, entry_id='my_ion')
        pbx = PourbaixDiagram(entries + [custom_ion_entry],
                              filter_solids=True,
                              comp_dict={
                                  "Na": 1,
                                  "Sn": 12,
                                  "C": 24
                              })
        self.assertAlmostEqual(
            pbx.get_decomposition_energy(custom_ion_entry, 5, 2), 2.1209002582,
            1)

        # Test against ion sets with multiple equivalent ions (Bi-V regression)
        entries = mpr.get_pourbaix_entries(["Bi", "V"])
        pbx = PourbaixDiagram(entries,
                              filter_solids=True,
                              conc_dict={
                                  "Bi": 1e-8,
                                  "V": 1e-8
                              })
        self.assertTrue(
            all([
                'Bi' in entry.composition and 'V' in entry.composition
                for entry in pbx.all_entries
            ]))
    def test_mpr_pipeline(self):
        from pymatgen import MPRester
        mpr = MPRester()
        data = mpr.get_pourbaix_entries(["Zn"])
        pbx = PourbaixDiagram(data, filter_solids=True, conc_dict={"Zn": 1e-8})
        pbx.find_stable_entry(10, 0)

        data = mpr.get_pourbaix_entries(["Ag", "Te"])
        pbx = PourbaixDiagram(data, filter_solids=True,
                              conc_dict={"Ag": 1e-8, "Te": 1e-8})
        self.assertEqual(len(pbx.stable_entries), 30)
        test_entry = pbx.find_stable_entry(8, 2)
        self.assertAlmostEqual(test_entry.energy, 2.393900378500001)

        # Test custom ions
        entries = mpr.get_pourbaix_entries(["Sn", "C", "Na"])
        ion = IonEntry(Ion.from_formula("NaO28H80Sn12C24+"), -161.676)
        custom_ion_entry = PourbaixEntry(ion, entry_id='my_ion')
        pbx = PourbaixDiagram(entries + [custom_ion_entry], filter_solids=True,
                              comp_dict={"Na": 1, "Sn": 12, "C": 24})
        self.assertAlmostEqual(pbx.get_decomposition_energy(custom_ion_entry, 5, 2),
                               8.31082110278154)
# -*- coding: utf-8 -*-
"""
Created on Wed Sep 19 20:21:39 2018

@author: Jeran
"""

from pymatgen import MPRester
from pymatgen.analysis.pourbaix_diagram import PourbaixDiagram, PourbaixPlotter

mpr = MPRester("6ycZ7v9nGu4TsKlA")

# Get all pourbaix entries corresponding to the Ti-Ni-O-H chemical system.
entries = mpr.get_pourbaix_entries(["Ni", "Ti"])

# Construct the PourbaixDiagram object
pbx = PourbaixDiagram(entries, comp_dict={"Ni": 0.5, "Ti": 0.5},
                      conc_dict={"Ni": 1e-8, "Ti": 1e-8}, filter_solids=False)

# Get an entry stability as a function of pH and V
#for e in entries:
#    print(e)
    
entry = [e for e in entries if e.entry_id == 'ion-8'][0] #ion-8 is ti++, mp-10257 is Ni(s)


plotter = PourbaixPlotter(pbx)

bivo4_entry = [entry for entry in entries if entry.entry_id=="ion-8"][0]
plt = plotter.plot_entry_stability(bivo4_entry)
Exemple #6
0
# !/usr/bin/env python
# -*- coding:utf-8 -*-
# author:春梅
# Import necessary tools from pymatgen
from pymatgen import MPRester
from pymatgen.analysis.pourbaix_diagram import PourbaixDiagram, PourbaixPlotter
# %matplotlib inline
# Initialize the MP Rester
mpr = MPRester("hvSDrzMafUtXE0JQ")  ##将API 秘钥输入适配器中,并且初始化适配器,需要自己申请。
# Get all pourbaix entries corresponding to the Cu-O-H chemical system.
entries = mpr.get_pourbaix_entries(["Cu"])
# Construct the PourbaixDiagram object
pbx = PourbaixDiagram(entries)
# Get an entry stability as a function of pH and V
entry = [e for e in entries if e.entry_id == 'mp-1692'][0]
print(
    "CuO's potential energy per atom relative to the most",
    "stable decomposition product is {:0.2f} eV/atom".format(
        pbx.get_decomposition_energy(entry, pH=7, V=-0.2)))
plotter = PourbaixPlotter(pbx)
plotter.get_pourbaix_plot().show()
plt = plotter.plot_entry_stability(entry)
plt.show()
# Get all pourbaix entries corresponding to the Fe-O-H chemical system.
entries = mpr.get_pourbaix_entries(["Bi", "V"])
# Construct the PourbaixDiagram object
pbx = PourbaixDiagram(entries,
                      comp_dict={
                          "Bi": 0.5,
                          "V": 0.5
                      },
Exemple #7
0
# | - Script Inputs
#This initializes the REST adaptor. Put your own API key in.

path_i = os.path.join(os.environ["PROJ_irox"], "config", "config.yml")
with open(path_i) as file:
    config_dict = yaml.load(file, Loader=yaml.FullLoader)

api_key = config_dict["materials_project"]["api_key"]

mpr = MPRester(api_key)  # Raul
#__|
# -

entries = mpr.get_pourbaix_entries(
    [
        "Ir",
        ]
    )

entry = entries[0]

entry.uncorrected_energy
# entry

# Pourbaix Entry : Ir1 O4 with energy = 7.4405, npH = -8.0, nPhi = -7.0, nH2O = 4.0, entry_id = None


assert False


# + jupyter={}
with open('results/pbx_analysis.log', 'w') as f:

    for idx in range(num_ini, num_fin):

        formula = df_entries['formula'][idx]
        mpid = df_entries['mp_id'][idx]

        print('%03d_%s' % (idx + 1.0, formula))
        f.writelines('%03d_%s\n' % (idx + 1.0, formula))

        try:
            struc = mpr.get_structure_by_material_id(mpid)
            elements = [str(atom) for atom in struc.species[:2]]

            entries = mpr.get_pourbaix_entries(elements)
            entry_ids = [e for e in entries if e.entry_id == mpid]
            if len(entry_ids) == 1:
                pbx = PourbaixDiagram(entries)
                plotter = PourbaixPlotter(pbx)
                entry = entry_ids[0]
                plt = plotter.plot_entry_stability(entry)
                plt.savefig('results/plots/pourbaix/%03d_%s.png' %
                            (idx + 1.0, formula),
                            dpi=300)
            elif len(entry_ids) > 1:
                f.writelines('%03d_%s: number of entry > 1 \n' %
                             (idx + 1.0, formula))
        except:
            f.writelines('%03d_%s - Error: loading pourbaix entry from MP!\n' %
                         (idx + 1.0, formula))