Disparity in forward rate constant for a Troe falloff reaction

120 views
Skip to first unread message

Jenzen Ho

unread,
Feb 25, 2019, 11:47:30 PM2/25/19
to Cantera Users' Group
Hi,

I am using Cantera 2.4.0 and am trying to write a kinetics solver. During verification, I noticed that reaction 18 (a Troe falloff reaction with third bodies) in particular in Aramco 1.3 C4 version (.cti file attached) was giving me a different forward rate constant than my code.

Using the code at the bottom of this post to extract the forward rate constant of reaction 18, I get different values for the calculated vs what Cantera was outputting.

kf_cantera =  92004.86402075388
kf_calc =  113473.33578324724

However, for other similar Troe falloff reactions it seems to give correct values (note that this script doesn't work for single third bodies or non-Troe falloffs). For example, changing it to rxn = 8 gives:
kf_cantera =  18219679.603242602
kf_calc =  18219679.60324262

I'm a little bit as a loss as to what the cause of the discrepancy is and there is every possibility that my script to calculate kf is erroneous. Any help would be appreciated, thank you. 

The code to reproduce the error:
import cantera as ct
import math

gas = ct.Solution('AramcoMech_1.3_C4.cti')
rxn = 18

T = 1500
gas.set_equivalence_ratio(1,{'CH4':1},{'O2':1,'N2':3.76})
gas.TP = T,ct.one_atm

# Get the forward rate constant from Cantera
kf_cantera = gas.forward_rate_constants[rxn]

# Calculate it ourselves - note this quick script doesn't work for Simple falloff 
# or falloff with only a single third body
k_0 = (gas.reaction(rxn).low_rate.pre_exponential_factor * 
       T**(gas.reaction(rxn).low_rate.temperature_exponent) *
       math.exp(-gas.reaction(rxn).low_rate.activation_energy/(8314*T)))

k_inf = (gas.reaction(rxn).high_rate.pre_exponential_factor * 
       T**(gas.reaction(rxn).high_rate.temperature_exponent) *
       math.exp(-gas.reaction(rxn).high_rate.activation_energy/(8314*T)))

param = gas.reaction(rxn).falloff.parameters

FC = (1-param[0])*math.exp(-T/param[1]) + param[0]*math.exp(-T/param[2]) + math.exp(-param[3]/T)

M = sum(gas.concentrations)
for species,value in gas.reaction(rxn).efficiencies.items():
    M = M + (float(value)-1)*gas.concentrations[gas.species_index(species)]

Pr = k_0*M/k_inf
C = -0.4 - 0.67*math.log10(FC)
N = 0.75 - 1.27*math.log10(FC)
f1 = (math.log10(Pr)+C)/(N-0.14*(math.log10(Pr)+C))
F = 10**(math.log10(FC)/(1+f1**2))

kf_calc = k_inf*(Pr/(1+Pr))*F

print(kf_cantera)
print(kf_calc)


AramcoMech_1.3_C4.cti

Ray Speth

unread,
Feb 26, 2019, 10:49:29 AM2/26/19
to Cantera Users' Group

Hi,

The issue is with how reactions with 3 rather than 4 coefficients for the Troe form are handled. Cantera uses the same functions for both versions, and uses 0 as the default for the 4th coefficient. However, the use of 0 as the 4th coefficient is also handled specially, and used to indicate that the entire term is set to 0. So, in your code, you would want to write something more like:

FC = (1-param[0])*math.exp(-T/param[1]) + param[0]*math.exp(-T/param[2])
if param[3]:
    FC += math.exp(-param[3]/T)

Regards,
Ray

Jenzen Ho

unread,
Feb 26, 2019, 7:59:17 PM2/26/19
to Cantera Users' Group
Hi Ray,

Thank you for that, I had misunderstood what happens when the parameters are zero and will fix it.
Reply all
Reply to author
Forward
0 new messages