Skip to content

Commit

Permalink
Add wrappers for Extensible...MoleReactor, update docs, comment fixes.
Browse files Browse the repository at this point in the history
  • Loading branch information
anthony-walker committed Aug 27, 2022
1 parent 41220f7 commit 7a98841
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 5 deletions.
16 changes: 16 additions & 0 deletions doc/sphinx/cython/zerodim.rst
Expand Up @@ -90,6 +90,22 @@ ExtensibleIdealGasConstPressureReactor
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. autoclass:: ExtensibleIdealGasConstPressureReactor(contents=None, *, name=None, energy='on')

ExtensibleMoleReactor
^^^^^^^^^^^^^^^^^^^^^
.. autoclass:: ExtensibleMoleReactor(contents=None, *, name=None, energy='on')

ExtensibleIdealGasMoleReactor
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. autoclass:: ExtensibleIdealGasMoleReactor(contents=None, *, name=None, energy='on')

ExtensibleConstPressureMoleReactor
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. autoclass:: ExtensibleConstPressureMoleReactor(contents=None, *, name=None, energy='on')

ExtensibleIdealGasConstPressureMoleReactor
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. autoclass:: ExtensibleIdealGasConstPressureMoleReactor(contents=None, *, name=None, energy='on')

Walls
-----

Expand Down
32 changes: 32 additions & 0 deletions interfaces/cython/cantera/reactor.pyx
Expand Up @@ -603,6 +603,38 @@ cdef class ExtensibleIdealGasConstPressureReactor(ExtensibleReactor):
reactor_type = "ExtensibleIdealGasConstPressureReactor"


cdef class ExtensibleMoleReactor(ExtensibleReactor):
"""
A variant of `ExtensibleReactor` where the base behavior corresponds to the
`MoleReactor` class.
"""
reactor_type = "ExtensibleMoleReactor"


cdef class ExtensibleIdealGasMoleReactor(ExtensibleReactor):
"""
A variant of `ExtensibleReactor` where the base behavior corresponds to the
`IdealGasMoleReactor` class.
"""
reactor_type = "ExtensibleIdealGasMoleReactor"


cdef class ExtensibleConstPressureMoleReactor(ExtensibleReactor):
"""
A variant of `ExtensibleReactor` where the base behavior corresponds to the
`ConstPressureMoleReactor` class.
"""
reactor_type = "ExtensibleConstPressureMoleReactor"


cdef class ExtensibleIdealGasConstPressureMoleReactor(ExtensibleReactor):
"""
A variant of `ExtensibleReactor` where the base behavior corresponds to the
`IdealGasConstPressureMoleReactor` class.
"""
reactor_type = "ExtensibleIdealGasConstPressureMoleReactor"


cdef class ReactorSurface:
"""
Represents a surface in contact with the contents of a reactor.
Expand Down
4 changes: 2 additions & 2 deletions src/zeroD/ConstPressureMoleReactor.cpp
Expand Up @@ -23,9 +23,9 @@ void ConstPressureMoleReactor::getState(double* y)
"Error: reactor is empty.");
}
m_thermo->restoreState(m_state);
// get mass for calculations
// set mass to be used in getMoles function
m_mass = m_thermo->density() * m_vol;
// set the first component to the temperature
// set the first array element to enthalpy
y[0] = m_thermo->enthalpy_mass() * m_thermo->density() * m_vol;
// get moles of species in remaining state
getMoles(y + m_sidx);
Expand Down
8 changes: 8 additions & 0 deletions src/zeroD/ReactorFactory.cpp
Expand Up @@ -40,6 +40,14 @@ ReactorFactory::ReactorFactory()
[]() { return new ReactorDelegator<ConstPressureReactor>(); });
reg("ExtensibleIdealGasConstPressureReactor",
[]() { return new ReactorDelegator<IdealGasConstPressureReactor>(); });
reg("ExtensibleMoleReactor",
[]() { return new ReactorDelegator<MoleReactor>(); });
reg("ExtensibleConstPressureMoleReactor",
[]() { return new ReactorDelegator<ConstPressureMoleReactor>(); });
reg("ExtensibleIdealGasMoleReactor",
[]() { return new ReactorDelegator<IdealGasMoleReactor>(); });
reg("ExtensibleIdealGasConstPressureMoleReactor",
[]() { return new ReactorDelegator<IdealGasConstPressureMoleReactor>(); });
reg("IdealGasConstPressureMoleReactor", []() { return new
IdealGasConstPressureMoleReactor(); });
reg("IdealGasMoleReactor", []() { return new IdealGasMoleReactor(); });
Expand Down
7 changes: 4 additions & 3 deletions test/python/test_reactor.py
Expand Up @@ -222,8 +222,8 @@ def integrate(atol, rtol):
n_baseline = integrate(1e-10, 1e-20)
n_rtol = integrate(5e-7, 1e-20)
n_atol = integrate(1e-10, 1e-5)
self.assertTrue(n_baseline > n_rtol, f"{n_baseline} is less than {n_rtol}")
self.assertTrue(n_baseline > n_atol, f"{n_baseline} is less than {n_atol}")
assert n_baseline > n_rtol
assert n_baseline > n_atol

def test_advance_limits(self):
P0 = 10 * ct.one_atm
Expand Down Expand Up @@ -825,7 +825,8 @@ def test_mole_reactor_surface_chem(self):
net2 = ct.ReactorNet([r2,])
net1.rtol = net2.rtol = 1e-9
net1.atol = net2.atol = 1e-18
for i in np.arange(0.1, 1.1, 0.1):
# steady state occurs at ~0.002 seconds
for i in np.linspace(0, 0.0025, 50)[1:]:
net1.advance(i)
net2.advance(i)
self.assertArrayNear(r1.thermo.Y, r2.thermo.Y, rtol=5e-4, atol=1e-6)
Expand Down

0 comments on commit 7a98841

Please sign in to comment.