示例#1
0
    def test_read_write_csv(self):
        Zn_solids = ["Zn", "ZnO", "ZnO2"]
        sol_g = [0.0, -3.338, -1.315]
        Zn_ions = ["Zn[2+]", "ZnOH[+]", "HZnO2[-]", "ZnO2[2-]", "ZnO"]
        liq_g = [-1.527, -3.415, -4.812, -4.036, -2.921]
        liq_conc = [1e-6, 1e-6, 1e-6, 1e-6, 1e-6]
        solid_entry = list()
        for sol in Zn_solids:
            comp = Composition(sol)
            delg = sol_g[Zn_solids.index(sol)]
            solid_entry.append(PourbaixEntry(PDEntry(comp, delg)))
        ion_entry = list()
        for ion in Zn_ions:
            comp_ion = Ion.from_formula(ion)
            delg = liq_g[Zn_ions.index(ion)]
            conc = liq_conc[Zn_ions.index(ion)]
            PoE = PourbaixEntry(IonEntry(comp_ion, delg))
            PoE.set_conc(conc)
            ion_entry.append(PoE)
        entries = solid_entry + ion_entry
        PourbaixEntryIO.to_csv("pourbaix_test_entries.csv", entries)

        (elements, entries) = PourbaixEntryIO.from_csv(
            "pourbaix_test_entries.csv")
        self.assertEqual(elements,
                         [Element('Zn'), Element('H'), Element('O')],
                         "Wrong elements!")
        self.assertEqual(len(entries), 8, "Wrong number of entries!")
        os.remove("pourbaix_test_entries.csv")
示例#2
0
class TestPourbaixEntry(unittest.TestCase):
    """
    Test all functions using a fictitious entry
    """
    def setUp(self):
        comp = Composition("Mn2O3")
        self.solentry = PDEntry(comp, 49)
        ion = Ion.from_formula("MnO4-")
        self.ionentry = IonEntry(ion, 25)
        self.PxIon = PourbaixEntry(self.ionentry)
        self.PxSol = PourbaixEntry(self.solentry)
        self.PxIon.set_conc(1e-4)

    def test_pourbaix_entry(self):
        self.assertEquals(self.PxIon.entry.energy, 25, "Wrong Energy!")
        self.assertEquals(self.PxIon.entry.name,\
                          "MnO4[-]", "Wrong Entry!")
        self.assertEquals(self.PxSol.entry.energy, 49, "Wrong Energy!")
        self.assertEquals(self.PxSol.entry.name,\
                           "Mn2O3", "Wrong Entry!")
        self.assertEquals(self.PxIon.g0, 25, "Wrong Energy!")
        self.assertEquals(self.PxSol.g0, 49, "Wrong Energy!")
        self.assertEquals(self.PxIon.conc, 1e-4, "Wrong concentration!")

    def test_calc_coeff_terms(self):
        self.assertEquals(self.PxIon.npH, -8, "Wrong npH!")
        self.assertEquals(self.PxIon.nPhi, -7, "Wrong nPhi!")
        self.assertEquals(self.PxIon.nH2O, 4, "Wrong nH2O!")

        self.assertEquals(self.PxSol.npH, -6, "Wrong npH!")
        self.assertEquals(self.PxSol.nPhi, -6, "Wrong nPhi!")
        self.assertEquals(self.PxSol.nH2O, 3, "Wrong nH2O!")

    def test_to_from_dict(self):
        d = self.PxIon.to_dict
        ion_entry = self.PxIon.from_dict(d)
        self.assertEquals(ion_entry.entry.name, "MnO4[-]", "Wrong Entry!")