Add Python interface for setState_RP + tests

This commit is contained in:
Bryan W. Weber 2015-06-13 19:45:21 -04:00 committed by Ray Speth
parent 8e58a45edb
commit 20455056f8
3 changed files with 51 additions and 0 deletions

View file

@ -176,6 +176,7 @@ cdef extern from "cantera/thermo/ThermoPhase.h" namespace "Cantera":
void setState_UV(double, double) except +
void setState_SP(double, double) except +
void setState_SV(double, double) except +
void setState_RP(double, double) except +
# molar thermodynamic properties:
double enthalpy_mole() except +

View file

@ -295,6 +295,13 @@ class TestThermoPhase(utilities.CanteraTest):
self.phase.SVY = s1, v1, Y1
check_state(T1, rho1, Y1)
self.phase.TDY = T0, rho0, Y0
self.phase.DPX = rho1, P1, X1
check_state(T1, rho1, Y1)
self.phase.TDY = T0, rho0, Y0
self.phase.DPY = rho1, P1, Y1
check_state(T1, rho1, Y1)
def test_setState_mass(self):
self.check_setters(T1 = 500.0, rho1 = 1.5,
@ -379,6 +386,20 @@ class TestThermoPhase(utilities.CanteraTest):
self.assertNear(V, self.phase.v)
self.assertArrayNear(X, self.phase.X)
D,P,X = self.phase.DPX
self.assertNear(D, self.phase.density)
self.assertNear(P, self.phase.P)
self.assertArrayNear(X, self.phase.X)
D,P,Y = self.phase.DPY
self.assertNear(D, self.phase.density)
self.assertNear(P, self.phase.P)
self.assertArrayNear(Y, self.phase.Y)
D,P = self.phase.DP
self.assertNear(D, self.phase.density)
self.assertNear(P, self.phase.P)
def test_getState_mass(self):
self.phase.TDY = 350.0, 0.7, 'H2:0.1, H2O2:0.1, AR:0.8'
self.check_getters()

View file

@ -886,6 +886,35 @@ cdef class ThermoPhase(_SolutionBase):
self.thermo.setState_UV(U / self._mass_factor(),
V / self._mass_factor())
property DP:
def __get__(self):
return self.density, self.P
def __set__(self, values):
assert len(values) == 2
D = values[0] if values[0] is not None else self.density
P = values[1] if values[1] is not None else self.P
self.thermo.setState_RP(D*self._mass_factor(), P)
property DPX:
def __get__(self):
return self.density, self.P, self.X
def __set__(self, values):
assert len(values) == 3
D = values[0] if values[0] is not None else self.density
P = values[1] if values[1] is not None else self.P
self.X = values[2]
self.thermo.setState_RP(D*self._mass_factor(), P)
property DPY:
def __get__(self):
return self.density, self.P, self.Y
def __set__(self, values):
assert len(values) == 3
D = values[0] if values[0] is not None else self.density
P = values[1] if values[1] is not None else self.P
self.Y = values[2]
self.thermo.setState_RP(D*self._mass_factor(), P)
property HP:
"""Get/Set enthalpy [J/kg or J/kmol] and pressure [Pa]."""
def __get__(self):