88 lines
2.2 KiB
Matlab
88 lines
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);
|