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.
90 lines
No EOL
2.2 KiB
Matlab
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); |