cantera/samples/python/flames/stflame1/stflame1.py
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

117 lines
3.9 KiB
Python

#
# STFLAME1 - A detached flat flame stabilized at a stagnation point
#
# This script simulates a lean hydrogen-oxygen flame stabilized in
# a strained flowfield at an axisymmetric stagnation point on a
# non-reacting surface. The solution begins with a flame attached
# to the inlet (burner), and the mass flow rate is progressively
# increased, causing the flame to detach and move closer to the
# surface. This example illustrates use of the new 'prune' grid
# refinement parameter, which allows grid points to be removed if
# they are no longer required to resolve the solution. This is
# important here, since the flamefront moves as the mass flowrate
# is increased. Without using 'prune', a large number of grid
# points would be concentrated upsteam of the flame, where the
# flamefront had been previously. (To see this, try setting prune
# to zero.)
from Cantera import *
from Cantera.OneD import *
from Cantera.OneD.StagnationFlow import StagnationFlow
################################################################
#
# parameter values
#
p = 0.05*OneAtm # pressure
tburner = 373.0 # burner temperature
tsurf = 600.0
# each mdot value will be solved to convergence, with grid refinement,
# and then that solution will be used for the next mdot
mdot = [0.06, 0.07, 0.08, 0.09, 0.1, 0.11, 0.12] # kg/m^2/s
rxnmech = 'h2o2.cti' # reaction mechanism file
comp = 'H2:1.8, O2:1, AR:7' # premixed gas composition
# The solution domain is chosen to be 50 cm, and a point very near the
# downstream boundary is added to help with the zero-gradient boundary
# condition at this boundary.
initial_grid = [0.0, 0.02, 0.04, 0.06, 0.08, 0.1,
0.15, 0.2] # m
tol_ss = [1.0e-5, 1.0e-13] # [rtol atol] for steady-state
# problem
tol_ts = [1.0e-4, 1.0e-9] # [rtol atol] for time stepping
loglevel = 1 # amount of diagnostic output (0
# to 5)
refine_grid = 1 # 1 to enable refinement, 0 to
# disable
ratio = 5.0
slope = 0.1
curve = 0.2
prune = 0.05
################ create the gas object ########################
#
# This object will be used to evaluate all thermodynamic, kinetic,
# and transport properties
#
gas = IdealGasMix(rxnmech)
# set its state to that of the unburned gas at the burner
gas.setState_TPX(tburner, p, comp)
# Create the stagnation flow object with a non-reactive surface. (To
# make the surface reactive, supply a surface reaction mechanism. see
# example catcomb.py for how to do this.)
f = StagnationFlow(gas = gas, grid = initial_grid)
# set the properties at the inlet
f.inlet.set(massflux = mdot[0], mole_fractions = comp, temperature = tburner)
# set the surface state
f.surface.setTemperature(tsurf)
f.set(tol = tol_ss, tol_time = tol_ts)
f.setMaxJacAge(5, 10)
f.set(energy = 'off')
f.init(products = 'equil') # assume adiabatic equilibrium products
f.showSolution()
f.solve(loglevel, refine_grid)
f.setRefineCriteria(ratio = ratio, slope = slope,
curve = curve, prune = prune)
f.set(energy = 'on')
m = 0
for md in mdot:
f.inlet.set(mdot = md)
f.solve(loglevel,refine_grid)
m = m + 1
f.save('stflame1.xml','mdot'+`m`,'mdot = '+`md`+' kg/m2/s')
# write the velocity, temperature, and mole fractions to a CSV file
z = f.flow.grid()
T = f.T()
u = f.u()
V = f.V()
fcsv = open('stflame1_'+`m`+'.csv','w')
writeCSV(fcsv, ['z (m)', 'u (m/s)', 'V (1/s)', 'T (K)']
+ list(gas.speciesNames()))
for n in range(f.flow.nPoints()):
f.setGasState(n)
writeCSV(fcsv, [z[n], u[n], V[n], T[n]]+list(gas.moleFractions()))
fcsv.close()
print 'solution saved to flame1.csv'
f.showStats()