diff --git a/interfaces/cython/cantera/__init__.py b/interfaces/cython/cantera/__init__.py index 7b53cde38..85cb199d9 100644 --- a/interfaces/cython/cantera/__init__.py +++ b/interfaces/cython/cantera/__init__.py @@ -1,4 +1,5 @@ from ._cantera import * +from .liquidvapor import * import os as _os addDirectory(_os.path.join(_os.path.dirname(__file__), 'data')) diff --git a/interfaces/cython/cantera/_cantera.pxd b/interfaces/cython/cantera/_cantera.pxd index 3d86eea52..0021f08e0 100644 --- a/interfaces/cython/cantera/_cantera.pxd +++ b/interfaces/cython/cantera/_cantera.pxd @@ -34,6 +34,19 @@ cdef extern from "cantera/thermo/ThermoPhase.h" namespace "Cantera": int nSpecies() XML_Node& xml() + # PureFluid properties + double critTemperature() except + + double critPressure() except + + double critDensity() except + + + double satTemperature(double P) except + + double satPressure(double T) except + + double vaporFraction() except + + + void setState_Tsat(double T, double x) except + + void setState_Psat(double P, double x) except + + + cdef extern from "cantera/thermo/IdealGasPhase.h": cdef cppclass CxxIdealGasPhase "Cantera::IdealGasPhase" diff --git a/interfaces/cython/cantera/liquidvapor.py b/interfaces/cython/cantera/liquidvapor.py new file mode 100644 index 000000000..6fd978358 --- /dev/null +++ b/interfaces/cython/cantera/liquidvapor.py @@ -0,0 +1,25 @@ +from . import PureFluid + +def Water(): + return PureFluid('liquidvapor.xml','water') + +def Nitrogen(): + return PureFluid('liquidvapor.xml','nitrogen') + +def Methane(): + return PureFluid('liquidvapor.xml','methane') + +def Hydrogen(): + return PureFluid('liquidvapor.xml','hydrogen') + +def Oxygen(): + return PureFluid('liquidvapor.xml','oxygen') + +def Hfc134a(): + return PureFluid('liquidvapor.xml','hfc134a') + +def CarbonDioxide(): + return PureFluid('liquidvapor.xml','carbondioxide') + +def Heptane(): + return PureFluid('liquidvapor.xml','heptane') diff --git a/interfaces/cython/cantera/test/__init__.py b/interfaces/cython/cantera/test/__init__.py index 16306f1db..398fd69bd 100644 --- a/interfaces/cython/cantera/test/__init__.py +++ b/interfaces/cython/cantera/test/__init__.py @@ -1,4 +1,5 @@ from .test_thermo import * +from .test_purefluid import * from .test_kinetics import * from .test_transport import * from .test_mixture import * diff --git a/interfaces/cython/cantera/test/test_purefluid.py b/interfaces/cython/cantera/test/test_purefluid.py new file mode 100644 index 000000000..8c8a08ca6 --- /dev/null +++ b/interfaces/cython/cantera/test/test_purefluid.py @@ -0,0 +1,20 @@ +import cantera as ct +from . import utilities + +class TestPureFluid(utilities.CanteraTest): + def setUp(self): + self.water = ct.Water() + + def test_critProperties(self): + self.assertNear(self.water.critPressure, 22.089e6) + self.assertNear(self.water.critTemperature, 647.286) + self.assertNear(self.water.critDensity, 317.0) + + def test_setState(self): + self.water._setState_Psat(101325, 0.5) + self.assertNear(self.water.pressure, 101325) + self.assertNear(self.water.vaporFraction, 0.5) + + self.water._setState_Tsat(500, 0.8) + self.assertNear(self.water.temperature, 500) + self.assertNear(self.water.vaporFraction, 0.8) diff --git a/interfaces/cython/cantera/thermo.pyx b/interfaces/cython/cantera/thermo.pyx index 70e5b3828..c0a7a2a71 100644 --- a/interfaces/cython/cantera/thermo.pyx +++ b/interfaces/cython/cantera/thermo.pyx @@ -36,3 +36,27 @@ cdef class InterfacePhase(ThermoPhase): return self.surf.siteDensity() def __set__(self, double value): self.surf.setSiteDensity(value) + + +cdef class PureFluid(ThermoPhase): + property critTemperature: + def __get__(self): + return self.thermo.critTemperature() + + property critPressure: + def __get__(self): + return self.thermo.critPressure() + + property critDensity: + def __get__(self): + return self.thermo.critDensity() + + property vaporFraction: + def __get__(self): + return self.thermo.vaporFraction() + + def _setState_Psat(self, double P, double x): + self.thermo.setState_Psat(P, x) + + def _setState_Tsat(self, double T, double x): + self.thermo.setState_Tsat(T, x)