Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement superelastic electron-collision plasma reaction #192

Open
BangShiuh opened this issue Dec 14, 2023 · 3 comments
Open

Implement superelastic electron-collision plasma reaction #192

BangShiuh opened this issue Dec 14, 2023 · 3 comments
Labels
feature-request New feature request

Comments

@BangShiuh
Copy link

BangShiuh commented Dec 14, 2023

Abstract

Adding superelastic electron-collision plasma reaction. The steps to calculate this rate are,

  1. Calculate the inverse cross-section
$$\sigma^{inv} = \frac{\epsilon + U}{\epsilon} \sigma(\epsilon + U)$$

U is the threshold of inelastic collision.
3. Calculate the rate coefficient

$$k^{inv}_k = \gamma \int^\inf_0 \epsilon \sigma_k^{inv} f_0 d\epsilon$$

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 to evalFromStruct). https://github.com/BangShiuh/cantera/tree/collision-reaction-reverse

References

https://www.bolsig.laplace.univ-tlse.fr/manual.html

Links to related Pull Requests, GitHub Issues, Users' Group topics, or other relevant material.

@BangShiuh BangShiuh added the feature-request New feature request label Dec 14, 2023
@BangShiuh BangShiuh changed the title Implement superelastic electron-collision plasma reaction (WIP) Implement superelastic electron-collision plasma reaction Dec 14, 2023
@BangShiuh
Copy link
Author

@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?

@speth
Copy link
Member

speth commented Jan 2, 2024

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):

  • Check out a copy of the electrochem branch from my fork of Cantera (https://github.com/speth/cantera)
  • Create class ButlerVolmerData, derived from ReactionData
    - Implement bool update(const ThermoPhase& phase, const Kinetics& kin) override; See docstring in ReactionData.h for what this function needs to do.
  • Create class ButlerVolmerRate, derived from ReactionRate
    - Implement double evalFromStruct(const ButlerVolmerData& shared_data) const to calculate $i_0/nF$ as the closest analogue to the "forward rate constant"
    - Implement 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)
    - Implement newMultiRate using the same pattern as in ArrheniusRate, with the class names updated accordingly.
    - Implement type
    - Implement 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)
    - Implement check and validate methods, if there are any meaningful checks to make (see ReactionRate.h for signatures and a brief description)
    - Implement modifyOrders (see description of ReactionRate::orders) to set the reaction orders correctly
  • Add to ReactionRateFactory by copying & modifying one of the calls to reg in the ReactionRateFactory constructor.

I hope this works well for implementing what you need.

@BangShiuh
Copy link
Author

@speth I made a small fix so that the rate constant information is correct (this should be only for the information). BangShiuh/cantera@56805fb. Hope this does not impact the performance of updateROP too much.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature-request New feature request
Projects
None yet
Development

No branches or pull requests

2 participants