Open
Description
Cantera version
2.5.0a3
Expected Behavior
A single approach for solving surface problems in the context of zero-dimensional simulations.
Actual Behavior
There appear to be two distinct approaches to simulate surface kinetics problems.
InterfaceKinetics
Reactor
+ReactorSurface
object in a reactor network- Time integration is handled by two completely separate functions (
advance_coverages
vsadvance
).
Proposal
It is conceivable to merge the approaches by introducing something along the lines of
Example 1: diamond_cvd.py
g, dbulk = ct.import_phases('diamond.cti', ['gas', 'diamond'])
d = ct.Interface('diamond.cti', 'diamond_100')
gas = ct.Reservoir(g)
solid = ct.Reactor(dbulk)
surf = ct.Surface(d, [gas, solid])
sim = ct.ReactorNet([solid, surf])
sim.advance(some_end_time)
Example 2: surf_pfr.py
gas = ct.Solution('methane_pox_on_pt.cti', gas)
surf = ct.Interface('methane_pox_on_pt.cti', 'Pt_surf')
reactor = ct.IdealGasReactor(gas)
surf = ct.Surface(d, [reactor])
# skipping inlet/outlet plumbing for brevity
sim = ct.ReactorNet([reactor, surf])
sim.advance_to_steady_state()
There are obviously other scenarios, e.g. edges / triple phase boundaries.
The steps to allow for this would require some changes of ReactorBase
-derived classes, but would eliminate redundancies in the long run.
An advantage of this approach would be that only one time integration approach needs to be maintained. Further, any future serialization would use the same framework.