diff --git a/include/cantera/kinetics/StoichManager.h b/include/cantera/kinetics/StoichManager.h index c54753959..265044061 100644 --- a/include/cantera/kinetics/StoichManager.h +++ b/include/cantera/kinetics/StoichManager.h @@ -827,8 +827,9 @@ public: 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) { diff --git a/test/python/runTests.py b/test/python/runTests.py index fb6bd01f5..3c4dd8b9c 100644 --- a/test/python/runTests.py +++ b/test/python/runTests.py @@ -20,6 +20,7 @@ if __name__ == '__main__': 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')) diff --git a/test/python/testKinetics.py b/test/python/testKinetics.py new file mode 100644 index 000000000..317a66b8e --- /dev/null +++ b/test/python/testKinetics.py @@ -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