cantera/test/python/testEquilibrium.py

92 lines
3.2 KiB
Python

from __future__ import division
import unittest
import numpy as np
import Cantera as ct
class EquilTestCases(object):
def __init__(self, solver):
self.solver = solver
"""
Test the ChemEquil equilibrium solver
"""
def check(self, gas, **moles):
nTotal = sum(moles.values())
for name,X in moles.iteritems():
self.assertAlmostEqual(gas.moleFraction(name), X/nTotal)
def test_equil_complete_stoichiometric(self):
"""
Equilibrium should correspond to complete combustion
"""
gas = ct.importPhase('equilibrium.cti', 'complete')
gas.set(X='CH4:1.0, O2:2.0', T=298, P=100000)
gas.equilibrate('TP', self.solver)
self.check(gas, CH4=0, O2=0, H2O=2, CO2=1)
def test_equil_complete_lean(self):
"""
Equilibrium should correspond to complete combustion (with excess O2)
CH4 + 3 O2 -> CO2 + 2 H2O + O2
"""
gas = ct.importPhase('equilibrium.cti', 'complete')
gas.set(X='CH4:1.0, O2:3.0', T=298, P=100000)
gas.equilibrate('TP', self.solver)
self.check(gas, CH4=0, O2=1, H2O=2, CO2=1)
def test_equil_incomplete_stoichiometric(self):
gas = ct.importPhase('equilibrium.cti', 'incomplete')
gas.set(X='CH4:1.0, O2:2.0', T=301, P=100000)
gas.equilibrate('TP', self.solver)
self.check(gas, CH4=0, O2=0, H2O=2, CO2=1)
def test_equil_incomplete_lean(self):
gas = ct.importPhase('equilibrium.cti', 'incomplete')
gas.set(X='CH4:1.0, O2:3.0', T=301, P=100000)
gas.equilibrate('TP', self.solver)
self.check(gas, CH4=0, O2=1, H2O=2, CO2=1)
def test_equil_gri_stoichiometric(self):
gas = ct.importPhase('gri30.xml')
gas.set(X='CH4:1.0, O2:2.0', T=301, P=100000)
gas.equilibrate('TP', self.solver)
self.check(gas, CH4=0, O2=0, H2O=2, CO2=1)
def test_equil_gri_lean(self):
gas = ct.importPhase('gri30.xml')
gas.set(X='CH4:1.0, O2:3.0', T=301, P=100000)
gas.equilibrate('TP', self.solver)
self.check(gas, CH4=0, O2=1, H2O=2, CO2=1)
def test_equil_overconstrained1(self):
gas = ct.importPhase('equilibrium.cti', 'overconstrained-1')
gas.set(X='CH4:1.0, O2:1.0', T=301, P=100000)
gas.equilibrate('TP', self.solver)
self.check(gas, CH4=1, O2=1)
def test_equil_overconstrained2(self):
gas = ct.importPhase('equilibrium.cti', 'overconstrained-2')
gas.set(X='CH4:1.0, O2:1.0', T=301, P=100000)
gas.equilibrate('TP', self.solver)
self.check(gas, CH4=1, O2=1)
class ChemEquilTest(EquilTestCases, unittest.TestCase):
def __init__(self, *args, **kwargs):
EquilTestCases.__init__(self, 0)
unittest.TestCase.__init__(self, *args, **kwargs)
class MultiphaseEquilTest(EquilTestCases, unittest.TestCase):
def __init__(self, *args, **kwargs):
EquilTestCases.__init__(self, 1)
unittest.TestCase.__init__(self, *args, **kwargs)
class VCS_EquilTest(EquilTestCases, unittest.TestCase):
def __init__(self, *args, **kwargs):
EquilTestCases.__init__(self, 2)
unittest.TestCase.__init__(self, *args, **kwargs)