Skip to content

Improve handling of electrochemical reactions #38

@speth

Description

@speth

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_fwd or pass in i0 and have it converted to an equivalent k_fwd
  • Currently, an electrochemical reaction is identified because it either (a) contains a specification of beta, contains a specification of i0, 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_fwd and have it converted to an equivalent i0.
  • Pass in i0 (likely via Arrhenius parameters)
  • Pass in i*0 for a known reference state (known species concentrations), along with a list of these reference concentrations [X*_k], which is then used to calculate i0.
  • 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions