[1D/Python] Set pressure when restoring solution from XML file
This partially addresses Issue 90.
This commit is contained in:
parent
1e91bd59af
commit
833ca13dc1
10 changed files with 42 additions and 20 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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},
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue