Source code for mpet.electrode.reactions.Marcus

import numpy as np
import daetools.pyDAE as dae
from mpet.config.constants import reactions_epsilon as eps


[docs] def Marcus(eta, c_sld, c_lyte, k0, E_A, T, act_R=None, act_lyte=None, lmbda=None, alpha=None): if isinstance(c_sld, np.ndarray): c_sld = np.array([ dae.Max(eps, c_sld[i]) for i in range(len(c_sld))]) else: c_sld = dae.Max(eps, c_sld) alpha = 0.5*(1 + (T/lmbda) * np.log(dae.Max(eps, c_lyte)/c_sld)) # We'll assume c_e = 1 (at the standard state for electrons) # ecd = ( k0 * np.exp(-lmbda/(4.*T)) * # ecd = ( k0 * ecd = (k0 * (1-c_sld) * c_lyte**((3-2*alpha)/4.) * c_sld**((1+2*alpha)/4.)) Rate = (ecd * np.exp(-E_A/T + E_A/1) * np.exp(-eta**2/(4.*T*lmbda)) * (np.exp(-alpha*eta/T) - np.exp((1-alpha)*eta/T))) return Rate