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

This partially addresses Issue 90.
This commit is contained in:
Ray Speth 2012-12-18 00:11:24 +00:00
parent 1e91bd59af
commit 833ca13dc1
10 changed files with 42 additions and 20 deletions

View file

@ -33,7 +33,7 @@ class BurnerDiffFlame(Stack):
self.outlet = outlet
else:
self.outlet = OutletRes('outletres')
self.pressure = gas.pressure()
self.flame = AxisymmetricFlow('flame',gas = gas)
self.flame.setupGrid(grid)
Stack.__init__(self, [self.burner, self.flame, self.outlet])
@ -53,7 +53,7 @@ class BurnerDiffFlame(Stack):
yin = zeros(nsp, 'd')
for k in range(nsp):
yin[k] = self.burner.massFraction(k)
gas.setState_TPY(self.burner.temperature(), self.pressure, yin)
gas.setState_TPY(self.burner.temperature(), self.flame.pressure(), yin)
u0 = self.burner.mdot()/gas.density()
t0 = self.burner.temperature()
@ -133,6 +133,6 @@ class BurnerDiffFlame(Stack):
for n in range(nsp):
nm = self.gas.speciesName(n)
y[n] = self.solution(nm, j)
self.gas.setState_TPY(self.T(j), self.pressure, y)
self.gas.setState_TPY(self.T(j), self.flame.pressure(), y)
fix_docs(BurnerDiffFlame)

View file

@ -33,7 +33,6 @@ class BurnerFlame(Stack):
self.outlet = outlet
else:
self.outlet = Outlet('outlet')
self.pressure = gas.pressure()
self.flame = AxisymmetricFlow('flame',gas = gas)
self.flame.setupGrid(grid)
Stack.__init__(self, [self.burner, self.flame, self.outlet])
@ -53,7 +52,7 @@ class BurnerFlame(Stack):
yin = zeros(nsp, 'd')
for k in range(nsp):
yin[k] = self.burner.massFraction(k)
gas.setState_TPY(self.burner.temperature(), self.pressure, yin)
gas.setState_TPY(self.burner.temperature(), self.flame.pressure(), yin)
u0 = self.burner.mdot()/gas.density()
t0 = self.burner.temperature()
@ -133,6 +132,6 @@ class BurnerFlame(Stack):
for n in range(nsp):
nm = self.gas.speciesName(n)
y[n] = self.solution(nm, j)
self.gas.setState_TPY(self.T(j), self.pressure, y)
self.gas.setState_TPY(self.T(j), self.flame.pressure(), y)
fix_docs(BurnerFlame)

View file

@ -46,7 +46,6 @@ class CounterFlame(Stack):
self.gas = gas
self.fuel_inlet.set(temperature = gas.temperature())
self.oxidizer_inlet.set(temperature = gas.temperature())
self.pressure = gas.pressure()
self.flame = AxisymmetricFlow('flame',gas = gas)
self.flame.setupGrid(grid)
Stack.__init__(self, [self.fuel_inlet, self.flame,
@ -86,6 +85,7 @@ class CounterFlame(Stack):
y0ox = self.oxidizer_inlet.massFraction(iox)
phi = s*y0f/y0ox
zst = 1.0/(1.0 + phi)
pressure = self.flame.pressure()
yin_f = zeros(nsp, 'd')
yin_o = zeros(nsp, 'd')
@ -95,20 +95,20 @@ class CounterFlame(Stack):
yin_o[k] = self.oxidizer_inlet.massFraction(k)
yst[k] = zst*yin_f[k] + (1.0 - zst)*yin_o[k]
gas.setState_TPY(self.fuel_inlet.temperature(), self.pressure, yin_f)
gas.setState_TPY(self.fuel_inlet.temperature(), pressure, yin_f)
mdotf = self.fuel_inlet.mdot()
u0f = mdotf/gas.density()
t0f = self.fuel_inlet.temperature()
gas.setState_TPY(self.oxidizer_inlet.temperature(),
self.pressure, yin_o)
pressure, yin_o)
mdoto = self.oxidizer_inlet.mdot()
u0o = mdoto/gas.density()
t0o = self.oxidizer_inlet.temperature()
# get adiabatic flame temperature and composition
tbar = 0.5*(t0o + t0f)
gas.setState_TPY(tbar, self.pressure, yst)
gas.setState_TPY(tbar, pressure, yst)
gas.equilibrate('HP')
teq = gas.temperature()
yeq = gas.massFractions()
@ -214,6 +214,6 @@ class CounterFlame(Stack):
for n in range(nsp):
nm = self.gas.speciesName(n)
y[n] = self.solution(nm, j)
self.gas.setState_TPY(self.T(j), self.pressure, y)
self.gas.setState_TPY(self.T(j), self.flame.pressure(), y)
fix_docs(CounterFlame)

View file

@ -23,7 +23,6 @@ class FreeFlame(Stack):
self.gas = gas
self.inlet.set(temperature = gas.temperature())
self.outlet = Outlet('outlet')
self.pressure = gas.pressure()
# type 2 is Cantera C++ class FreeFlame
self.flame = AxisymmetricFlow('flame',gas = gas,type=2)
@ -47,7 +46,7 @@ class FreeFlame(Stack):
yin = zeros(nsp, 'd')
for k in range(nsp):
yin[k] = self.inlet.massFraction(k)
gas.setState_TPY(self.inlet.temperature(), self.pressure, yin)
gas.setState_TPY(self.inlet.temperature(), self.flame.pressure(), yin)
u0 = self.inlet.mdot()/gas.density()
t0 = self.inlet.temperature()
@ -131,6 +130,6 @@ class FreeFlame(Stack):
for n in range(nsp):
nm = self.gas.speciesName(n)
y[n] = self.solution(nm, j)
self.gas.setState_TPY(self.T(j), self.pressure, y)
self.gas.setState_TPY(self.T(j), self.flame.pressure(), y)
fix_docs(FreeFlame)

View file

@ -26,7 +26,6 @@ class StagnationFlow(Stack):
self.surfchem = surfchem
self.inlet.set(temperature = gas.temperature())
self.surface = Surface(id = 'surface', surface_mech = surfchem)
self.pressure = gas.pressure()
self.flow = AxisymmetricFlow('flow',gas = gas)
self.flow.setupGrid(grid)
Stack.__init__(self, [self.inlet, self.flow, self.surface])
@ -44,7 +43,7 @@ class StagnationFlow(Stack):
yin = zeros(nsp, 'd')
for k in range(nsp):
yin[k] = self.inlet.massFraction(k)
gas.setState_TPY(self.inlet.temperature(), self.pressure, yin)
gas.setState_TPY(self.inlet.temperature(), self.flow.pressure(), yin)
u0 = self.inlet.mdot()/gas.density()
t0 = self.inlet.temperature()
V0 = 0.0
@ -147,6 +146,6 @@ class StagnationFlow(Stack):
for n in range(nsp):
nm = self.gas.speciesName(n)
y[n] = self.solution(nm, j)
self.gas.setState_TPY(self.T(j), self.pressure, y)
self.gas.setState_TPY(self.T(j), self.flow.pressure(), y)
fix_docs(StagnationFlow)

View file

@ -384,7 +384,6 @@ class AxisymmetricFlow(Domain1D):
itr = gas.transport_hndl()
self._hndl = _cantera.stflow_new(iph, ikin, itr, type)
if id: self.setID(id)
self._p = -1.0
self.setPressure(gas.pressure())
self.solveEnergyEqn()
@ -392,7 +391,6 @@ class AxisymmetricFlow(Domain1D):
"""Set the pressure [Pa]. The pressure is a constant, since
the governing equations are those for the low-Mach-number limit."""
_cantera.stflow_setPressure(self._hndl, p)
self._p = p
def setTransportModel(self, transp, withSoret = 0):
"""Set the transport model. The argument must be a transport
@ -408,7 +406,7 @@ class AxisymmetricFlow(Domain1D):
def pressure(self):
"""Pressure [Pa]."""
return self._p
return _cantera.stflow_pressure(self._hndl)
def setFixedTempProfile(self, pos, temp):
"""Set the fixed temperature profile. This profile is used

View file

@ -416,6 +416,15 @@ extern "C" {
}
}
double stflow_pressure(int i)
{
try {
return DomainCabinet::get<StFlow>(i).pressure();
} catch (...) {
return handleAllExceptions(DERR, DERR);
}
}
int stflow_setFixedTempProfile(int i, size_t n, double* pos,
size_t m, double* temp)
{

View file

@ -52,6 +52,7 @@ extern "C" {
CANTERA_CAPI int stflow_setTransport(int i, int itr, int iSoret);
CANTERA_CAPI int stflow_enableSoret(int i, int iSoret);
CANTERA_CAPI int stflow_setPressure(int i, double p);
CANTERA_CAPI double stflow_pressure(int i);
CANTERA_CAPI int stflow_setFixedTempProfile(int i, size_t n, double* pos,
size_t m, double* temp);
CANTERA_CAPI int stflow_solveSpeciesEqs(int i, int flag);

View file

@ -631,6 +631,22 @@ py_stflow_setPressure(PyObject* self, PyObject* args)
return Py_BuildValue("i",_val);
}
static PyObject*
py_stflow_pressure(PyObject* self, PyObject* args)
{
double _val;
int i;
int n;
if (!PyArg_ParseTuple(args, "i:stflow_pressure", &i)) {
return NULL;
}
_val = stflow_pressure(i);
if (_val == DERR) {
return reportCanteraError();
}
return Py_BuildValue("d",_val);
}
static PyObject*
py_stflow_setFixedTempProfile(PyObject* self, PyObject* args)

View file

@ -129,6 +129,7 @@ static PyMethodDef ct_methods[] = {
{"reactingsurf_new", py_reactingsurf_new, METH_VARARGS},
{"stflow_new", py_stflow_new, METH_VARARGS},
{"stflow_setPressure", py_stflow_setPressure, METH_VARARGS},
{"stflow_pressure", py_stflow_pressure, METH_VARARGS},
{"stflow_setTransport", py_stflow_setTransport, METH_VARARGS},
{"stflow_enableSoret", py_stflow_enableSoret, METH_VARARGS},
{"stflow_setFixedTempProfile", py_stflow_setFixedTempProfile, METH_VARARGS},