cantera/samples/matlab/flame.m
Ray Speth 2528df0f75 Reorganized source tree structure
These changes make it unnecessary to copy header files around during
the build process, which tends to confuse IDEs and debuggers. The
headers which comprise Cantera's external C++ interface are now in
the 'include' directory.

All of the samples and demos are now in the 'samples' subdirectory.
2012-02-12 02:27:14 +00:00

90 lines
No EOL
2.2 KiB
Matlab

function f = flame(gas, left, flow, right)
% FLAME - create a flame object.
%
% gas -- object representing the gas. This object will be used to
% compute all required thermodynamic, kinetic, and transport
% properties. The state of this object should be set
% to an estimate of the gas state emerging from the
% burner before calling StagnationFlame.
%
% left -- object representing the burner, which must be
% created using function Inlet.
%
% flow -- object representing the flow, created with
% function AxisymmetricFlow.
%
% right -- object representing the surface.
%
% Check input parameters
if nargin ~= 4
error('wrong number of input arguments.');
end
if ~isIdealGas(gas)
error('gas object must represent an ideal gas mixture.');
end
if ~isInlet(left)
error('burner object of wrong type.');
end
if ~isFlow(flow)
error('flow object of wrong type.');
end
flametype = 0;
if isSurface(right)
flametype = 1;
elseif isInlet(right)
flametype = 3;
end
% create the container object
f = Stack([left flow right]);
% set default initial profiles.
rho0 = density(gas);
% find the adiabatic flame temperature and corresponding
% equilibrium composition
equilibrate(gas, 'HP');
teq = temperature(gas);
yeq = massFractions(gas);
rhoeq = density(gas);
z1 = 0.2;
mdot0 = massFlux(left);
mdot1 = massFlux(right);
t0 = temperature(left);
if flametype == 0
t1 = teq;
mdot1 = -mdot0;
else
t1 = temperature(right);
end
zz = z(flow);
dz = zz(end) - zz(1);
setProfile(f, 2, {'u', 'V'}, [0.0 1.0
mdot0/rho0 -mdot1/rho0
0.0 0.0]);
setProfile(f, 2, 'T', [0.0 z1 1.0; t0 2000.0 t1]);
for n = 1:nSpecies(gas)
nm = speciesName(gas,n);
if strcmp(nm,'H') | strcmp(nm,'OH') | strcmp(nm,'O') | ...
strcmp(nm,'HO2')
yint = 1.0*yeq(n);
else
yint = yeq(n);
end
if flametype == 3
y1 = massFraction(right, n);
else
y1 = yeq(n);
end
setProfile(f, 2, nm, [0 z1 1
massFraction(left, n) yint y1]);
end
% set minimal grid refinement criteria
setRefineCriteria(f, 2, 10.0, 0.8, 0.8);