Skip to content

Commit

Permalink
Fixed handling of explicit reaction orders for some reactions
Browse files Browse the repository at this point in the history
For reactions with unity reactant stoichiometric coefficients, explicit values
for the forward reaction order were being ignored while setting up the
StoichManager.

Added a few tests that confirm that these rates are being calculated correctly.
  • Loading branch information
speth committed Aug 17, 2012
1 parent f23c4fa commit 01a9bdc
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 1 deletion.
3 changes: 2 additions & 1 deletion include/cantera/kinetics/StoichManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -827,8 +827,9 @@ class StoichManagerN
m_n[rxn] = k.size();
bool frac = false;
for (size_t n = 0; n < stoich.size(); n++) {
if (stoich[n] != 1.0) {
if (stoich[n] != 1.0 || order[n] != 1.0) {
frac = true;
break;
}
}
if (frac) {
Expand Down
1 change: 1 addition & 0 deletions test/python/runTests.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
loader = unittest.TestLoader()
runner = unittest.TextTestRunner(verbosity=2)
suite = loader.loadTestsFromName('testSolution')
suite = loader.loadTestsFromName('testKinetics')
suite.addTests(loader.loadTestsFromName('testPureFluid'))
suite.addTests(loader.loadTestsFromName('testEquilibrium'))
suite.addTests(loader.loadTestsFromName('testReactors'))
Expand Down
40 changes: 40 additions & 0 deletions test/python/testKinetics.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import utilities
import Cantera as ct

class ExplicitForwardOrderTest(utilities.CanteraTest):
def setUp(self):
self.gas = ct.IdealGasMix('../data/explicit-forward-order.xml')
self.gas.set(T=800, P=101325, X=[0.01, 0.90, 0.02, 0.03, 0.04])

def test_irreversibility(self):
# Reactions are irreversible
Rr = self.gas.revRateConstants()
self.assertEqual(Rr[0], 0.0)
self.assertEqual(Rr[1], 0.0)

def test_rateConstants(self):
# species order: [H, AR, R1A, R1B, P1]

C = self.gas.moleFractions() * self.gas.molarDensity()
Rf = self.gas.fwdRatesOfProgress()
kf = self.gas.fwdRateConstants()
self.assertNear(Rf[0], kf[0] * C[2]**1.5 * C[3]**0.5)
self.assertNear(Rf[1], kf[1] * C[0]**1.0 * C[4]**0.2)

def test_ratio1(self):
rop1 = self.gas.fwdRatesOfProgress()
# Double concentration of H and R1A
self.gas.set(T=800, P=101325, X=[0.02, 0.87, 0.04, 0.03, 0.04])
rop2 = self.gas.fwdRatesOfProgress()
ratio = rop2/rop1
self.assertNear(ratio[0], 2**1.5) # order of R1A is 1.5
self.assertNear(ratio[1], 2**1.0) # order of H is 1.0

def test_ratio2(self):
rop1 = self.gas.fwdRatesOfProgress()
# Double concentration of P1 and R1B
self.gas.set(T=800, P=101325, X=[0.01, 0.83, 0.02, 0.06, 0.08])
rop2 = self.gas.fwdRatesOfProgress()
ratio = rop2/rop1
self.assertNear(ratio[0], 2**0.5) # order of R1B is 0.5
self.assertNear(ratio[1], 2**0.2) # order of P1 is 1.0

0 comments on commit 01a9bdc

Please sign in to comment.