80 lines
2.7 KiB
Python
80 lines
2.7 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)
|
|
|
|
|
|
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)
|