128 lines
3.6 KiB
Matlab
128 lines
3.6 KiB
Matlab
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%
|
|
% An axisymmetric stagnation-point non-premixed flame
|
|
%
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
t0 = cputime; % record the starting time
|
|
|
|
|
|
% parameter values
|
|
p = oneatm; % pressure
|
|
tin = 300.0; % inlet temperature
|
|
mdot_o = 0.72; % air, kg/m^2/s
|
|
mdot_f = 0.24; % fuel, kg/m^2/s
|
|
|
|
rxnmech = 'gri30.xml'; % reaction mechanism file
|
|
transport = 'Mix'; % transport model
|
|
comp1 = 'O2:0.21, N2:0.78, AR:0.01'; % air composition
|
|
comp2 = 'C2H6:1'; % fuel composition
|
|
|
|
initial_grid = 0.02*[0.0 0.2 0.4 0.6 0.8 1.0]; % m
|
|
|
|
tol_ss = [1.0e-5 1.0e-13]; % [rtol atol] for steady-state
|
|
% problem
|
|
tol_ts = [1.0e-4 1.0e-13]; % [rtol atol] for time stepping
|
|
|
|
loglevel = 1; % amount of diagnostic output (0
|
|
% to 5)
|
|
|
|
refine_grid = 1; % 1 to enable refinement, 0 to
|
|
% disable
|
|
|
|
|
|
%%%%%%%%%%%%%%%% create the gas object %%%%%%%%%%%%%%%%%%%%%%%%
|
|
%
|
|
% This object will be used to evaluate all thermodynamic, kinetic,
|
|
% and transport properties
|
|
%
|
|
gas = GRI30('Mix'); %IdealGasMix(rxnmech, transport);
|
|
|
|
% set its state to that of the fuel (arbitrary)
|
|
set(gas,'T', tin, 'P', p, 'X', comp2);
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%%% create the flow object %%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
f = AxisymmetricFlow(gas,'flow');
|
|
|
|
set(f, 'P', p, 'grid', initial_grid);
|
|
set(f, 'tol', tol_ss, 'tol-time', tol_ts);
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%%% create the air inlet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%
|
|
% The temperature, mass flux, and composition (relative molar) may be
|
|
% specified.
|
|
%
|
|
inlet_o = Inlet('air_inlet');
|
|
set(inlet_o, 'T', tin, 'MassFlux', mdot_o, 'X', comp1);
|
|
|
|
|
|
|
|
%%%%%%%%%%%%%% create the fuel inlet %%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
%
|
|
%
|
|
inlet_f = Inlet('fuel_inlet');
|
|
set(inlet_f, 'T', tin, 'MassFlux', mdot_f, 'X', comp2);
|
|
|
|
|
|
%%%%%%%%%%%%% create the flame object %%%%%%%%%%%%
|
|
%
|
|
% Once the component parts have been created, they can be assembled
|
|
% to create the flame object.
|
|
%
|
|
fl = flame(gas, inlet_o, f, inlet_f);
|
|
|
|
% if the starting solution is to be read from a previously-saved
|
|
% solution, uncomment this line and edit the file name and solution id.
|
|
%restore(fl,'h2flame2.xml', 'energy')
|
|
|
|
% solve with fixed temperature profile first
|
|
solve(fl, loglevel, refine_grid);
|
|
|
|
|
|
%%%%%%%%%%%% enable the energy equation %%%%%%%%%%%%%%%%%%%%%
|
|
%
|
|
% The energy equation will now be solved to compute the
|
|
% temperature profile. We also tighten the grid refinement
|
|
% criteria to get an accurate final solution.
|
|
%
|
|
|
|
enableEnergy(f);
|
|
setRefineCriteria(fl, 2, 200.0, 0.1, 0.1);
|
|
solve(fl, loglevel, refine_grid);
|
|
saveSoln(fl,'c2h6.xml','energy',['solution with energy' ...
|
|
' equation']);
|
|
|
|
|
|
%%%%%%%%%% show statistics %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
writeStats(fl);
|
|
elapsed = cputime - t0;
|
|
e = sprintf('Elapsed CPU time: %10.4g',elapsed);
|
|
disp(e);
|
|
|
|
|
|
%%%%%%%%%% make plots %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
figure(1);
|
|
subplot(2,3,1);
|
|
plotSolution(fl, 'flow', 'T');
|
|
title('Temperature [K]');
|
|
subplot(2,3,2);
|
|
plotSolution(fl, 'flow', 'C2H6');
|
|
title('C2H6 Mass Fraction');
|
|
subplot(2,3,3);
|
|
plotSolution(fl, 'flow', 'O2');
|
|
title('O2 Mass Fraction');
|
|
subplot(2,3,4);
|
|
plotSolution(fl, 'flow', 'CH');
|
|
title('CH Mass Fraction');
|
|
subplot(2,3,5);
|
|
plotSolution(fl, 'flow', 'V');
|
|
title('Radial Velocity / Radius [s^-1]');
|
|
subplot(2,3,6);
|
|
plotSolution(fl, 'flow', 'u');
|
|
title('Axial Velocity [m/s]');
|