Esempio n. 1
0
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()
Esempio n. 2
0
 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)