{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# III - 0D computations"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The following link may help you to find the answers or the documentation you need :\n",
"https://cantera.org/documentation/docs-3.0/sphinx/html/cython/zerodim.html\n",
"https://cantera.org/science/reactors/reactors.html\n",
" \n",
"... (define gases) ...\n",
"r1 = Reactor(gas1)\n",
"r2 = Reactor(gas2)\n",
"... (install walls, inlets, outlets, etc)...\n",
"reactor_network = ReactorNet([r1, r2])\n",
"time = 1 #s\n",
"reactor_network.advance(time)\n",
"
\n",
"The first one is about the function that can be used for computing a reactor and the second one explains the equations that are computed.
"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. Knowledge of 0D computations"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### ReactorBase class"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"0D Reactors are often used in combustion to model auto-ignition time and the chemistry associated to it. For reactors and reservoirs, the class used is the following :
\n",
"ReactorBase(ThermoPhase contents, name=None, arguments)
\n",
"
\n",
"Here are the different types of reactors you can have for a 0D computation :\n",
"1. **Reservoir**
\n",
"Reactors with a constant state. The temperature, pressure, and chemical composition in a reservoir never change from their initial values.\n",
"\n",
"2. **Reactor**\n",
"3. **IdealGasReactor**
\n",
"Constant volume, zero-dimensional reactor for ideal gas mixtures.\n",
"4. **ConstPressureReactor**
\n",
"Homogeneous, constant pressure, zero-dimensional reactor. The volume of the reactor changes as a function of time in order to keep the pressure constant.\n",
"5. **IdealGasConstPressureReactor**
\n",
"Homogeneous, constant pressure, zero-dimensional reactor for ideal gas mixtures. The volume of the reactor changes as a function of time in order to keep the pressure constant.\n",
"6. **FlowReactor**
\n",
"A steady-state plug flow reactor with constant cross sectional area. Time integration follows a fluid element along the length of the reactor. The reactor is assumed to be frictionless and adiabatic."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### FlowDevice class"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Reactors can be added inlets and outlets, to be able to loop or chain several reactors, control mass flow rates, volume or pressure. Here are the properties of the common baseclass *FlowDevice* for flow controllers between reactors and reservoirs :
\n",
"FlowDevice(upstream, downstream, name=None, arguments)
\n",
"
\n",
"The FlowDevice controls the fluids passage between an upstream and a downstream object, which should be specified. The arguments depend upon the different types of flow controllers available in Cantera :\n",
"1. **MassFlowController**
\n",
"Mass flow controllers maintain a specified mass flow rate independent of upstream and downstream conditions. Unlike a real mass flow controller, a MassFlowController object will maintain the flow even if the downstream pressure is greater than the upstream pressure.\n",
"2. **Valve**
\n",
"Valves are flow devices with mass flow rate that is a function of the pressure drop across them. Valve objects are often used between an upstream reactor and a downstream reactor or reservoir to maintain them both at nearly the same pressure. By setting the constant Kv to a sufficiently large value, very small pressure differences will result in flow between the reactors that counteracts the pressure difference.\n",
"3. **PressureController**
\n",
"A pressure controller is designed to be used in conjunction, typically, with a MassFlowController. The master flow controller is installed on the inlet of the reactor, and the corresponding PressureController is installed on the outlet of the reactor. The PressureController mass flow rate is equal to the master mass flow rate, plus a small correction dependent on the pressure difference."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Walls"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Reactors can also add heat transfer and heterogeneous reactions at the walls, through a special\n",
"object \"wall\". Walls separate two reactors, or a reactor and a reservoir. A wall has a finite area, may\n",
"conduct or radiate heat between the two reactors on either side, and may move like a piston. They are\n",
"stateless objects in Cantera, meaning that no differential equation is integrated to determine any wall\n",
"property. A heterogeneous reaction mechanism may be specified for one or both of the wall surfaces."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### ReactorNet"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, the evolution of a reactor, or a network of reactors -which are 0-D objects- with time, is performed\n",
"through an integrator object *ReactorNet* :
\n",
"