Note
Go to the end to download the full example code.
The two-stream instability: exponential growth and phase-space vortices#
Studying velocity-modulated electron beams for microwave tubes, Andrew Haeff (1948) and John Pierce (1948) independently found that a beam of electrons streaming through a background plasma spontaneously breaks up into density bunches that grow exponentially. David Bohm and Eugene Gross (1949) showed the instability is the mirror image of Landau damping (Landau damping from first principles with particle-in-cell): two counter-streaming beams create a region of positive velocity-space slope between their peaks, and it is precisely that positive slope – formalized a decade later as the Penrose criterion – that pumps energy from the particles into the wave instead of draining it.
The governing equations are identical to Landau damping from first principles with particle-in-cell’s – the collisionless Vlasov equation for the electron distribution \(f(x,v,t)\) coupled to its own field through Poisson’s equation,
Here the electrons are split into two counter-streaming Maxwellian beams centered at \(v=\pm v_{drift}\) with thermal spread \(v_{th}\), so \(f(v)\) is doubly-peaked instead of single-humped. Whenever \(v_{drift}\) is large enough relative to \(v_{th}\) for a region of positive slope, \(\partial f/\partial v > 0\), to appear between the two peaks, the Penrose criterion is violated and a small seeded density ripple grows exponentially instead of Landau-damping away.
two_stream_ic() seeds exactly this
doubly-peaked, counter-streaming initial condition; run through the
same pic_simulate() used for Landau
damping, it reproduces exponential growth instead of decay from the
identical Vlasov-Poisson machinery – proof that both phenomena are two
faces of one kinetic mechanism.
import matplotlib.pyplot as plt
import numpy as np
import physicskit as pk
Two counter-streaming beams, drift speed well above thermal spread#
so the combined distribution is doubly-peaked and unstable.
The same deposit-solve-gather-push PIC loop used for Landau damping now amplifies the seeded ripple instead of damping it.

Text(0.5, 1.0, 'Exponential field-energy growth')
The saturated phase-space snapshot shows the beams rolled into a single vortex, not two straight, undisturbed streams.
Watching the vortex form, continuously#
Rather than just a before/after snapshot, redrawing the full particle scatter every few PIC steps shows the two straight, separate beams wrapping continuously around each other into the single saturated phase-space vortex.
Total running time of the script: (0 minutes 3.035 seconds)