91 lines
2.2 KiB
Matlab
91 lines
2.2 KiB
Matlab
% SURFREACTOR Zero-dimensional reactor with surface chemistry
|
|
%
|
|
% This example illustrates how to use class 'Reactor' for
|
|
% zero-dimensional simulations including both homogeneous and
|
|
% heterogeneous chemistry.
|
|
|
|
help surfreactor
|
|
|
|
t = 870.0;
|
|
gas = importPhase('ptcombust.cti','gas');
|
|
|
|
% set the initial conditions
|
|
set(gas,'T',t,'P',oneatm,'X','CH4:0.01, O2:0.21, N2:0.78');
|
|
|
|
% The surface reaction mechanism describes catalytic combustion of
|
|
% methane on platinum, and is from Deutschman et al., 26th
|
|
% Symp. (Intl.) on Combustion,1996, pp. 1747-1754
|
|
surf = importInterface('ptcombust.cti','Pt_surf', gas);
|
|
setTemperature(surf, t);
|
|
|
|
nsp = nSpecies(gas);
|
|
|
|
% create a reactor, and insert the gas
|
|
r = Reactor(gas);
|
|
setInitialVolume(r, 1.0e-6)
|
|
|
|
% create a reservoir to represent the environment
|
|
a = IdealGasMix('air.cti');
|
|
set(a,'T',t,'P',oneatm);
|
|
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;
|
|
install(w,r,env);
|
|
|
|
% set the surface mechanism on the left side of the wall (facing
|
|
% reactor 'r' to 'surf'. No surface mechanism will be installed on
|
|
% the air side.
|
|
setKinetics(w, surf, 0);
|
|
|
|
% set the wall area and heat transfer coefficient.
|
|
setArea(w, 1.0e-4);
|
|
setHeatTransferCoeff(w,1.0e1); % W/m2/K
|
|
|
|
% set expansion rate parameter. dV/dt = KA(P_1 - P_2)
|
|
setExpansionRateCoeff(w, 1.0);
|
|
|
|
network = ReactorNet({r});
|
|
% setTolerances(network, 1.0e-8, 1.0e-12);
|
|
|
|
t = 0;
|
|
dt = 0.1;
|
|
t0 = cputime;
|
|
p0 = pressure(r);
|
|
names = {'CH4','CO','CO2','H2O'};
|
|
x = zeros([100 4]);
|
|
for n = 1:100
|
|
t = t + dt;
|
|
advance(network, t);
|
|
tim(n) = t;
|
|
temp(n) = temperature(r);
|
|
pres(n) = pressure(r) - p0;
|
|
cov(n,:) = coverages(surf)';
|
|
x(n,:) = moleFraction(gas,names);
|
|
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,pres);
|
|
axis([0 5 -0.1 0.1]);
|
|
xlabel('Time (s)');
|
|
ylabel('Delta Pressure (Pa)');
|
|
subplot(2,2,3);
|
|
semilogy(tim,cov);
|
|
xlabel('Time (s)');
|
|
ylabel('Coverages');
|
|
legend(speciesNames(surf));
|
|
subplot(2,2,4);
|
|
plot(tim,x);
|
|
xlabel('Time (s)');
|
|
ylabel('Mole Fractions');
|
|
legend(names);
|
|
clear all
|
|
cleanup
|