—
Carbon Black Reactor.#
Simulate carbon black production, using the CarbonBlackIdealGasConstPressureReactor
class to predict the specific surface area of carbon.
import cantera as ct
import matplotlib.pyplot as plt
from spy.misc.arrays import logspace
from bloc.reactors import CarbonBlackIdealGasConstPressureReactor
from bloc.utils import get_mechanism_path
mechanism = get_mechanism_path("Fincke_GRC.yaml")
composition = "CH4:1.0"
T_C = 1300 # °C
P_atm = 1 # atm
g = ct.Solution(mechanism)
g.TPX = T_C + 273.15, P_atm * ct.one_atm, composition
# Cantera units : T in K; P in Pa (converted from one_atm above)
reactor = CarbonBlackIdealGasConstPressureReactor(g, energy="off")
sim = ct.ReactorNet([reactor])
# Create a SolutionArray object to store the simulation results.
states = ct.SolutionArray(g, extra=["t", "specific_surface"])
# Run the simulation for different residence times
for t in logspace(0.001, 1, 50): # s
sim.advance(t)
reactor.residence_time = t # s
print("Residence time: {:.2e} s".format(t))
states.append(
reactor.thermo.state, t=t, specific_surface=reactor.guess_specific_surface()
)
Residence time: 1.00e-03 s
Residence time: 1.15e-03 s
Residence time: 1.33e-03 s
Residence time: 1.53e-03 s
Residence time: 1.76e-03 s
Residence time: 2.02e-03 s
Residence time: 2.33e-03 s
Residence time: 2.68e-03 s
Residence time: 3.09e-03 s
Residence time: 3.56e-03 s
Residence time: 4.09e-03 s
Residence time: 4.71e-03 s
Residence time: 5.43e-03 s
Residence time: 6.25e-03 s
Residence time: 7.20e-03 s
Residence time: 8.29e-03 s
Residence time: 9.54e-03 s
Residence time: 1.10e-02 s
Residence time: 1.26e-02 s
Residence time: 1.46e-02 s
Residence time: 1.68e-02 s
Residence time: 1.93e-02 s
Residence time: 2.22e-02 s
Residence time: 2.56e-02 s
Residence time: 2.95e-02 s
Residence time: 3.39e-02 s
Residence time: 3.91e-02 s
Residence time: 4.50e-02 s
Residence time: 5.18e-02 s
Residence time: 5.96e-02 s
Residence time: 6.87e-02 s
Residence time: 7.91e-02 s
Residence time: 9.10e-02 s
Residence time: 1.05e-01 s
Residence time: 1.21e-01 s
Residence time: 1.39e-01 s
Residence time: 1.60e-01 s
Residence time: 1.84e-01 s
Residence time: 2.12e-01 s
Residence time: 2.44e-01 s
Residence time: 2.81e-01 s
Residence time: 3.24e-01 s
Residence time: 3.73e-01 s
Residence time: 4.29e-01 s
Residence time: 4.94e-01 s
Residence time: 5.69e-01 s
Residence time: 6.55e-01 s
Residence time: 7.54e-01 s
Residence time: 8.69e-01 s
Residence time: 1.00e+00 s
plt.figure()
plt.plot(states.t, states.specific_surface, "--", lw=2, color="black", label="m2/g")
# set ymin to 0
plt.ylim(bottom=0)
plt.xlabel("Residence time (s)")
plt.ylabel("Specific surface (m2/g)")
# Plot CH4, C2H2 and C(s) mole fractions as a function of residence time on a secondary y-axis
plt.twinx()
plt.plot(states.t, states.Y[:, g.species_index("CH4")] * 100, "r-", label="CH4")
plt.plot(states.t, states.Y[:, g.species_index("C2H2")] * 100, "b-", label="C2H2")
plt.plot(
states.t,
states.Y[:, g.species_index("C(s)")] * 100,
"-",
color="black",
label="C(s)",
)
plt.ylabel("Mass fraction (%)")
plt.legend()
plt.show()

Total running time of the script: (0 minutes 0.991 seconds)