def generateKineticsModel(reaction, tunneling='', plot=False): logging.info('Calculating rate coefficient for {0}...'.format(reaction)) if len(reaction.reactants) == 1: kunits = 's^-1' elif len(reaction.reactants) == 2: kunits = 'm^3/(mol*s)' elif len(reaction.reactants) == 3: kunits = 'm^6/(mol^2*s)' else: kunits = '' Tlist = 1000.0/numpy.arange(0.4, 3.35, 0.05) klist = reaction.calculateTSTRateCoefficients(Tlist, tunneling) arrhenius = Arrhenius().fitToData(Tlist, klist, kunits) klist2 = arrhenius.getRateCoefficients(Tlist) reaction.kinetics = arrhenius if plot: logging.info('Plotting kinetics model for {0}...'.format(reaction)) import pylab pylab.semilogy(1000.0 / Tlist, klist * reaction.degeneracy, 'ok') pylab.semilogy(1000.0 / Tlist, klist2 * reaction.degeneracy, '-k') pylab.xlabel('1000 / Temperature (1000/K)') pylab.ylabel('Rate coefficient (SI units)') pylab.show()
def testTSTCalculation(self): """ A test of the transition state theory k(T) calculation function, using the reaction H + C2H4 -> C2H5. """ Tlist = 1000.0/numpy.arange(0.4, 3.35, 0.05) klist = self.reaction.calculateTSTRateCoefficients(Tlist, tunneling='') arrhenius = Arrhenius().fitToData(Tlist, klist, kunits='') klist2 = arrhenius.getRateCoefficients(Tlist) # Check that the correct Arrhenius parameters are returned self.assertAlmostEqual(arrhenius.A.value/1.07506e+07, 1.0, 3) self.assertAlmostEqual(arrhenius.n.value/1.47803, 1.0, 3) self.assertAlmostEqual(arrhenius.Ea.value/10194., 1.0, 3) # Check that the fit is satisfactory for i in range(len(Tlist)): self.assertTrue(abs(1 - klist2[i] / klist[i]) < 0.01)