Interactions
This page describes methods for modeling collisions and interactions between species in hPIC2.
Monte Carlo collisions
Monte Carlo collision (MCC) methods form a family of algorithms that model collisions between a particle-based “source” species and a continuum “target” species. The industry standard is the null collision method [VDB+93]; throughout this section, when we refer to MCC, we refer specifically to this method.
MCC allows a source species to collide with arbitrarily many target species, but an individual source particle may only undergo a maximum of one collision per time step. For each source particle, we could compute a collision probability from the sum of collision rates over all \(N\) possible collisions as
where \(\Delta t\) is the time step size, \(n_i = n_i(\vec{x})\) is the local number density of the target for collision \(i\), \(\sigma_i = \sigma_i(\vec{g})\) is the collision cross section function, and \(\vec{g}_i\) is the relative velocity between the source particle and its target collision partner. Collision partners are drawn randomly from the target species’ distribution.
It can be expensive to compute the collision probability for each particle. Instead, we add a fictitious “null” collision whose cross section is such that the total collision frequency is constant. We choose the constant collision frequency to be
Now the maximum fraction of particles that will undergo collisions is
Given \(M\) particles, \(\lceil M P_{\text{null}} \rceil\) are randomly sampled without replacement. We must then decide which type of collision will occur for each such particle. Uniformly draw a random number \(U \in [0,1)\). Then collision \(i\) will occur if
and the null collision will occur if
for the selected particle, again where collision partners are drawn randomly from the target species’ distribution. This strategy weights the possible collisions by their collision rates.
Many things can happen when a collision occurs. If the collision is meant to model ionizing source electrons impinging on a neutral target, the collision may spawn a new electron and a new ion; if the collision models elastic scattering events, the source particle’s trajectory may simply be skewed to reflect the collision.
Direct simulation Monte Carlo
Direct simulation Monte Carlo (DSMC) methods form a family of algorithms for collisions between particle-based species. The most common method for DSMC is the no-time-counter (NTC) scheme, which first computes a maximum collision number of collisions, selects that many particle pairs, then decides between possible reactions with some probability [Bir94]. The original NTC scheme does not allow for variable particle weights, so the stochastic weighted particle method (SWPM) was developed to address this disadvantage [RW96]. The SWPM was subsequently extended to the case of interspecies collisions [AM20]. This latter approach is used by hPIC2.
First, for each pair of colliding species, define
where \(N\) is the number of possible reactions between the two species and \(\sigma_i (\vec{g})\) is the cross section of reaction \(i\) as a function of relative velocity \(\vec{g}\). For each mesh element, the maximum number of collisions is computed as
where \(N_\alpha\) and \(N_\beta\) are the numbers of particles in species \(\alpha\) and \(\beta\), respectively,
and
are the average weights of particles in the two species, \(\min w\) is the minimum particle weight across both species, \(\Delta t\) is the colliding time step, and \(V\) is the volume of the element. In practice, if \(N_{\text{coll}}\) is computed to be small (\(<64\)), it is sampled from a Poisson distribution, and otherwise rounded up to the nearest integer.
For each of \(N_{\text{coll}}\) possible collisions, a pair of particles (say, particle \(i\) from species \(\alpha\) and particle \(j\) from species \(\beta\)) and accepted with probability
where the maximum weights are computed over particles of the appropriate species. If a pair is rejected, the process of selecting a new pair is repeated until the pair is accepted. We must then decide which type of collision will occur for each such pair, if any. Uniformly draw a random number \(U \in [0,1)\). Then collision \(k\) will occur if
and the null collision will occur if
If the null collision occurs, nothing further happens to this pair. Otherwise, the particle with the greater weight is copied. This new particle has the smaller of the two weights, and the original particle has its weight reduced to the difference of the greater and smaller weights. The copied particle and smaller particle finally collide according to the reaction type. This particle splitting ensures detailed mass, momentum, and energy conservation. \(N_\alpha\) and \(N_\beta\) are also updated to reflect the addition of new particles, effectively allowing the new particles to collide multiple times.
If \(\alpha = \beta\), i.e. if the species is colliding with itself, the only change is to modify the maximum number of collisions to be [Mar16]
RustBCA coupling
The binary-collision approximation (BCA) method is a way of modeling plasma-material interactions. BCA considers the collision cascade undergone by ions incident on a material surface as a sequence of elastic, binary collisions, together with inelastic electronic stopping. This is a good approximation for modeling implantation, sputtering, and reflection with incident ion energies on the order of ~ \(1 - 10^8\) eV.
RustBCA [DC21] is a BCA code that enables in-memory coupling to other codes, such as hPIC2. The workflow for the PIC-BCA coupling used by hPIC2 is illustrated in the figure below.
Use of RustBCA in hPIC2 is described here.
Coulomb collision force
Coulomb collisions are long-range collisions that act under the Coulomb potential between charged particles. In certain plasma regimes, Coulomb collisions contribute significantly to plasma thermalization, especially in strongly collisional plasmas where fluid approximations are appropriate. One way of approximating the effect of Coulomb collisions is by imposing a macroscopic force on affected PIC particles that is informed by the state of the other species.
Recall that the Boltzmann equation for a single charged species \(s\) under only electromagnetic external forces is given by
where \(f_s\) is the single-particle distribution function, \(q_s\) and \(m_s\) are the charge and mass of the species, respectively, \(\vec{E}\) and \(\vec{B}\) are the self-consistent electric and magnetic fields, respectively, and \(\mathcal{C}\) is a functional that encodes changes in the distribution due to collisions, hereafter referred to as the collision operator. Generally the collision operator takes the form
where \(C_\alpha [f_s, f_t]\) is the collision operator for a single collision type \(\alpha\) occuring between an ion species \(s\) and another, perhaps electron, species \(t\). Hence the full collision operator is properly the sum over individual collision operators for all possible collisions.
A discussion of the role of the Coulomb logarithm is beyond the scope of this document, but a sensible definition is [Fit14]
where \(n_s\) is the number density of species \(s\), \(T_s\) is the temperature of species \(s\), \(Z_s \equiv q_s / e\) is the charge number, and \(A_s\) is the ion mass number.
Define the functions
where \(\mathop{\mathrm{erf}}\) is the error function. Also define the constant
Assuming that \(m_t/m_s \ll 1\), and that species \(t\) follows a Maxwellian disribution, an approximation for \(C_{st}\) is
where
where \(\stackrel{\leftrightarrow}{I}\) is the identity tensor and \(v_{th,t} = \sqrt{2 k T_t/m_t}\).
Suppose that \(f_s(\vec{v})\) is a Maxwellian distribution of characteristic number density \(n_s\), mean flow velocity \(\vec{V}\), and temperature \(T_s\), so that
Using the fact that
we can write \(\vec{A}_{st}\) as
Hence the collision operator can be written as
where \(\vec{R}_{st}\) is a velocity-dependent effective force
Ion-electron Coulomb collisions are implemented in PIC by selecting a stride \(N\) and accelerating each affected ion macroparticle by this effective force over \(N\) time steps. Hence a given macroparticle’s velocity \(\vec{v}\) is incremented by \(N \Delta t \vec{R}_{st} / m_s\), where \(\Delta t\) is the simulation time step.
Use of the Coulomb collision force in hPIC2 is described here.