There are no classes named 'GasMix' or (lowercase) 'solution', so these checks would always fail and the input argument would always be silently ignored.
105 lines
2.6 KiB
Matlab
105 lines
2.6 KiB
Matlab
function plotdata = ignite(g)
|
|
% IGNITE Zero-dimensional kinetics: adiabatic, constant pressure.
|
|
%
|
|
% This example solves the same problem as 'reactor1,' but does
|
|
% it using on of MATLAB's ODE integrators, rather than using the
|
|
% Cantera Reactor class.
|
|
%
|
|
|
|
help ignite
|
|
|
|
if nargin == 1
|
|
gas = g;
|
|
else
|
|
gas = IdealGasMix('gri30.xml');
|
|
end
|
|
|
|
nsp = nSpecies(gas);
|
|
|
|
% set the initial conditions
|
|
|
|
set(gas,'T',1001.0,'P',oneatm,'X','H2:2,O2:1,N2:4');
|
|
|
|
y0 = [intEnergy_mass(gas)
|
|
1.0/density(gas)
|
|
massFractions(gas)];
|
|
|
|
time_interval = [0 0.001];
|
|
options = odeset('RelTol',1.e-5,'AbsTol',1.e-12,'Stats','on');
|
|
|
|
t0 = cputime;
|
|
out = ode15s(@reactor_ode,time_interval,y0,options,gas,@vdot,@area,@heatflux);
|
|
disp(['CPU time = ' num2str(cputime - t0)]);
|
|
|
|
plotdata = output(out,gas);
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% the functions below may be defined arbitrarily to set the reactor
|
|
% boundary conditions - the rate of change of volume, the heat
|
|
% flux, and the area.
|
|
|
|
|
|
% Rate of change of volume. Any arbirtrary function may be implemented.
|
|
% Input arguments:
|
|
% t time
|
|
% vol volume
|
|
% gas ideal gas object
|
|
|
|
function v = vdot(t, vol, gas)
|
|
%v = 0.0; %uncomment for constant volume
|
|
v = 1.e11 * (pressure(gas) - 101325.0); % holds pressure very
|
|
% close to 1 atm
|
|
|
|
% heat flux (W/m^2).
|
|
function q = heatflux(t, gas)
|
|
q = 0.0; % adiabatic
|
|
|
|
|
|
% surface area (m^2). Used only to compute heat transfer.
|
|
function a = area(t,vol)
|
|
a = 1.0;
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
% Since the solution variables used by the 'reactor' function are
|
|
% not necessarily those desired for output, this function is called
|
|
% after the integration is complete to generate the desired
|
|
% outputs.
|
|
|
|
function pv = output(s, gas)
|
|
times = s.x;
|
|
soln = s.y;
|
|
[m n] = size(times);
|
|
pv = zeros(nSpecies(gas) + 4, n);
|
|
|
|
set(gas,'T',1001.0,'P',oneatm);
|
|
|
|
for j = 1:n
|
|
ss = soln(:,j);
|
|
y = ss(3:end);
|
|
mass = sum(y);
|
|
u_mass = ss(1)/mass;
|
|
v_mass = ss(2)/mass;
|
|
setMassFractions(gas, y);
|
|
setState_UV(gas, [u_mass v_mass]);
|
|
|
|
pv(1,j) = times(j);
|
|
pv(2,j) = temperature(gas);
|
|
pv(3,j) = density(gas);
|
|
pv(4,j) = pressure(gas);
|
|
pv(5:end,j) = y;
|
|
end
|
|
|
|
% plot the temperature and OH mass fractions.
|
|
figure(1);
|
|
plot(pv(1,:),pv(2,:));
|
|
xlabel('time');
|
|
ylabel('Temperature');
|
|
title(['Final T = ' num2str(pv(2,end)) ' K']);
|
|
|
|
figure(2);
|
|
ioh = speciesIndex(gas,'OH');
|
|
plot(pv(1,:),pv(4+ioh,:));
|
|
xlabel('time');
|
|
ylabel('Mass Fraction');
|
|
title('OH Mass Fraction');
|