Skip to content

Ion-electron collisions in Boltzmann model & option to run with fixed fraction#974

Open
manauref wants to merge 19 commits intomainfrom
fixed_fraction
Open

Ion-electron collisions in Boltzmann model & option to run with fixed fraction#974
manauref wants to merge 19 commits intomainfrom
fixed_fraction

Conversation

@manauref
Copy link
Copy Markdown
Collaborator

@manauref manauref commented Mar 13, 2026

(see issue #967 for more discussion and future plans)

In this work we add ion-electron collisions to the Boltzmann electron model. In order to support spatially and time-dependent collision frequency $\nu_{ie}=\nu_{ie}(x,t)$ we:

  1. Need the electron density to be updated in space-time. This is accomplished by including an electron species in the Boltzmann electron input file, but without any terms, and adding a scaling operation:
.elc = {
  .lower = ...,
  .upper = ...,
  .cells = ...,

  .scaling = {
    .type = GKYL_GK_SPECIES_SCALING_BOLTZMANN,
  },
},

which simply sets, every time step, the electron density as

$$n_e = n_{i,sheath} \exp\left[-e\left(\phi - \phi_{sheath}\right)/T_e\right]$$

assuming quasineutrality at the sheath entrance.

  1. Need the electron collisions app to be initialized (because ions get $nu_{ei}$ from it), so we add the electron collision table but we add the option do_not_add_to_dfdt so that electrons are not updated by electron-ion collisions. That is, electron table in the input file would look like:
.elc = {
  .lower = ...,
  .upper = ...,
  .cells = ...,

  .scaling = {
    .type = GKYL_GK_SPECIES_SCALING_BOLTZMANN,
  },

  .collisions = {
    ...
    .do_not_add_to_dfdt = true,
  },
},

New fixed fraction

We upgraded the previously existing .recycle_react_scaling operation that we implemented for scaling neutrals to simply .scaling, and so we can scale the electrons as mentioned before. In the process we also added an option to scale any species to a fixed fraction of another species. For example, we may want to run with a fixed fraction carbon species like

.carbon = {
  .scaling = {
    .type = GKYL_GK_SPECIES_SCALING_FIXED_FRACTION,
    .reference_species = 'ion',
    .fixed_fraction = 0.05,
  },
},

so that every time step it sets the carbon density to be 5% of the main ion density.

Tests

@Maxwell-Rosen ran mirror simulations with and w/o ion-elc collisions, and below we can see that they have the intended effect:

  • Lower density because we increase the rate at which we scatter into the loss cone
  • Lower temperature because beam ions are more quickly slowed down
image (13) image (14) image (15)

We also ran all the GK regression tests with the new runregression tool @JunoRavin implemented. They all pass, except for rt_gk_multib_sheath_1x2v_p1, but that should be unaffected by this work and I think there's an issue in the way that test is constructed.

manauref and others added 15 commits November 5, 2025 22:09
…aling a charged species to enforce a fixed fraction impurity.
…electron species in boltzmann elc input files to enable ion-elc collisions. This new option sets the electron density to n_e=n_e,sheath * exp(e*(phi-phi_sheath)/Te). Not yet tested.
…rations in the Boltzmann field solver. Fix bug in indexing in gk_species_scaling. Boltzmann elc mirror sim runs with ion-elc collisions now, but it's probably updating the electrons.
…control collision updates.

Remove nested if statements for readability.
…o is set the rhs_func pointer to the empty method. Do the same for BGK.
Ion-elc collisions in Boltzmann elc sims
@manauref manauref marked this pull request as ready for review March 20, 2026 21:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants