In [20]:
from rmgpy.chemkin import loadChemkinFile
from rmgpy.kinetics import KineticsData, ArrheniusEP, ThirdBody, Lindemann, Troe, Chebyshev, PDepArrhenius, MultiArrhenius, MultiPDepArrhenius, getRateCoefficientUnitsFromReactionOrder
from rmgpy.reaction import Reaction
import numpy
In [2]:
path = '/home/mjliu/Documents/ReverseReactions/kinetics.inp'
dict = '/home/mjliu/Documents/ReverseReactions/dictionary.txt'
speciesList, reactionList = loadChemkinFile(path)
In [17]:
reactionList[0].kinetics
Out[17]:
In [4]:
len(reactionList)
Out[4]:
In [5]:
def writePLOG(kinetics):
string = ""
numReactants = 1
if hasattr(kinetics,'highPlimit') and kinetics.highPlimit is not None:
arrhenius = kinetics.highPlimit
string += '{0:<9.3e} {1:<9.3f} {2:<9.3f}'.format(
arrhenius.A.value_si / (arrhenius.T0.value_si ** arrhenius.n.value_si) * 1.0e6 ** (numReactants - 1),
arrhenius.n.value_si,
arrhenius.Ea.value_si / 4184.
)
else:
# Print dummy values that Chemkin parses but ignores
string += '{0:<9.3e} {1:<9.3f} {2:<9.3f}'.format(1, 0, 0)
string += '\n'
for P, arrhenius in zip(kinetics.pressures.value_si, kinetics.arrhenius):
if isinstance(arrhenius, MultiArrhenius):
for arrh in arrhenius.arrhenius:
string += ' PLOG/ {0:<9.3f} {1:<9.3e} {2:<9.3f} {3:<9.3f}/\n'.format(P / 101325.,
arrh.A.value_si / (arrh.T0.value_si ** arrh.n.value_si) * 1.0e6 ** (numReactants - 1),
arrh.n.value_si,
arrh.Ea.value_si / 4184.
)
else:
string += ' PLOG/ {0:<9.3f} {1:<9.3e} {2:<9.3f} {3:<9.3f}/\n'.format(P / 101325.,
arrhenius.A.value_si / (arrhenius.T0.value_si ** arrhenius.n.value_si) * 1.0e6 ** (numReactants - 1),
arrhenius.n.value_si,
arrhenius.Ea.value_si / 4184.
)
return string
In [26]:
def reverseRateOld(reaction):
kunits = getRateCoefficientUnitsFromReactionOrder(len(reaction.products))
kf = reaction.kinetics
if isinstance(kf, PDepArrhenius):
if kf.Tmin is not None and kf.Tmax is not None:
Tlist = 1.0/numpy.linspace(1.0/kf.Tmax.value, 1.0/kf.Tmin.value, 50)
else:
Tlist = 1.0/numpy.arange(0.0005, 0.0034, 0.0001)
Plist = kf.pressures.value_si
K = numpy.zeros((len(Tlist), len(Plist)), numpy.float64)
for Tindex, T in enumerate(Tlist):
for Pindex, P in enumerate(Plist):
K[Tindex, Pindex] = kf.getRateCoefficient(T, P) / reaction.getEquilibriumConstant(T)
kr = PDepArrhenius()
kr.fitToData(Tlist, Plist, K, kunits, kf.arrhenius[0].T0.value)
return kr
In [33]:
string1 = writePLOG(reverseRateOld(reactionList[2]))
In [29]:
def reverseRateNew(reaction):
kunits = getRateCoefficientUnitsFromReactionOrder(len(reaction.products))
kf = reaction.kinetics
if isinstance(kf, PDepArrhenius):
kr = PDepArrhenius()
kr.pressures = kf.pressures
kr.arrhenius = []
rxn = Reaction(reactants = reaction.reactants, products = reaction.products)
for kinetics in kf.arrhenius:
rxn.kinetics = kinetics
kr.arrhenius.append(rxn.generateReverseRateCoefficient())
return kr
In [30]:
string2 = writePLOG(reverseRateNew(reactionList[2]))
In [34]:
print string1
print string2
print string1 == string2
In [35]:
print writePLOG(reverseRateNew(reactionList[0]))
In [ ]: