85 lines
No EOL
3 KiB
Matlab
85 lines
No EOL
3 KiB
Matlab
% Tutorial 4: Chemical Equilibrium
|
|
%
|
|
% Topics:
|
|
% - the equilibrate method
|
|
% - specifying fixed TP, HP, UV, SV, or SP
|
|
% - checking reaction rates of progress
|
|
%
|
|
help tut4
|
|
|
|
% To set a gas mixture to a state of chemical equilibrium, use the
|
|
% 'equilibrate' method.
|
|
%
|
|
g = GRI30;
|
|
set(g,'T',1200.0,'P',oneatm,'X','CH4:0.95,O2:2,N2:7.52')
|
|
equilibrate(g,'TP')
|
|
|
|
% The above statement sets the state of object 'g' to the state of
|
|
% chemical equilibrium holding temperature and pressure
|
|
% fixed. Alternatively, the specific enthalpy and pressure can be held
|
|
% fixed:
|
|
|
|
disp('fixed H and P:');
|
|
set(g,'T',1200.0,'P',oneatm,'X','CH4:0.95,O2:2.0,N2:7.52');
|
|
equilibrate(g,'HP')
|
|
|
|
|
|
% Other options are
|
|
% 'UV' fixed specific internal energy and specific volume
|
|
% 'SV' fixed specific entropy and specific volume
|
|
% 'SP' fixed specific entropy and pressure
|
|
|
|
disp('fixed U and V:');
|
|
set(g,'T',1200.0,'P',oneatm,'X','CH4:0.95,O2:2,N2:7.52');
|
|
equilibrate(g,'UV')
|
|
|
|
disp('fixed S and V:');
|
|
set(g,'T',1200.0,'P',oneatm,'X','CH4:0.95,O2:2,N2:7.52');
|
|
equilibrate(g,'SV')
|
|
|
|
disp('fixed S and P:');
|
|
set(g,'T',1200.0,'P',oneatm,'X','CH4:0.95,O2:2,N2:7.52');
|
|
equilibrate(g,'SP')
|
|
|
|
% How can you tell if 'equilibrate' has correctly found the
|
|
% chemical equilibrium state? One way is verify that the net rates of
|
|
% progress of all reversible reactions are zero.
|
|
|
|
% Here is the code to do this:
|
|
set(g,'T',2000.0,'P',oneatm,'X','CH4:0.95,O2:2,N2:7.52');
|
|
equilibrate(g,'TP')
|
|
rf = rop_f(g);
|
|
rr = rop_r(g);
|
|
format short e;
|
|
for i = 1:nReactions(g)
|
|
if isReversible(g,i)
|
|
disp([i, rf(i), rr(i), (rf(i) - rr(i))/rf(i)]);
|
|
end
|
|
end
|
|
|
|
|
|
% You might be wondering how 'equilibrate' works. (Then again, you might
|
|
% not, in which case you can go on to the next tutorial now.) Method
|
|
% 'equilibrate' invokes Cantera's chemical equilibrium solver, which
|
|
% uses an element potential method. The element potential method is
|
|
% one of a class of equivalent 'nonstoichiometric' methods that all
|
|
% have the characteristic that the problem reduces to solving a set of
|
|
% M nonlinear algebraic equations, where M is the number of elements
|
|
% (not species). The so-called 'stoichiometric' methods, on the other
|
|
% hand, (including Gibbs minimization), require solving K nonlinear
|
|
% equations, where K is the number of species (usually K >> M). See
|
|
% Smith and Missen, "Chemical Reaction Equilibrium Analysis" for more
|
|
% information on the various algorithms and their characteristics.
|
|
%
|
|
% Cantera uses a damped Newton method to solve these equations, and
|
|
% does a few other things to generate a good starting guess and to
|
|
% produce a reasonably robust algorithm. If you want to know more
|
|
% about the details, look at the on-line documented source code of
|
|
% Cantera C++ class 'ChemEquil' at http://www.cantera.org.
|
|
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
clear all
|
|
cleanup
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% end of tutorial 4
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% |