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)
# !/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 },
# | - 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))