[1D/Cython] Set pressure when restoring solution from XML file

This partially addresses Issue 90.
This commit is contained in:
Ray Speth 2012-12-18 00:10:48 +00:00
parent 14426bfc86
commit 1e91bd59af
3 changed files with 25 additions and 12 deletions

View file

@ -107,6 +107,10 @@ public:
m_press = p;
}
/// The current pressure [Pa].
doublereal pressure() const {
return m_press;
}
/// @todo remove? may be unused
virtual void setState(size_t point, const doublereal* state,

View file

@ -382,6 +382,7 @@ cdef extern from "cantera/oneD/StFlow.h":
void setTransport(CxxTransport&, cbool) except +
void setTransport(CxxTransport&) except +
void setPressure(double)
double pressure()
void setFixedTempProfile(vector[double]&, vector[double]&)
void solveEnergyEqn()
void fixTemperature()

View file

@ -301,11 +301,15 @@ cdef class _FlowBase(Domain1D):
self.gas = thermo
self.flow.setKinetics(deref(self.gas.kinetics))
self.flow.setTransport(deref(self.gas.transport))
self.flow.setPressure(self.gas.P)
self.P = self.gas.P
self.flow.solveEnergyEqn()
def setPressure(self, P):
self.flow.setPressure(P)
property P:
""" Pressure [Pa] """
def __get__(self):
return self.flow.pressure()
def __set__(self, P):
self.flow.setPressure(P)
def setTransport(self, _SolutionBase phase):
self.gas = phase
@ -743,7 +747,6 @@ cdef class Sim1D:
cdef class FlameBase(Sim1D):
""" Base class for flames with a single flow domain """
cdef readonly object gas
cdef double pressure
cdef public object flame
def __init__(self, domains, gas, grid):
@ -756,8 +759,7 @@ cdef class FlameBase(Sim1D):
self.flame.grid = grid
super().__init__(domains)
self.gas = gas
self.pressure = gas.P
self.flame.setPressure(self.pressure)
self.flame.P = gas.P
def setRefineCriteria(self, ratio=10.0, slope=0.8, curve=0.8, prune=0.0):
super().setRefineCriteria(self.flame, ratio, slope, curve, prune)
@ -789,6 +791,12 @@ cdef class FlameBase(Sim1D):
def __get__(self):
return self.flame.grid
property P:
def __get__(self):
return self.flame.P
def __set__(self, P):
self.flame.P = P
property T:
""" Array containing the temperature [K] at each grid point. """
def __get__(self):
@ -846,7 +854,7 @@ cdef class FlameBase(Sim1D):
k0 = self.flame.componentIndex(self.gas.speciesName(0))
Y = [self.solution(k, point)
for k in range(k0, k0 + self.gas.nSpecies)]
self.gas.TPY = self.value(self.flame, 'T', point), self.pressure, Y
self.gas.TPY = self.value(self.flame, 'T', point), self.P, Y
cdef class FreeFlame(FlameBase):
@ -878,7 +886,7 @@ cdef class FreeFlame(FlameBase):
similarly.
"""
super().setInitialGuess()
self.gas.TPY = self.inlet.T, self.pressure, self.inlet.Y
self.gas.TPY = self.inlet.T, self.P, self.inlet.Y
Y0 = self.inlet.Y
u0 = self.inlet.mdot/self.gas.density
T0 = self.inlet.T
@ -936,7 +944,7 @@ cdef class BurnerFlame(FlameBase):
"""
super().setInitialGuess()
self.gas.TPY = self.burner.T, self.pressure, self.burner.Y
self.gas.TPY = self.burner.T, self.P, self.burner.Y
Y0 = self.burner.Y
u0 = self.burner.mdot/self.gas.density
T0 = self.burner.T
@ -1022,19 +1030,19 @@ cdef class CounterflowDiffusionFlame(FlameBase):
Yin_o = self.oxidizer_inlet.Y
Yst = zst * Yin_f + (1.0 - zst) * Yin_o
self.gas.TPY = self.fuel_inlet.T, self.pressure, Yin_f
self.gas.TPY = self.fuel_inlet.T, self.P, Yin_f
mdotf = self.fuel_inlet.mdot
u0f = mdotf / self.gas.density
T0f = self.fuel_inlet.T
self.gas.TPY = self.oxidizer_inlet.T, self.pressure, Yin_o
self.gas.TPY = self.oxidizer_inlet.T, self.P, Yin_o
mdoto = self.oxidizer_inlet.mdot
u0o = mdoto/self.gas.density
T0o = self.oxidizer_inlet.T
# get adiabatic flame temperature and composition
Tbar = 0.5 * (T0f + T0o)
self.gas.TPY = Tbar, self.pressure, Yst
self.gas.TPY = Tbar, self.P, Yst
self.gas.equilibrate('HP')
Teq = self.gas.T
Yeq = self.gas.Y