""
Constant-Volume, adiabatic kinetics simulation.
Requires: cantera >= 2.5.0, matplotlib >= 2.0
"""
import sys
import cantera as ct
gas = ct.Solution('gri30.yaml')
#gas.TPX = 1001.0, ct.one_atm, 'H2:2,O2:1,N2:3.76'
Pres = [1e5, 2e5, 3e5 ,4e5, 5e5]
for P in Pres :
gas.TP = 1300.0, P
gas.set_equivalence_ratio(1,'CH4:1.0', 'O2:1.0, N2:3.76')
r = ct.IdealGasReactor(gas)
sim = ct.ReactorNet([r])
sim.verbose = True
r.volume = 0.002
# limit advance when temperature difference is exceeded
delta_T_max = 20.
r.set_advance_limit('temperature', delta_T_max)
dt_max = 20.e-5
t_end = 100 * dt_max
states = ct.SolutionArray(gas, extra=['t'])
print('{:10s} {:10s} {:10s} {:14s}'.format(
't [s]', 'T [K]', 'P [Pa]', 'u [J/kg]'))
while sim.time < t_end:
sim.advance(sim.time + dt_max)
states.append(r.thermo.state, t=sim.time*1e3)
print('{:10.3e} {:10.3f} {:10.3f} {:14.6f}'.format(
sim.time, r.T, r.thermo.P, r.thermo.u))
# Plot the results if matplotlib is installed.
# See
http://matplotlib.org/ to get it.
import matplotlib.pyplot as plt
#plt.clf()
plt.subplot(1, 3,1)
plt.plot(states.t, states.P, label='Pi ='+str(P))
plt.xlabel('Time (ms)')
plt.ylabel('Pressure (Pa)')
plt.subplot(1, 3, 2)
plt.scatter(P, max(states.P) * 1e-5)
plt.xlabel('Initial pressure (bar)')
plt.ylabel('Max pressure (bar)')
best reagrds