The current implementation of unimolecular/recombination falloff reactions incorrectly uses the total mixture concentration as the third-body collider and includes third-body species in the stoichiometric concentration products for forward and reverse rates. This leads to incorrect rate calculations, especially in mechanisms where only specific species enhance the reaction.
Reaction Example (Chemkin Format):
H + O2 (+H2O) ⇌ HO2 (+H2O) 2.15E12 0.292 -592.0
LOW / 2.28e+19 -0.977 0.0 /
TROE / 1.0 1.0E-10 1.0E30 1.0E30 /
When this reaction is parsed from the YAML file to C++, the rate expressions become:
Corr = mixture;
qf = Corr * k_f * (sc[H] * sc[O2] * sc[H2O]);
qr = Corr * k_f * exp(-(g_RT[H] + g_RT[O2] - g_RT[HO2])) * refC * (sc[H2O] * sc[HO2]);
❌ Current Implementation Issues
1. Incorrect Third-Body Concentration
The code uses the total mixture concentration ([mixture]) as the falloff collider concentration:
This is incorrect. The reaction above specifies H₂O as the only third-body collider. The effective third-body concentration should be:
Corr = sc[H2O]; // or alpha_H2O * sc[H2O] if efficiencies are specified
- Incorrect Stoichiometry in Rate Expressions
Third-body species like H₂O should not appear in the rate expressions for forward or reverse reactions since they are not consumed or produced in the reaction:
Corr = F * F_troe;
qf = Corr * k_f * (sc[H] * sc[O2] * sc[H2O]); // ❌ Incorrect
qr = Corr * k_f * exp(-(g_RT[H] + g_RT[O2] - g_RT[HO2])) * refC * (sc[H2O] * sc[HO2]); // ❌ Incorrect
The correct rate expressions should be:
Corr = F * F_troe;
qf = Corr * k_f * sc[H] * sc[O2]; // ✅ Correct
qr = Corr * k_f * exp(...) * sc[HO2]; // ✅ Correct
⚠️ Additional Note
If Corr = sc[H2O], and sc[H2O] becomes zero, it may lead to log(0) in the falloff expression. Implementations such as Cantera use safe math practices (e.g., underflow limits, bounds checks) to prevent numerical instability (e.g., log(0) or division by zero).
✅ Suggested Fix
- Replace mixture with the actual participating third-body concentration (e.g., sc[H2O]).
- Ensure rate expressions only include species that are true reactants or products.
- Include safe math for log operations in the reduced pressure/falloff computation when third-body concentration is zero.
The current implementation of unimolecular/recombination falloff reactions incorrectly uses the total mixture concentration as the third-body collider and includes third-body species in the stoichiometric concentration products for forward and reverse rates. This leads to incorrect rate calculations, especially in mechanisms where only specific species enhance the reaction.
Reaction Example (Chemkin Format):
When this reaction is parsed from the YAML file to C++, the rate expressions become:
❌ Current Implementation Issues
1. Incorrect Third-Body Concentration
The code uses the total mixture concentration (
[mixture]) as the falloff collider concentration:This is incorrect. The reaction above specifies H₂O as the only third-body collider. The effective third-body concentration should be:
Corr = sc[H2O]; // or alpha_H2O * sc[H2O] if efficiencies are specifiedThird-body species like H₂O should not appear in the rate expressions for forward or reverse reactions since they are not consumed or produced in the reaction:
The correct rate expressions should be:
If Corr = sc[H2O], and sc[H2O] becomes zero, it may lead to log(0) in the falloff expression. Implementations such as Cantera use safe math practices (e.g., underflow limits, bounds checks) to prevent numerical instability (e.g., log(0) or division by zero).
✅ Suggested Fix