The discharge is simple to state. When the axial field in the gap between two oppositely signed charge layers reaches the ionization level, the gap is filled with neutral air at the simulation's own initial density. Molecules where the local field exceeds threshold separate into a positive ion and an electron. Everything after that follows from the same force law that moves every other particle in the domain.
There is no channel, no propagation rule and no grid. Charge is conserved at every reaction: one neutral becomes one positive and one negative, and nothing is ever deleted except in pairs.
Every parameter reported in the paper is compiled into the simulation page and has been removed from its interface. What remains adjustable — the vortex, the carrier count, the view, and the iteration at which the discharge is allowed to arm — does not enter the discharge scheme. Anything observed there is therefore a replication rather than a new tuning.
| ionization threshold | 250 kV m−1 |
| charge anchor | 1 nC m−3 |
| force softening | 6 u = 240 m |
| air fill | ×20 initial density |
| atom mass | 0.05 hydrometeor |
| electron / atom mass | 1.897 × 10−5 |
| ionization speed | 6 u s−1 |
| drift ceiling | 400 u s−1 ≡ 4 × 104 m s−1 |
| sub-step | 0.4 u ≡ 400 µs |
| collision radius | 1.6 u = 64 m |
| product flow coupling | 0.10 |
| impact coefficient α | 1.5 per unit |
| gap ionization | always on, gaps checked every 20 iterations |
| iteration at which the discharge arms | 400 (adjustable in the panel) |
| two-species discharge (air fill) | always on |
| manual firing (Measure gaps, Ionize now) | removed |
| fast-forward (Run), Save state, Restore, Record | removed |
| scale anchor | 40 m per unit |
| velocity anchor | 1.667 m s−1 per u s−1 |
| regional disturbance — radius | 8 u |
| regional disturbance — shift strength | 12 |
| regional disturbance — direction | inward to centre, all particles |
| dielectric breakdown — grid cell | 12 u |
| dielectric breakdown — SOR sweeps | 260, auto-scaled with grid |
| dielectric breakdown — Ecrit | 3 × RMS |
| dielectric breakdown — propagation threshold | 0.8 of initiation |
| dielectric breakdown — branching exponent η | 2.0 |
| dielectric breakdown — max cells | 4000 |
| dielectric breakdown — sheath radius | 1 cell |
| dielectric breakdown — charge smoothing | 6 passes, auto-scaled with grid |
| dielectric breakdown — neutralise fraction | 0.85 |
| dielectric breakdown — automatic striking | on |
| dielectric breakdown — lock at fraction of peak | 0.9 |
The dielectric-breakdown scheme in the second table is the old discharge treatment, the one this paper replaces. It is retained in the code so the two can be compared, but it takes no part in the results reported here and its controls have been removed to prevent it being switched on by accident.
plasma.py in the archive for quantitative replication.
The model, every analysis script, the figures, the manuscript and the full running results log are deposited together at 10.5281/zenodo.21965148. The README there gives an exact command for each result reported in the paper. The random number generator is seeded deterministically, so a given seed reproduces a bit-identical column and a bit-identical discharge.