Open BangShiuh opened 6 months ago
@speth @ischoegl I am thinking of implementing evalKrFromStruct
for customized reverse rate coefficients. The motivation is that the traditional reverse rate does not apply to plasma reaction such as TwoTempPlasmaRate or ElectronCollisionPlasmaRate. Since evalFromStruct
is required for every rate, evalKrFromStruct
can also be like that or we need a way to have a default evalKrFromStruct
to use the traditional reverse rate coefficient. What do you think?
I've actually been working with @decaluwe and @korffdm on a feature to allow customization of both forward and reverse rate constants, with the initial focus being on electrochemical reactions. I think the following usage outline that I shared with @korffdm should get you started (just replace "ButlerVolmer" with whatever name you want to use, and adjust the calculations accordingly):
electrochem
branch from my fork of Cantera (https://github.com/speth/cantera)ButlerVolmerData
, derived from ReactionData
bool update(const ThermoPhase& phase, const Kinetics& kin) override;
See docstring in ReactionData.h
for what this function needs to do.ButlerVolmerRate
, derived from ReactionRate
double evalFromStruct(const ButlerVolmerData& shared_data) const
to calculate $i_0/nF$ as the closest analogue to the "forward rate constant"void modifyRateConstants(const ButlerVolmerData&, double& kf, double& kr)
. On input, kf
will contain $i_0/nF$. On output, kf
and kr
should be set to include the exponential term (the multiplication by the concentration product term will come afterwards)newMultiRate
using the same pattern as in ArrheniusRate
, with the class names updated accordingly.type
void setParameters(const AnyMap& node, const UnitStack& rate_units) override
and void getParameters(AnyMap& node) const override
to interface with the YAML input format (input and output)check
and validate
methods, if there are any meaningful checks to make (see ReactionRate.h
for signatures and a brief description)modifyOrders
(see description of ReactionRate::orders
) to set the reaction orders correctlyReactionRateFactory
by copying & modifying one of the calls to reg
in the ReactionRateFactory
constructor.I hope this works well for implementing what you need.
@speth I made a small fix so that the rate constant information is correct (this should be only for the information). https://github.com/BangShiuh/cantera/commit/56805fb51df0384f5af000f0667c84bc3d5b147b. Hope this does not impact the performance of updateROP too much.
Abstract
Adding superelastic electron-collision plasma reaction. The steps to calculate this rate are,
U is the threshold of inelastic collision.
Motivation
This type of reaction is important for low-temperature plasma, especially when the electron energy is low. The idea is that collisions between low-energy electrons and the excited species can heat the electron. This is implemented in BOLSIG+.
Possible Solutions
Option1: Similar to the electron-collsion-plasma reaction Option2: Use reversible reaction. This will require a customized reverse reaction rate coefficient. We need
evalKrFromStruct
(similar toevalFromStruct
). https://github.com/BangShiuh/cantera/tree/collision-reaction-reverseReferences
https://www.bolsig.laplace.univ-tlse.fr/manual.html
Links to related Pull Requests, GitHub Issues, Users' Group topics, or other relevant material.