diff --git a/interfaces/cython/cantera/test/test_purefluid.py b/interfaces/cython/cantera/test/test_purefluid.py index 610185b3a..32be4e723 100644 --- a/interfaces/cython/cantera/test/test_purefluid.py +++ b/interfaces/cython/cantera/test/test_purefluid.py @@ -26,6 +26,22 @@ class TestPureFluid(utilities.CanteraTest): self.assertNear(self.water.T, 500) self.assertNear(self.water.X, 0.8) + def test_set_X(self): + self.water.TX = 500, 0.0 + p = self.water.P + self.water.X = 0.8 + self.assertNear(self.water.P, p) + self.assertNear(self.water.T, 500) + self.assertNear(self.water.X, 0.8) + + self.water.TP = 650, 101325 + with self.assertRaises(Exception): + self.water.X = 0.1 + + self.water.TP = 300, 101325 + with self.assertRaises(Exception): + self.water.X = 0.3 + def test_set_minmax(self): self.water.TP = self.water.min_temp, 101325 self.assertNear(self.water.T, self.water.min_temp) diff --git a/interfaces/cython/cantera/thermo.pyx b/interfaces/cython/cantera/thermo.pyx index e2c391592..be310a554 100644 --- a/interfaces/cython/cantera/thermo.pyx +++ b/interfaces/cython/cantera/thermo.pyx @@ -1170,9 +1170,18 @@ cdef class PureFluid(ThermoPhase): or a fluid beyond its critical point. """ property X: - """Vapor fraction (quality).""" + """ + Get/Set vapor fraction (quality). Can be set only when in the two-phase + region. + """ def __get__(self): return self.thermo.vaporFraction() + def __set__(self, X): + if (self.P >= self.critical_pressure or + abs(self.P-self.P_sat)/self.P > 1e-4): + raise ValueError('Cannot set vapor quality outside the' + 'two-phase region') + self.thermo.setState_Psat(self.P, X) property TX: """Get/Set the temperature and vapor fraction of a two-phase state."""