-
Notifications
You must be signed in to change notification settings - Fork 6
Description
Abstract
There are several ways of specifying the rate constant for electrochemical reactions which are used in practice. The aim of this enhancement is to support input of rate constants using those formulations that are convenient for users, while keeping the underlying implementation reasonably clean & efficient.
Motivation
Cantera currently has had an incomplete and not fully-implemented set of options for defining electrochemical reaction rates. The non-functional options (namely, those related to the Butler-Volmer formulation) were deprecated in Cantera 2.5 (See Cantera/cantera#749 and Cantera/cantera#750).
In the discussion of that issue, @decaluwe provided a summary of the theoretical bases for electrochemical reaction types, which can be found here: Charge.Transfer.in.Cantera.pdf.
Some additional context provided by @wbessler in the above-linked issue is also worth highlighting: Cantera/cantera#749 (comment)
Possible Solutions
To summarize the suggestions from both @decaluwe and @wbessler, it makes sense to support two general types of electrochemical reactions, one corresponding to Marcus theory / elementary reactions, and one for implementing different variants of the Butler-Volmer equation. In more detail:
Marcus theory:
- For the ‘standard’ treatment described in Sec. 2.1 of the above-linked PDF, things operate largely as they should.
- Users should be able to either pass in a
k_fwdor pass ini0and have it converted to an equivalentk_fwd - Currently, an electrochemical reaction is identified because it either (a) contains a specification of
beta, contains a specification ofi0, or, in the absence of either of these, the reaction equation is used to identify a charge-transfer reaction. - @ischoegl has suggested that a required flag should be added. @decaluwe says "I think this is a good idea, but should be optional, on the user end. Correctly evaluating the reaction driving forces is not a ‘special feature’ that a user needs to request, imho."
- @decaluwe also suggests: I’ve got half a mind that we can derive a method to fold electric potential effects directly into the species activities, such that electrochemical reactions don’t require any special handling. Here, electric potential effects would be part of the activity calculation, where this impact evaluates to multiplication by 1.0 for non-charge-transfer reactions. This requires a little more thought, as it has both theoretical and implementation hurdles. But it is worth exploring.
Butler-Volmer:
Inputs: The user should be able to:
- Pass in a
k_fwdand have it converted to an equivalenti0. - Pass in
i0(likely via Arrhenius parameters) - Pass in
i*0for a known reference state (known species concentrations), along with a list of these reference concentrations[X*_k], which is then used to calculatei0. - Pass in non-stoichiometric species orders for
i0 - Set a flag that allows the user to specify use of the Tafel equation
Outputs: The user should also be able to query, for a given state:
- The exchange current density
i0 - The overpotential
eta.
@ischoegl has also raised concerns about the fact that checking whether a reaction involves charge transfer currently involves parsing the reaction equation from its string form twice. If desired, this duplicate parsing could be eliminated by making parsing of the reaction equation a separate step from instantiation of a Reaction object.