diff --git a/interfaces/cython/cantera/test/test_purefluid.py b/interfaces/cython/cantera/test/test_purefluid.py index a5c8502b6..9ab42d48d 100644 --- a/interfaces/cython/cantera/test/test_purefluid.py +++ b/interfaces/cython/cantera/test/test_purefluid.py @@ -149,11 +149,16 @@ class TestPureFluid(utilities.CanteraTest): def test_TPX(self): self.water.TX = 400, 0.8 - T,P,X = self.water.TPX + T, P, X = self.water.TPX self.assertNear(T, 400) self.assertNear(X, 0.8) - with self.assertRaises(AttributeError): - self.water.TPX = 500, 101325, 0.3 + + self.water.TPX = T, P, X + self.assertNear(X, 0.8) + with self.assertRaises(ValueError): + self.water.TPX = T, .999*P, X + with self.assertRaises(ValueError): + self.water.TPX = T, 1.001*P, X # To minimize errors when transcribing tabulated data, the input units here are: diff --git a/interfaces/cython/cantera/thermo.pyx b/interfaces/cython/cantera/thermo.pyx index 4980b69ec..d9e2ad8ad 100644 --- a/interfaces/cython/cantera/thermo.pyx +++ b/interfaces/cython/cantera/thermo.pyx @@ -1564,9 +1564,24 @@ cdef class PureFluid(ThermoPhase): return self.T, self.density, self.X property TPX: - """Get the temperature [K], pressure [Pa], and vapor fraction.""" + """ + Get/Set the temperature [K], pressure [Pa], and vapor fraction of a + PureFluid. + + An Exception is raised if the thermodynamic state is not consistent. + """ def __get__(self): return self.T, self.P, self.X + def __set__(self, values): + T = values[0] if values[0] is not None else self.T + P = values[1] if values[1] is not None else self.P + X = values[2] if values[2] is not None else self.X + if np.isclose(P, self.thermo.satPressure(T)): + self.TX = T, X + elif np.isclose(X, 0.) or np.isclose(X, 1.): + self.TP = T, P + else: + raise ValueError('invalid thermodynamic state') property UVX: """