Note
Go to the end to download the full example code.
Adiabatic, constant pressure reactor#
This example illustrates how to use class Reactor for zero-dimensional
kinetics simulations. Here the parameters are set so that the reactor is
adiabatic and very close to constant pressure.
function reactor1(g)
tic
help reactor1
if nargin == 1
gas = g;
else
gas = Solution('gri30.yaml', 'gri30', 'none');
end
P = 101325.0;
set the initial conditions#
gas.TP = {1001.0, P};
nsp = gas.nSpecies;
xx = zeros(nsp, 1);
xx(1) = 0.285;
xx(4) = 0.142;
xx(48) = 0.573;
gas.X = xx;
create a reactor, and insert the gas#
r = IdealGasReactor(gas);
create a reservoir to represent the environment#
a = Solution('air.yaml', 'air', 'none');
a.TP = {a.T, P};
env = Reservoir(a);
Define a wall between the reactor and the environment and make it flexible, so that the pressure in the reactor is held at the environment pressure.
w = Wall(r, env);
Set expansion parameter. dV/dt = KA(P_1 - P_2)#
w.expansionRateCoeff = 1.0e6;
Set wall area#
w.area = 1.0;
create a reactor network and insert the reactor:#
network = ReactorNet({r});
nSteps = 100;
tim(nSteps) = 0;
temp(nSteps) = 0;
x(nSteps, 3) = 0;
t = 0.0;
dt = 1.0e-5;
t0 = cputime;
for n = 1:nSteps
t = t + dt;
network.advance(t);
tim(n) = network.time;
temp(n) = r.T;
x(n, 1:3) = r.phase.moleFraction({'OH', 'H', 'H2'});
end
disp(['CPU time = ' num2str(cputime - t0)]);
clf;
subplot(2, 2, 1);
plot(tim, temp);
xlabel('Time (s)');
ylabel('Temperature (K)');
subplot(2, 2, 2)
plot(tim, x(:, 1));
xlabel('Time (s)');
ylabel('OH Mole Fraction (K)');
subplot(2, 2, 3)
plot(tim, x(:, 2));
xlabel('Time (s)');
ylabel('H Mole Fraction (K)');
subplot(2, 2, 4)
plot(tim, x(:, 3));
xlabel('Time (s)');
ylabel('H2 Mole Fraction (K)');
toc
end