Cantera/Sensitivity Analysis: Difference between revisions
From charlesreid1
(Created page with " via https://groups.google.com/forum/#!topic/cantera-users/qMOxAdolJiA <pre> """ Sensitivity analysis for a freely-propagating, premixed methane-air flame. Reports the sensitiv...") |
No edit summary |
||
| Line 1: | Line 1: | ||
via https://groups.google.com/forum/#!topic/cantera-users/qMOxAdolJiA | |||
=Cantera 2.1 Script= | |||
<pre> | <pre> | ||
Revision as of 19:02, 6 March 2014
via https://groups.google.com/forum/#!topic/cantera-users/qMOxAdolJiA
Cantera 2.1 Script
"""
Sensitivity analysis for a freely-propagating, premixed methane-air
flame. Reports the sensitivity of the flame speed with respect to each
reaction rate constant.
"""
from __future__ import print_function
import cantera as ct
# Simulation parameters
p = ct.one_atm # pressure [Pa]
Tin = 300.0 # unburned gas temperature [K]
reactants = 'CH4:0.45, O2:1.0, N2:3.76'
initial_grid = [0.0, 0.001, 0.01, 0.02, 0.029, 0.03] # m
tol_ss = [1.0e-7, 1.0e-13] # [rtol atol] for steady-state problem
tol_ts = [1.0e-4, 1.0e-13] # [rtol atol] for time stepping
# IdealGasMix object used to compute mixture properties
gas = ct.Solution('gri30.xml', 'gri30_mix')
gas.TPX = Tin, p, reactants
# Flame object
f = ct.FreeFlame(gas, initial_grid)
f.flame.set_steady_tolerances(default=tol_ss)
f.flame.set_transient_tolerances(default=tol_ts)
# Set properties of the upstream fuel-air mixture
f.inlet.T = Tin
f.inlet.X = reactants
# Solve with the energy equation disabled
f.energy_enabled = False
f.set_max_jac_age(10, 10)
f.set_time_step(1e-5, [2, 5, 10, 20])
f.solve(loglevel=1, refine_grid=False)
# Solve with the energy equation enabled
f.set_refine_criteria(ratio=3, slope=0.06, curve=0.12)
f.energy_enabled = True
f.solve(loglevel=1, refine_grid=True)
Su0 = f.u[0]
print('mixture-averaged flamespeed = {:7f} m/s'.format(f.u[0]))
for m in range(gas.n_reactions):
dk = 5e-2
gas.set_multiplier(1.0)
gas.set_multiplier(1+dk, m)
f.solve(loglevel=0, refine_grid=False)
Su = f.u[0]
print('k/S*dS/dk[{: 3d}] = {: .3e} [{}]'.format(
m, (Su-Su0)/(Su0*dk), gas.reaction_equation(m)))