From 4c188f51b3606aa507094d1af5b0c608734f4b69 Mon Sep 17 00:00:00 2001 From: Dave Goodwin Date: Fri, 23 Jun 2006 14:28:53 +0000 Subject: [PATCH] added combustor example --- Cantera/python/examples/reactors/combustor.py | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 Cantera/python/examples/reactors/combustor.py diff --git a/Cantera/python/examples/reactors/combustor.py b/Cantera/python/examples/reactors/combustor.py new file mode 100644 index 000000000..752aaac1c --- /dev/null +++ b/Cantera/python/examples/reactors/combustor.py @@ -0,0 +1,83 @@ +""" A combustor. Two separate stream - one pure methane and the other + air, both at 300 K and 1 atm flow into an adiabatic combustor where + they mix. We are interested in the steady-state burning + solution. Since at 300 K no reaction will occur between methane and + air, we need to use an 'igniter' to initiate the chemistry. A simple + igniter is a pulsed flow of atomic hydrogen. After the igniter is + turned off, the system approaches the steady burning solution.""" + +from Cantera import * +from Cantera.Reactor import * +from Cantera.Func import * + +# use reaction mechanism GRI-Mech 3.0 +gas = GRI30() + +# create a reservoir for the fuel inlet, and set to pure methane. +gas.set(T = 300.0, P = OneAtm, X = 'CH4:1.0') +fuel_in = Reservoir(gas) +fuel_mw = gas.meanMolarMass() + +# use predefined function Air() for the air inlet +air = Air() +air_in = Reservoir(air) +air_mw = air.meanMolarMass() + +# to ignite the fuel/air mixture, we'll introduce a pulse of radicals. +# The steady-state behavior is independent of how we do this, so we'll +# just use a stream of pure atomic hydrogen. +gas.set(T = 300.0, P = OneAtm, X = 'H:1.0') +igniter = Reservoir(gas) + + +# create the combustor, and fill it in initially with N2 +gas.set(T = 300.0, P = OneAtm, X = 'N2:1.0') +combustor = Reactor(contents = gas, volume = 1.0) + +# create a reservoir for the exhaust +exhaust = Reservoir(gas) + +# lean combustion, phi = 0.5 +equiv_ratio = 0.5 + +# compute fuel and air mass flow rates +factor = 0.1 +air_mdot = factor*9.52*air_mw +fuel_mdot = factor*equiv_ratio*fuel_mw + +# create and install the mass flow controllers. Controllers +# m1 and m2 provide constant mass flow rates, and m3 provides +# a short Gaussian pulse only to ignite the mixture +m1 = MassFlowController(upstream = fuel_in, + downstream = combustor, mdot = fuel_mdot) + +# note that this connects two reactors with different reaction +# mechanisms and different numbers of species. Downstream and upstream +# species are matched by name. +m2 = MassFlowController(upstream = air_in, + downstream = combustor, mdot = air_mdot) + +# The igniter will use a Guassiam 'functor' object to specify the +# time-dependent igniter mass flow rate. +igniter_mdot = Gaussian(t0 = 1.0, FWHM = 0.2, A = 0.1) +m3 = MassFlowController(upstream = igniter, + downstream = combustor, mdot = igniter_mdot) + +# put a valve on the exhaust line to regulate the pressure +v = Valve(upstream = combustor, downstream = exhaust, Kv = 1.0) + +# the simulation only contains one reactor +sim = ReactorNet([combustor]) + +# take single steps to 6 s, writing the results to a CSV file +# for later plotting. +tfinal = 6.0 +tnow = 0.0 +f = open('combustor.csv','w') +while tnow < tfinal: + tnow = sim.step(tfinal) + tres = combustor.mass()/v.massFlowRate() + writeCSV(f, [tnow, combustor.temperature(), tres] + +list(combustor.moleFractions())) +f.close() +