Skip to content

Commit

Permalink
added method and test for changing reference potential for surfaceCha…
Browse files Browse the repository at this point in the history
…rgeTransfer
  • Loading branch information
davidfarinajr committed Jan 23, 2021
1 parent 6632de8 commit 1689be1
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 1 deletion.
2 changes: 2 additions & 0 deletions rmgpy/kinetics/surface.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,8 @@ cdef class SurfaceChargeTransfer(KineticsModel):

cpdef change_t0(self, double T0)

cpdef change_v0(self, double V0)

cpdef fit_to_data(self, np.ndarray Tlist, np.ndarray klist, str kunits, double T0=?, np.ndarray weights=?, bint three_params=?)

cpdef bint is_identical_to(self, KineticsModel other_kinetics) except -2
Expand Down
11 changes: 11 additions & 0 deletions rmgpy/kinetics/surface.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -684,6 +684,17 @@ cdef class SurfaceChargeTransfer(KineticsModel):
self._A.value_si /= (self._T0.value_si / T0) ** self._n.value_si
self._T0.value_si = T0

cpdef change_v0(self, double V0):
"""
Changes the reference potential to `V0` in volts, and adjusts the
activation energy `Ea` accordingly.
"""

if self._ne.value > 0:
self._Ea.value_si = self.get_activation_energy_from_potential(V0, non_negative=False)

self._V0.value_si = V0

cpdef fit_to_data(self, np.ndarray Tlist, np.ndarray klist, str kunits, double T0=1,
np.ndarray weights=None, bint three_params=False):
"""
Expand Down
22 changes: 21 additions & 1 deletion rmgpy/kinetics/surfaceTest.py
Original file line number Diff line number Diff line change
Expand Up @@ -587,7 +587,6 @@ def test_get_activation_energy_from_potential(self):
Ea = self.surfchargerxn_reduction.get_activation_energy_from_potential(V, False)
self.assertAlmostEqual(self.surfchargerxn_oxidation.Ea.value_si, Ea, 6)


def test_get_rate_coefficient(self):
"""
Test that the SurfaceChargeTransfer.to_surface_arrhenius method works
Expand All @@ -612,6 +611,27 @@ def test_get_rate_coefficient(self):
self.assertAlmostEqual(k_oxidation,self.surfchargerxn_oxidation.get_rate_coefficient(T,V))
self.assertAlmostEqual(k_reduction,self.surfchargerxn_reduction.get_rate_coefficient(T,V))

def test_change_v0(self):

V0 = self.surfchargerxn_oxidation.V0.value_si
ne = self.surfchargerxn_oxidation.ne.value
for V in (V0 + 1, V0, V0 - 1, V0):
delta = V - self.surfchargerxn_oxidation.V0.value_si
V_i = self.surfchargerxn_oxidation.V0.value_si
Ea_i = self.surfchargerxn_oxidation.Ea.value_si
self.surfchargerxn_oxidation.change_v0(V)
self.assertEqual(self.surfchargerxn_oxidation.V0.value_si, V_i + delta)
self.assertAlmostEqual(self.surfchargerxn_oxidation.Ea.value_si, Ea_i - (ne * constants.F * delta), 6)

V0 = self.surfchargerxn_reduction.V0.value_si
ne = self.surfchargerxn_reduction.ne.value
for V in (V0 + 1, V0, V0 - 1, V0):
delta = V - self.surfchargerxn_reduction.V0.value_si
V_i = self.surfchargerxn_reduction.V0.value_si
Ea_i = self.surfchargerxn_reduction.Ea.value_si
self.surfchargerxn_reduction.change_v0(V)
self.assertEqual(self.surfchargerxn_reduction.V0.value_si, V_i + delta)
self.assertAlmostEqual(self.surfchargerxn_reduction.Ea.value_si, Ea_i, 6)

if __name__ == '__main__':
unittest.main(testRunner=unittest.TextTestRunner(verbosity=2))

0 comments on commit 1689be1

Please sign in to comment.