Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implementation of MoleReactor and ConstantPressureMoleReactor #1363

Merged
merged 3 commits into from Sep 9, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
24 changes: 24 additions & 0 deletions doc/sphinx/cython/zerodim.rst
Expand Up @@ -42,6 +42,10 @@ Reactor
^^^^^^^
.. autoclass:: Reactor

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

IdealGasReactor
^^^^^^^^^^^^^^^
.. autoclass:: IdealGasReactor(contents=None, *, name=None, energy='on')
Expand All @@ -54,6 +58,10 @@ ConstPressureReactor
^^^^^^^^^^^^^^^^^^^^
.. autoclass:: ConstPressureReactor(contents=None, *, name=None, energy='on')

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

IdealGasConstPressureReactor
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. autoclass:: IdealGasConstPressureReactor(contents=None, *, name=None, energy='on')
Expand Down Expand Up @@ -82,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
46 changes: 46 additions & 0 deletions include/cantera/zeroD/ConstPressureMoleReactor.h
@@ -0,0 +1,46 @@
//! @file ConstPressureMoleReactor.h

// This file is part of Cantera. See License.txt in the top-level directory or
// at https://cantera.org/license.txt for license and copyright information.

#ifndef CT_CONSTPRESSMOLE_REACTOR_H
#define CT_CONSTPRESSMOLE_REACTOR_H

#include "cantera/zeroD/MoleReactor.h"

namespace Cantera
{

/*!
* ConstPressureMoleReactor is a class for constant-pressure reactors
* which use a state of moles.
anthony-walker marked this conversation as resolved.
Show resolved Hide resolved
* @since New in Cantera 3.0
*/
class ConstPressureMoleReactor : public MoleReactor
{
public:
ConstPressureMoleReactor() {}

virtual std::string type() const {
return "ConstPressureMoleReactor";
};

virtual size_t componentIndex(const std::string& nm) const;

virtual std::string componentName(size_t k);

virtual void getState(double* y);

virtual void initialize(double t0 = 0.0);

virtual void eval(double t, double* LHS, double* RHS);

virtual void updateState(double* y);

protected:
const size_t m_sidx = 1;
};

}

#endif
6 changes: 2 additions & 4 deletions include/cantera/zeroD/IdealGasConstPressureMoleReactor.h
Expand Up @@ -6,7 +6,7 @@
#ifndef CT_IDEALGASCONSTPRESSMOLE_REACTOR_H
#define CT_IDEALGASCONSTPRESSMOLE_REACTOR_H

#include "cantera/zeroD/MoleReactor.h"
#include "cantera/zeroD/ConstPressureMoleReactor.h"

namespace Cantera
{
Expand All @@ -15,7 +15,7 @@ namespace Cantera
* IdealGasConstPressureMoleReactor is a class for ideal gas constant-pressure reactors
* which use a state of moles.
*/
class IdealGasConstPressureMoleReactor : public MoleReactor
class IdealGasConstPressureMoleReactor : public ConstPressureMoleReactor
{
public:
IdealGasConstPressureMoleReactor() {}
Expand Down Expand Up @@ -47,8 +47,6 @@ class IdealGasConstPressureMoleReactor : public MoleReactor

protected:
vector_fp m_hk; //!< Species molar enthalpies

const size_t m_sidx = 1;
};

}
Expand Down
27 changes: 16 additions & 11 deletions include/cantera/zeroD/MoleReactor.h
Expand Up @@ -13,8 +13,7 @@ namespace Cantera

/*!
* MoleReactor is meant to serve the same purpose as the reactor class but with a state
* vector composed of moles. It is currently not functional and only serves as a base
* class for other reactors.
* vector composed of moles. It also serves as the base class for other mole reactors.
*/
class MoleReactor : public Reactor
{
Expand All @@ -27,19 +26,25 @@ class MoleReactor : public Reactor

virtual void initialize(double t0 = 0.0);

virtual void eval(double t, double* LHS, double* RHS) {
throw NotImplementedError("MoleReactor::eval()");
}
virtual void getState(double* y);

size_t componentIndex(const std::string& nm) const {
throw NotImplementedError("MoleReactor::componentIndex");
}
virtual void updateState(double* y);

std::string componentName(size_t k) {
throw NotImplementedError("MoleReactor::componentName");
}
virtual void eval(double t, double* LHS, double* RHS);

size_t componentIndex(const std::string& nm) const;

std::string componentName(size_t k);

protected:
//! Get moles of the system from mass fractions stored by thermo object
//! @param y vector for moles to be put into
virtual void getMoles(double* y);

//! Set internal mass variable based on moles given
//! @param y vector of moles of the system
virtual void setMassFromMoles(double* y);

virtual void evalSurfaces(double* LHS, double* RHS, double* sdot);

virtual void updateSurfaceState(double* y);
Expand Down
6 changes: 6 additions & 0 deletions interfaces/cython/cantera/reactor.pxd
Expand Up @@ -193,12 +193,18 @@ cdef class Reactor(ReactorBase):
cdef CxxReactor* reactor
cdef object _kinetics

cdef class MoleReactor(Reactor):
pass

cdef class Reservoir(ReactorBase):
pass

cdef class ConstPressureReactor(Reactor):
pass

cdef class ConstPressureMoleReactor(Reactor):
pass

cdef class IdealGasReactor(Reactor):
pass

Expand Down
59 changes: 59 additions & 0 deletions interfaces/cython/cantera/reactor.pyx
Expand Up @@ -369,6 +369,16 @@ cdef class Reactor(ReactorBase):
limit = -1.
self.reactor.setAdvanceLimit(stringify(name), limit)

cdef class MoleReactor(Reactor):
"""
A homogeneous zero-dimensional reactor with a mole based state vector. By default,
they are closed (no inlets or outlets), have fixed volume, and have adiabatic,
chemically-inert walls. These properties may all be changed by adding
appropriate components such as `Wall`, `MassFlowController` and `Valve`.

.. versionadded:: 3.0
"""
reactor_type = "MoleReactor"

cdef class Reservoir(ReactorBase):
"""
Expand All @@ -386,6 +396,15 @@ cdef class ConstPressureReactor(Reactor):
"""
reactor_type = "ConstPressureReactor"

cdef class ConstPressureMoleReactor(Reactor):
"""A homogeneous, constant pressure, zero-dimensional reactor with a mole based
state vector. The volume of the reactor changes as a function of time in order to
keep the pressure constant.

.. versionadded:: 3.0
"""
anthony-walker marked this conversation as resolved.
Show resolved Hide resolved
reactor_type = "ConstPressureMoleReactor"


cdef class IdealGasReactor(Reactor):
""" A constant volume, zero-dimensional reactor for ideal gas mixtures. """
Expand Down Expand Up @@ -613,6 +632,46 @@ cdef class ExtensibleIdealGasConstPressureReactor(ExtensibleReactor):
reactor_type = "ExtensibleIdealGasConstPressureReactor"


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

.. versionadded:: 3.0
"""
reactor_type = "ExtensibleMoleReactor"


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

.. versionadded:: 3.0
"""
reactor_type = "ExtensibleIdealGasMoleReactor"


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

.. versionadded:: 3.0
"""
reactor_type = "ExtensibleConstPressureMoleReactor"


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

.. versionadded:: 3.0
"""
reactor_type = "ExtensibleIdealGasConstPressureMoleReactor"


cdef class ReactorSurface:
"""
Represents a surface in contact with the contents of a reactor.
Expand Down