Skip to content

Implement impact ionization between plasma species - #1384

Open
emarchet wants to merge 14 commits into
Hi-PACE:developmentfrom
emarchet:test_coll
Open

Implement impact ionization between plasma species#1384
emarchet wants to merge 14 commits into
Hi-PACE:developmentfrom
emarchet:test_coll

Conversation

@emarchet

@emarchet emarchet commented May 1, 2026

Copy link
Copy Markdown
Contributor

This PR proposes an implementation of impact ionization between plasma species. The algorithm is based on Pérez et al. (2012), with modifications described by Higginson et al. (2020) (previously discussed in BLAST-WarpX/warpx#5091).

The current implementation supports electron-impact ionization for a limited set of target species.

Implementation

The implementation is divided among three main files:

  • Collision.cpp handles the per-cell collision logic and the creation of secondary electrons
  • ImpactIonizationSigma.H evaluates the impact ionization cross section used to determine the ionization probability
  • ImpactIonization.H assigns the post-collision particle properties and redistributes energy and momentum among the projectile electron, the ionized target, and the newly created electron

The latter is derived from WarpX SplitAndScatterFunc.H, with additional modifications to account for relativistic effects.

Input

The following input defines impact ionization in a 10% ionized Hydrogen plasma.

plasmas.names = electron ion neutral
plasmas.reorder_period = 4
plasmas.neutralize_background = 0   # If ionization is 'true', the background is set to 'false' by default

electron.density(x,y,z) = 1.e22
electron.ppc = 4 4
electron.element = electron
electron.temperature_in_ev = 1

ion.density(x,y,z) = 1.e22
ion.ppc = 4 4
ion.initial_ion_level = 1
ion.element = H
ion.temperature_in_ev = 1

neutral.density(x,y,z) = 1.e23
neutral.ppc = 4 4
neutral.initial_ion_level = 0
neutral.element = H
neutral.temperature_in_ev = 1

hipace.collisions = elec_elec elec_ion elec_neut ion_ion ion_neut neut_neut
elec_elec.species = electron electron
elec_ion.species = electron ion
elec_neut.species = electron neutral
ion_ion.species = ion ion
ion_neut.species = ion neutral
neut_neut.species = neutral neutral

# Impact
neutral.can_impact_ionize = 1

hipace.impact_ionization = imp
imp.type = electron_impact
imp.projectile = electron
imp.target = neutral
imp.new_electron = electron

Testing

In the following, the average electron density in a uniform plasma, with no driver and an initial temperature of 10 eV, is compared with the time-integrated, theoretical reaction rate:

$$\begin{aligned} &\frac{\partial n_e}{\partial t} = n_e n_n \ \left\langle \sigma_{iz}(E)\,v(E)\,f_E(E,T_e) \right\rangle = \dot{n}, \\\ &\frac{\partial n_n}{\partial t} = - \dot{n}, \\\ &\frac{3}{2} \ \frac{\partial (n_e T_e)}{\partial t} = -\dot{n} \ \varepsilon_{iz}. \end{aligned}$$
Screenshot 2026-07-13 at 15 10 23

The code has been further tested, mostly for Hydrogen, with an electron beam driver. The plasma energy flux is used as a metric to assess the reliability of the scheme, and both Reflecting and Absorbing boundary conditions have been tested.

Figure below displays the total energy flux for three different cases:

  • without impact ionization
  • two cases in which collisions are on, with different transverse resolution

All the results are obtained using reflecting BCs.

output

The figure shows that the results are affected by numerical heating, which may also be related to the increasing number of particles during the simulation.
Absorbing boundary conditions limit this effect by allowing particles to leave the simulation domain. However, particle losses introduce a net charge imbalance and may therefore affect the plasma evolution in a non-physical manner.

To further improve the module, the implementation of thermal boundary conditions is being taken into considerations.
Also, testing with Argon plasmas could be of interest.

@emarchet
emarchet marked this pull request as ready for review May 1, 2026 15:49
@emarchet
emarchet force-pushed the test_coll branch 5 times, most recently from 8f210db to 62c3ed9 Compare July 13, 2026 12:28
@emarchet emarchet changed the title WIP: Implement impact ionization between plasma species Implement impact ionization between plasma species Jul 13, 2026
@AlexanderSinn AlexanderSinn added the component: plasma About the plasma species label Jul 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

component: plasma About the plasma species

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants