From 0b001220621828fdbc24514d47797b1ae98a8df3 Mon Sep 17 00:00:00 2001 From: Ray Speth Date: Fri, 31 May 2013 15:55:57 +0000 Subject: [PATCH] [Cython] Add support for setting state using entropy + specifc volume --- interfaces/cython/cantera/_cantera.pxd | 1 + interfaces/cython/cantera/test/test_thermo.py | 13 ++++++++ interfaces/cython/cantera/thermo.pyx | 33 +++++++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/interfaces/cython/cantera/_cantera.pxd b/interfaces/cython/cantera/_cantera.pxd index 464005549..396448884 100644 --- a/interfaces/cython/cantera/_cantera.pxd +++ b/interfaces/cython/cantera/_cantera.pxd @@ -98,6 +98,7 @@ cdef extern from "cantera/thermo/ThermoPhase.h" namespace "Cantera": void setState_HP(double, double) except + void setState_UV(double, double) except + void setState_SP(double, double) except + + void setState_SV(double, double) except + # molar thermodynamic properties: double enthalpy_mole() except + diff --git a/interfaces/cython/cantera/test/test_thermo.py b/interfaces/cython/cantera/test/test_thermo.py index b02c523e6..002bc3c98 100644 --- a/interfaces/cython/cantera/test/test_thermo.py +++ b/interfaces/cython/cantera/test/test_thermo.py @@ -150,6 +150,14 @@ class TestThermoPhase(utilities.CanteraTest): self.phase.SPX = s1, P1, X1 check_state(T1, rho1, Y1) + self.phase.TDY = T0, rho0, Y0 + self.phase.SVX = s1, v1, X1 + check_state(T1, rho1, Y1) + + self.phase.TDY = T0, rho0, Y0 + self.phase.SVY = s1, v1, Y1 + check_state(T1, rho1, Y1) + def test_setState_mass(self): self.check_setters(T1 = 500.0, rho1 = 1.5, @@ -175,6 +183,11 @@ class TestThermoPhase(utilities.CanteraTest): self.assertNear(U, self.phase.u) self.assertNear(V, self.phase.v) + S,V,X = self.phase.SVX + self.assertNear(S, self.phase.s) + self.assertNear(V, self.phase.v) + self.assertArrayNear(X, self.phase.X) + def test_getState_mass(self): self.phase.TDY = 350.0, 0.7, 'H2:0.1, H2O2:0.1, AR:0.8' self.check_getters() diff --git a/interfaces/cython/cantera/thermo.pyx b/interfaces/cython/cantera/thermo.pyx index 7754a520d..ca84f629b 100644 --- a/interfaces/cython/cantera/thermo.pyx +++ b/interfaces/cython/cantera/thermo.pyx @@ -565,6 +565,39 @@ cdef class ThermoPhase(_SolutionBase): self.Y = values[2] self.SP = values[:2] + property SV: + """ + Get/Set entropy [J/kg/K or J/kmol/K] and specific volume [m^3/kg or + m^3/kmol]. + """ + def __get__(self): + return self.s, self.v + def __set__(self, values): + self.thermo.setState_SV(values[0] / self._mass_factor(), + values[1] / self._mass_factor()) + + property SVX: + """ + Get/Set entropy [J/kg/K or J/kmol/K], specific volume [m^3/kg or + m^3/kmol], and mole fractions. + """ + def __get__(self): + return self.s, self.v, self.X + def __set__(self, values): + self.X = values[2] + self.SV = values[:2] + + property SVY: + """ + Get/Set entropy [J/kg/K or J/kmol/K], specific volume [m^3/kg or + m^3/kmol], and mass fractions. + """ + def __get__(self): + return self.s, self.v, self.Y + def __set__(self, values): + self.Y = values[2] + self.SV = values[:2] + # partial molar / non-dimensional properties property partial_molar_enthalpies: """Array of species partial molar enthalpies [J/kmol]."""