def test_pourbaix(): """Test ZnO system from docs.""" refs = solvated('Zn') print(refs) refs += [('Zn', 0.0), ('ZnO', -3.323), ('ZnO2(aq)', -2.921)] pb = Pourbaix(refs, formula='ZnO') _, e = pb.decompose(-1.0, 7.0) assert e == pytest.approx(-3.625, abs=0.001) U = np.linspace(-2, 2, 3) pH = np.linspace(6, 16, 11) d, names, text = pb.diagram(U, pH, plot=False) print(d, names, text) assert d.shape == (3, 11) assert d.ptp() == 6 assert names == ['Zn', 'ZnO2(aq)', 'Zn++(aq)', 'HZnO2-(aq)', 'ZnOH+(aq)', 'ZnO', 'ZnO2--(aq)']
# creates: zno.png import numpy as np import matplotlib.pyplot as plt from ase.phasediagram import Pourbaix, solvated refs = solvated('Zn') print(refs) refs += [('Zn', 0.0), ('ZnO', -3.323), ('ZnO2(aq)', -2.921)] pb = Pourbaix(refs, Zn=1, O=1) print(pb.decompose(1.0, 9.0)) U = np.linspace(-2, 2, 200) pH = np.linspace(-2, 16, 300) d, names, text = pb.diagram(U, pH, plot=True, show=False) print(names, text) assert len(names) == 7 plt.savefig('zno.png')
refs = [#({'O': 1}, 0.0), ('O4Ti2', -17.511826939900217), ('Sr4O4', -20.474907588620653), ('Sr4', 0.0), ('Ti2', 0.0)] else: refs = [({'O': 1}, 0.0), ({'Zn': 1}, 0.0), ({'Zn': 2, 'O': 2}, -5.33991412178575), ({'Zn': 4, 'O': 8}, -7.594)] pb = Pourbaix(refs + solvated('SrTi'), Sr=1, Ti=1, O=3) #pb = Pourbaix(refs, Zn=1, O=1) print(pb.decompose(0, 9)) pH = np.linspace(-1, 15, 17) if 0: d, names = pb.diagram([0], pH) print(d) print('\n'.join(names)) U = np.linspace(-2, 2, 5) if 0: d, names = pb.diagram(U, [0]) for i, u in zip(d, U): print(u, names[i]) if 1: U = np.linspace(-3, 3, 200) pH = np.linspace(-1, 15, 300) d, names = pb.diagram(U, pH, plot=True)
# creates: zno.png from ase.phasediagram import Pourbaix, solvated refs = solvated('Zn') print(refs) refs += [('Zn', 0.0), ('ZnO', -3.323), ('ZnO2(aq)', -2.921)] pb = Pourbaix(refs, Zn=1, O=1) print(pb.decompose(1.0, 9.0)) import numpy as np U = np.linspace(-2, 2, 200) pH = np.linspace(-2, 16, 300) d, names, text = pb.diagram(U, pH, plot=True) import matplotlib.pyplot as plt plt.savefig('zno.png')
# creates: SrTiO3_pourbaix.png import numpy as np import ase.db from ase.phasediagram import Pourbaix, solvated con = ase.db.connect('cubic_perovskites.db') refs = [] for row in con.select('reference'): refs.append((row.formula, row.standard_energy)) # Add other solid/dissolved phases not included before: refs += [('Ti6O', -5.443), ('Ti2O3', -13.907), ('Ti2O', -5.164), ('TiO', -4.838), ('SrO2', -5.356), ('Ti3O', -5.346), ('Ti3O5', -22.917), ('Sr4Ti3O10', -50.756), ('SrTi11O20', -93.313)] # Extract the dissolved phases: refs += solvated('SrTi') pb = Pourbaix(refs, Sr=1, Ti=1, O=3) U = np.linspace(-2, 2, 200) pH = np.linspace(-2, 15, 300) d, names, text = pb.diagram(U, pH, plot=True, show=False) import matplotlib.pyplot as plt plt.savefig('SrTiO3_pourbaix.png')
refs = [({ 'O': 1 }, 0.0), ({ 'Zn': 1 }, 0.0), ({ 'Zn': 2, 'O': 2 }, -5.33991412178575), ({ 'Zn': 4, 'O': 8 }, -7.594)] pb = Pourbaix(refs + solvated('SrTi'), Sr=1, Ti=1, O=3) #pb = Pourbaix(refs, Zn=1, O=1) print(pb.decompose(0, 9)) pH = np.linspace(-1, 15, 17) if 0: d, names = pb.diagram([0], pH) print(d) print('\n'.join(names)) U = np.linspace(-2, 2, 5) if 0: d, names = pb.diagram(U, [0]) for i, u in zip(d, U): print(u, names[i]) if 1: U = np.linspace(-3, 3, 200) pH = np.linspace(-1, 15, 300) d, names = pb.diagram(U, pH, plot=True)