Skip to content

Bug Report: Incorrect Handling of Third-Body Concentration and Stoichiometry in Falloff Reaction Implementation #579

Description

@bssoriano

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:

Corr = mixture;

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

  1. 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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions