Hi Francesco,
This is an interesting problem, and it poses a bit of a challenge for Cantera’s current reactor network model. I think the main problem that you’re running into is that by defining:
SurfArea = (GAS_reactor.volume**(1/3))**2/6 surfPLA = ct.ReactorSurface(pyrolysis_phase, r=PLA_reactor, A=SurfArea) surfGAS = ct.ReactorSurface(pyrolysis_phase, r=GAS_reactor, A=SurfArea)You’re really creating two separate reactor surfaces which have their own independent reaction rates but communicate with only one bulk phase. The reaction rates on the surface will be computed using the temperature of the bulk phase in the linked reactor, and then bulk phase species produced / consumed in that phase will be accounted for in the governing equations for that reactor. No accounting is done for production/consumption of species in the other bulk phase, however. If the two reactors stay at the same temperature, then these two ReactorSurface objects will give consistent results, and the transfer of species from one bulk phase to the other will be modeled correctly. But as soon as the temperatures (and therefore reaction rates) diverge, this will no longer be correct.
There’s been some discussion on how to improve this situation with a revised handling of reactor surfaces, which you can find in this Enhancement discussion.
In the meantime, I think your situation could be a good use case for the ExtensibleReactor concept. Instead of having a full reactor for the solid phase, you would just augment the equations for the gas phase reactor to include a variable for the mass of the solid phase. The equation for this mass would be defined in terms of the net rate of consumption on the (one) ReactorSurface, and there would be an additional term in the energy equation for the heat capacity of the solid. A couple relevant examples can be found in custom2.py and the User Guide.
If you’re able to get this working, it might be another good example for the ExtensibleReactor feature to include with Cantera.
Regards,
Ray