mirror of
https://github.com/Cantera/cantera.git
synced 2025-02-25 18:55:29 -06:00
[Examples] Add reactor network visualization to mix1.py
This commit is contained in:
parent
aff6579dc2
commit
eec37ffcd8
@ -16,19 +16,23 @@ contain all species that might be present in any upstream reactor.
|
|||||||
Compare this approach for the transient problem to the method used for the
|
Compare this approach for the transient problem to the method used for the
|
||||||
steady-state problem in :doc:`mixing.py <../thermo/mixing>`.
|
steady-state problem in :doc:`mixing.py <../thermo/mixing>`.
|
||||||
|
|
||||||
Requires: cantera >= 2.5.0
|
Requires: cantera >= 3.1.0, graphviz
|
||||||
|
|
||||||
.. tags:: Python, thermodynamics, reactor network, mixture
|
.. tags:: Python, thermodynamics, reactor network, mixture
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import cantera as ct
|
import cantera as ct
|
||||||
|
|
||||||
|
# %%
|
||||||
|
# Set up the reactor network
|
||||||
|
# --------------------------
|
||||||
|
#
|
||||||
# Use air for stream a.
|
# Use air for stream a.
|
||||||
gas_a = ct.Solution('air.yaml')
|
gas_a = ct.Solution('air.yaml')
|
||||||
gas_a.TPX = 300.0, ct.one_atm, 'O2:0.21, N2:0.78, AR:0.01'
|
gas_a.TPX = 300.0, ct.one_atm, 'O2:0.21, N2:0.78, AR:0.01'
|
||||||
rho_a = gas_a.density
|
rho_a = gas_a.density
|
||||||
|
|
||||||
|
# %%
|
||||||
# Use GRI-Mech 3.0 for stream b (methane) and for the mixer. If it is desired
|
# Use GRI-Mech 3.0 for stream b (methane) and for the mixer. If it is desired
|
||||||
# to have a pure mixer, with no chemistry, use instead a reaction mechanism
|
# to have a pure mixer, with no chemistry, use instead a reaction mechanism
|
||||||
# for gas_b that has no reactions.
|
# for gas_b that has no reactions.
|
||||||
@ -36,36 +40,48 @@ gas_b = ct.Solution('gri30.yaml')
|
|||||||
gas_b.TPX = 300.0, ct.one_atm, 'CH4:1'
|
gas_b.TPX = 300.0, ct.one_atm, 'CH4:1'
|
||||||
rho_b = gas_b.density
|
rho_b = gas_b.density
|
||||||
|
|
||||||
|
# %%
|
||||||
# Create reservoirs for the two inlet streams and for the outlet stream. The
|
# Create reservoirs for the two inlet streams and for the outlet stream. The
|
||||||
# upsteam reservoirs could be replaced by reactors, which might themselves be
|
# upstream reservoirs could be replaced by reactors, which might themselves be
|
||||||
# connected to reactors further upstream. The outlet reservoir could be
|
# connected to reactors further upstream. The outlet reservoir could be
|
||||||
# replaced with a reactor with no outlet, if it is desired to integrate the
|
# replaced with a reactor with no outlet, if it is desired to integrate the
|
||||||
# composition leaving the mixer in time, or by an arbitrary network of
|
# composition leaving the mixer in time, or by an arbitrary network of
|
||||||
# downstream reactors.
|
# downstream reactors.
|
||||||
res_a = ct.Reservoir(gas_a)
|
res_a = ct.Reservoir(gas_a, name='air')
|
||||||
res_b = ct.Reservoir(gas_b)
|
res_b = ct.Reservoir(gas_b, name='fuel')
|
||||||
downstream = ct.Reservoir(gas_b)
|
downstream = ct.Reservoir(gas_b, name='outlet')
|
||||||
|
|
||||||
|
# %%
|
||||||
# Create a reactor for the mixer. A reactor is required instead of a
|
# Create a reactor for the mixer. A reactor is required instead of a
|
||||||
# reservoir, since the state will change with time if the inlet mass flow
|
# reservoir, since the state will change with time if the inlet mass flow
|
||||||
# rates change or if there is chemistry occurring.
|
# rates change or if there is chemistry occurring.
|
||||||
gas_b.TPX = 300.0, ct.one_atm, 'O2:0.21, N2:0.78, AR:0.01'
|
gas_b.TPX = 300.0, ct.one_atm, 'O2:0.21, N2:0.78, AR:0.01'
|
||||||
mixer = ct.IdealGasReactor(gas_b)
|
mixer = ct.IdealGasReactor(gas_b, name='mixer')
|
||||||
|
|
||||||
# create two mass flow controllers connecting the upstream reservoirs to the
|
# %%
|
||||||
|
# Create two mass flow controllers connecting the upstream reservoirs to the
|
||||||
# mixer, and set their mass flow rates to values corresponding to
|
# mixer, and set their mass flow rates to values corresponding to
|
||||||
# stoichiometric combustion.
|
# stoichiometric combustion.
|
||||||
mfc1 = ct.MassFlowController(res_a, mixer, mdot=rho_a*2.5/0.21)
|
mfc1 = ct.MassFlowController(res_a, mixer, mdot=rho_a*2.5/0.21)
|
||||||
mfc2 = ct.MassFlowController(res_b, mixer, mdot=rho_b*1.0)
|
mfc2 = ct.MassFlowController(res_b, mixer, mdot=rho_b*1.0)
|
||||||
|
|
||||||
# connect the mixer to the downstream reservoir with a valve.
|
# %%
|
||||||
|
# Connect the mixer to the downstream reservoir with a valve.
|
||||||
outlet = ct.Valve(mixer, downstream, K=10.0)
|
outlet = ct.Valve(mixer, downstream, K=10.0)
|
||||||
|
|
||||||
sim = ct.ReactorNet([mixer])
|
sim = ct.ReactorNet([mixer])
|
||||||
|
|
||||||
# Since the mixer is a reactor, we need to integrate in time to reach steady
|
# %%
|
||||||
# state
|
# Get the mixed state
|
||||||
|
# -------------------
|
||||||
|
#
|
||||||
|
# Since the mixer is a reactor, we need to integrate in time to reach steady state.
|
||||||
sim.advance_to_steady_state()
|
sim.advance_to_steady_state()
|
||||||
|
|
||||||
# view the state of the gas in the mixer
|
# view the state of the gas in the mixer
|
||||||
print(mixer.thermo.report())
|
print(mixer.thermo.report())
|
||||||
|
|
||||||
|
# %%
|
||||||
|
# Show the network structure
|
||||||
|
# --------------------------
|
||||||
|
diagram = sim.draw(print_state=True, species="X")
|
||||||
|
Loading…
Reference in New Issue
Block a user