# Spontaneous fission
## Microsim
### Live player
<div class="microsim-player">
<iframe src="https://editor.p5js.org/sciencenibber/full/9S8vQrTla" width="100%" height="620" frameborder="0" sandbox="allow-scripts allow-same-origin"></iframe>
</div>
<div class="microsim-fallback">
<img src="Microsims/thumbs/Spontaneous_fission.png" alt="Spontaneous_fission microsim poster" style="width:100%;border:1px solid #4445;border-radius:6px;">
<p><em>Live microsim (desktop) · <a href="https://editor.p5js.org/sciencenibber/sketches/9S8vQrTla">open sketch in the p5.js editor</a></em></p>
</div>
**Editor URL:** https://editor.p5js.org/sciencenibber/sketches/9S8vQrTla
**Description (100 words):**
A 20-by-20 lattice of californium-252 (or another actinide via the dropdown) sits on the left; each frame, every surviving nucleus rolls an independent spontaneous-fission probability p = 1 - exp(-lambda_SF * dt). The isotope dropdown swaps t_SF, mean nu-bar, and Z^2/A; a log-decade speed slider compresses real time so even Cf-252's 85-year clock finishes on screen. When a nucleus fissions, two fragment dots fly out with masses sampled from a double-Gaussian and nu_bar prompt neutrons spray isotropically. The upper-right panel overlays the empirical N(t)/N0 (cyan) on the analytic exp(-lambda_SF * t) reference (grey); the lower-right [[Histogram|histogram]] accumulates fragment masses, building the canonical double-humped Y(A) yield curve.
```js
// ==========================================================================
// Spontaneous fission - a Wikitube p5.js microsim
//
// Article: en.wikitube.io/wiki/Spontaneous_fission
// Slug: Spontaneous_fission
// Pattern: Pattern E reskin (Nuclear) - Decay clocks and half-life
//
// Idea
// ----
// A 20 x 20 lattice of heavy nuclei sits on the left. Each frame, every
// surviving nucleus independently fissions with probability
//
// p = 1 - exp(-lambda_SF * dt)
//
// where lambda_SF = ln(2) / t_SF and t_SF is the partial spontaneous-fission
// half-life of the chosen isotope. The exponential form (not the linear
// approximation lambda*dt) is required because t_SF spans more than twenty
// orders of magnitude across the isotope dropdown; for short t_SF and a
// large simulated dt the linear form gives p > 1 and the entire population
// vanishes in one frame (see Skills/.../pitfalls.md - Nuclear room note).
//
// Each spontaneous-fission event splits the parent into two fragments whose
// masses are sampled from the empirical double-humped yield curve (a heavy
// peak near A = 140 and a light peak near A = parent - 140 - nu_bar). nu_bar
// prompt neutrons are also emitted. The right panel overlays the empirical
// survival N(t)/N0 (cyan) onto the analytic exp(-lambda_SF * t) reference
// (grey) with a dashed 0.5 line marking the half-life crossing. The lower
// right panel accumulates fragment masses into a histogram - the canonical
// double-humped Y(A) curve emerges as events accumulate.
//
// Equations - canvas-side strings are ASCII-only (see pitfalls.md):
//
// lambda_SF = ln(2) / t_SF
// p_event = 1 - exp(-lambda_SF * dt)
// A_heavy + A_light + nu_bar = A_parent (mass balance)
// E_release ~ 200 MeV per event
//
// NOTE on naming: "speed" is a reserved global in p5.js, so the slider's
// JS identifier is "simSpeedSlider" while the HUD label still reads "speed".
// All non-ASCII characters live in COMMENTS only - never in template
// literals, text() arguments, or any expression position.
//
// Standards: Skills/P5js Microsim Standards and Best Practices/README.md
// (HUD, ARTICLE constant, FES off, ASCII-only canvas strings, Nuclear
// palette and Pattern E starter sketch from Articles/P5_JS_EDITOR.md
// section 5).
// ==========================================================================
const ARTICLE = "Spontaneous_fission";
p5.disableFriendlyErrors = true;
// --- Nuclear palette (P5_JS_EDITOR section 5) -----------------------------
const BG = [ 8, 16, 28]; // deep navy background
const FG = 240; // primary text colour
const PARENT = [180, 200, 80]; // un-fissioned heavy nucleus (FUEL)
const FRAG_H = [220, 110, 60]; // heavy fragment (FISSION)
const FRAG_L = [ 70, 200, 220]; // light fragment (accent)
const NEUT = [240, 240, 255]; // prompt neutron (NEUTRON)
const PALE = [120, 130, 150]; // structural / reference (STRUCT)
// --- Isotope table --------------------------------------------------------
// tSf = partial spontaneous-fission half-life in seconds.
// Ah = mean of the heavy mass peak (light peak follows by mass balance).
// nu = average prompt-neutron multiplicity per event (nu-bar).
const ISOTOPES = [
{ key: "Cf-252", A: 252, Z: 98, tSf: 2.70e9, nu: 3.76, Ah: 141 }, // 85.5 yr
{ key: "Cm-244", A: 244, Z: 96, tSf: 4.16e14, nu: 2.72, Ah: 140 }, // 1.32e7 yr
{ key: "Pu-240", A: 240, Z: 94, tSf: 3.66e18, nu: 2.16, Ah: 138 }, // 1.16e11 yr
{ key: "U-238", A: 238, Z: 92, tSf: 2.59e23, nu: 2.00, Ah: 138 }, // 8.2e15 yr
{ key: "Fm-256", A: 256, Z: 100, tSf: 1.03e4, nu: 3.70, Ah: 132 }, // 2.86 hr
];
// --- Lattice geometry -----------------------------------------------------
const N_SIDE = 20; // 20 x 20 = 400 nuclei
const N0 = N_SIDE * N_SIDE;
let nuclei = []; // array of { alive: boolean }
let nAlive = N0;
// --- Time bookkeeping -----------------------------------------------------
let simTime = 0; // simulated seconds since the last reset
let history = []; // ring buffer of { t, n }
const HMAX = 360; // max history samples retained
// --- Yield histogram ------------------------------------------------------
const YIELD_BINS = 80;
const YIELD_A_MIN = 60;
const YIELD_A_MAX = 180;
let yieldHist = new Array(YIELD_BINS).fill(0);
// --- Particle pools (post-fission ejecta) ---------------------------------
let fragments = [];
let neutrons = [];
// --- DOM controls ---------------------------------------------------------
let isoSel, simSpeedSlider, resetBtn, pauseBtn;
let isoIdx = 0;
let totalFissions = 0;
let paused = false;
// --- Layout constants (filled in setup) -----------------------------------
let LAT_X, LAT_Y, LAT_S;
let CHART_X, CHART_Y, CHART_W, CHART_H;
let YIELD_X, YIELD_Y, YIELD_W, YIELD_H;
function setup() {
createCanvas(720, 520);
pixelDensity(2);
textFont("system-ui");
// Lattice on the left.
LAT_S = 14;
LAT_X = 24;
LAT_Y = 76;
// Survival chart on the upper right.
CHART_X = LAT_X + N_SIDE * LAT_S + 28;
CHART_Y = 76;
CHART_W = width - CHART_X - 18;
CHART_H = 130;
// Mass-yield histogram on the lower right.
YIELD_X = CHART_X;
YIELD_Y = CHART_Y + CHART_H + 38;
YIELD_W = CHART_W;
YIELD_H = 130;
// Isotope selector.
isoSel = createSelect();
for (const iso of ISOTOPES) isoSel.option(iso.key);
isoSel.selected("Cf-252");
isoSel.position(80, height - 56);
isoSel.style("width", "110px");
isoSel.changed(onIsotopeChange);
// Simulated-time speed multiplier (log10 decades).
simSpeedSlider = createSlider(0, 22, 9, 0.1);
simSpeedSlider.position(280, height - 56);
simSpeedSlider.style("width", "180px");
resetBtn = createButton("reset");
resetBtn.position(490, height - 56);
resetBtn.mousePressed(resetSim);
pauseBtn = createButton("pause");
pauseBtn.position(560, height - 56);
pauseBtn.mousePressed(togglePause);
resetSim();
}
function onIsotopeChange() {
const v = isoSel.value();
for (let i = 0; i < ISOTOPES.length; i++) {
if (ISOTOPES[i].key === v) isoIdx = i;
}
resetSim();
}
function togglePause() {
paused = !paused;
pauseBtn.html(paused ? "run" : "pause");
}
function resetSim() {
nuclei = [];
for (let i = 0; i < N0; i++) nuclei.push({ alive: true });
nAlive = N0;
simTime = 0;
history = [];
yieldHist = new Array(YIELD_BINS).fill(0);
fragments = [];
neutrons = [];
totalFissions = 0;
}
// --------------------------------------------------------------------------
// One time step. Each surviving nucleus rolls an independent fission check;
// a hit emits two fragments (heavy + light) and nu_bar prompt neutrons.
// --------------------------------------------------------------------------
function stepSim(dtReal, dtSim) {
const iso = ISOTOPES[isoIdx];
const lambda = Math.log(2) / iso.tSf;
let p = 1 - Math.exp(-lambda * dtSim);
if (p < 0) p = 0;
if (p > 1) p = 1;
if (nAlive > 0 && dtSim > 0) {
for (let i = 0; i < N0; i++) {
if (!nuclei[i].alive) continue;
if (random() < p) {
nuclei[i].alive = false;
nAlive--;
totalFissions++;
const ix = i % N_SIDE;
const iy = Math.floor(i / N_SIDE);
const cx = LAT_X + ix * LAT_S + LAT_S / 2;
const cy = LAT_Y + iy * LAT_S + LAT_S / 2;
// Sample fragment masses from a double-humped yield distribution.
let Ah = randomGaussian(iso.Ah, 6);
const nN = Math.max(0, Math.round(randomGaussian(iso.nu, 1.0)));
let Al = iso.A - Ah - nN;
if (Al < YIELD_A_MIN) Al = YIELD_A_MIN;
if (Ah > YIELD_A_MAX) Ah = YIELD_A_MAX;
recordYield(Ah);
recordYield(Al);
// Emit two fragments at 180 degrees with momentum-conservation speeds.
const ang = random(TWO_PI);
const vh = 60;
const vl = vh * Ah / Math.max(Al, 1);
fragments.push({ x: cx, y: cy, vx: Math.cos(ang) * vh, vy: Math.sin(ang) * vh, life: 1.4, light: false });
fragments.push({ x: cx, y: cy, vx: -Math.cos(ang) * vl, vy: -Math.sin(ang) * vl, life: 1.4, light: true });
// Prompt neutrons - much faster, isotropic.
for (let q = 0; q < nN; q++) {
const a = random(TWO_PI);
neutrons.push({ x: cx, y: cy, vx: Math.cos(a) * 110, vy: Math.sin(a) * 110, life: 0.8 });
}
}
}
}
// Advect ejecta and prune by lifetime.
for (const f of fragments) { f.x += f.vx * dtReal; f.y += f.vy * dtReal; f.life -= dtReal; }
for (const n of neutrons) { n.x += n.vx * dtReal; n.y += n.vy * dtReal; n.life -= dtReal; }
fragments = fragments.filter(f => f.life > 0);
neutrons = neutrons.filter(n => n.life > 0);
history.push({ t: simTime, n: nAlive });
if (history.length > HMAX) history.shift();
}
function recordYield(Acont) {
const u = (Acont - YIELD_A_MIN) / (YIELD_A_MAX - YIELD_A_MIN);
const b = Math.floor(u * YIELD_BINS);
if (b >= 0 && b < YIELD_BINS) yieldHist[b]++;
}
function draw() {
background(BG);
const iso = ISOTOPES[isoIdx];
const lambda = Math.log(2) / iso.tSf;
const speedMul = Math.pow(10, simSpeedSlider.value());
const dtReal = Math.min(deltaTime / 1000, 0.05);
const dtSim = paused ? 0 : dtReal * speedMul;
if (!paused) simTime += dtSim;
stepSim(dtReal, dtSim);
drawLattice();
drawEjecta();
drawSurvivalChart(lambda);
drawYieldHistogram();
drawHud(iso, lambda);
}
function drawLattice() {
noStroke();
for (let i = 0; i < N0; i++) {
if (!nuclei[i].alive) continue;
const ix = i % N_SIDE;
const iy = Math.floor(i / N_SIDE);
const cx = LAT_X + ix * LAT_S + LAT_S / 2;
const cy = LAT_Y + iy * LAT_S + LAT_S / 2;
fill(PARENT[0], PARENT[1], PARENT[2], 220);
circle(cx, cy, 8);
}
// faint lattice frame
noFill(); stroke(PALE[0], PALE[1], PALE[2], 80); strokeWeight(1);
rect(LAT_X, LAT_Y, N_SIDE * LAT_S, N_SIDE * LAT_S);
}
function drawEjecta() {
noStroke();
for (const f of fragments) {
const c = f.light ? FRAG_L : FRAG_H;
fill(c[0], c[1], c[2], 220);
circle(f.x, f.y, f.light ? 5 : 7);
}
for (const n of neutrons) {
fill(NEUT[0], NEUT[1], NEUT[2], 200);
circle(n.x, n.y, 3);
}
}
function drawSurvivalChart(lambda) {
noFill(); stroke(PALE[0], PALE[1], PALE[2]); strokeWeight(1);
rect(CHART_X, CHART_Y, CHART_W, CHART_H);
if (history.length < 2) return;
const tStart = history[0].t;
const tEnd = history[history.length - 1].t;
const span = Math.max(tEnd - tStart, 1e-30);
// Analytic reference exp(-lambda * t).
stroke(PALE[0], PALE[1], PALE[2]); strokeWeight(1.2); noFill();
beginShape();
for (let k = 0; k <= 60; k++) {
const t = tStart + (k / 60) * span;
const N = N0 * Math.exp(-lambda * t);
const x = CHART_X + (k / 60) * CHART_W;
const y = CHART_Y + CHART_H - (N / N0) * CHART_H;
vertex(x, y);
}
endShape();
// Empirical curve.
stroke(70, 200, 220); strokeWeight(1.6); noFill();
beginShape();
for (const h of history) {
const u = (h.t - tStart) / span;
const x = CHART_X + u * CHART_W;
const y = CHART_Y + CHART_H - (h.n / N0) * CHART_H;
vertex(x, y);
}
endShape();
// 0.5 reference line (half-life crossing).
stroke(PALE[0], PALE[1], PALE[2], 90); strokeWeight(1);
drawingContext.setLineDash([4, 4]);
line(CHART_X, CHART_Y + CHART_H / 2, CHART_X + CHART_W, CHART_Y + CHART_H / 2);
drawingContext.setLineDash([]);
noStroke(); fill(PALE[0], PALE[1], PALE[2]); textSize(10);
textAlign(LEFT, BOTTOM);
text("survival N(t)/N0 - cyan empirical, grey exp(-lambda*t)", CHART_X + 6, CHART_Y - 4);
}
function drawYieldHistogram() {
noFill(); stroke(PALE[0], PALE[1], PALE[2]); strokeWeight(1);
rect(YIELD_X, YIELD_Y, YIELD_W, YIELD_H);
let maxBin = 1;
for (let b = 0; b < YIELD_BINS; b++) if (yieldHist[b] > maxBin) maxBin = yieldHist[b];
const A_mid = ISOTOPES[isoIdx].A / 2;
noStroke();
for (let b = 0; b < YIELD_BINS; b++) {
const h = (yieldHist[b] / maxBin) * (YIELD_H - 6);
const x = YIELD_X + (b / YIELD_BINS) * YIELD_W;
const w = YIELD_W / YIELD_BINS;
const A_at = YIELD_A_MIN + (b / YIELD_BINS) * (YIELD_A_MAX - YIELD_A_MIN);
const c = A_at > A_mid ? FRAG_H : FRAG_L;
fill(c[0], c[1], c[2], 210);
rect(x, YIELD_Y + YIELD_H - h - 1, w - 0.5, h);
}
// Symmetric-split marker at A = A_parent / 2.
const uMid = (A_mid - YIELD_A_MIN) / (YIELD_A_MAX - YIELD_A_MIN);
stroke(PALE[0], PALE[1], PALE[2], 130); strokeWeight(1);
drawingContext.setLineDash([3, 3]);
line(YIELD_X + uMid * YIELD_W, YIELD_Y, YIELD_X + uMid * YIELD_W, YIELD_Y + YIELD_H);
drawingContext.setLineDash([]);
// Axis tick labels for mass number A.
noStroke(); fill(PALE[0], PALE[1], PALE[2]); textSize(9); textAlign(CENTER, TOP);
for (const A of [60, 90, 120, 150, 180]) {
const u = (A - YIELD_A_MIN) / (YIELD_A_MAX - YIELD_A_MIN);
text(A, YIELD_X + u * YIELD_W, YIELD_Y + YIELD_H + 2);
}
textAlign(LEFT, BOTTOM); textSize(10);
text("fragment mass yield Y(A) - events: " + totalFissions, YIELD_X + 6, YIELD_Y - 4);
}
function drawHud(iso, lambda) {
noStroke();
// Top-left title block.
fill(20); textSize(20); textAlign(LEFT, TOP);
fill(FG); text("Spontaneous fission", 24, 14);
fill(160); textSize(12);
text("Wikitube microsim - en.wikitube.io/wiki/" + ARTICLE, 24, 40);
// Top-right control hints.
fill(160); textSize(11); textAlign(RIGHT, TOP);
text("isotope, simulated speed (10^x), pause / reset", width - 18, 14);
text("p_event = 1 - exp(-lambda_SF * dt)", width - 18, 30);
// Bottom-left readouts.
textAlign(LEFT, BOTTOM); textSize(12);
fill(PARENT[0], PARENT[1], PARENT[2]);
text("isotope " + iso.key + " Z = " + iso.Z + " A = " + iso.A + " Z^2/A = " + (iso.Z * iso.Z / iso.A).toFixed(2),
16, height - 102);
fill(FG);
text("t_1/2 (SF) = " + formatTime(iso.tSf) + " lambda_SF = " + lambda.toExponential(2) + " /s",
16, height - 86);
text("speed = 10^" + simSpeedSlider.value().toFixed(1) + " x real sim t = " + formatTime(simTime),
16, height - 70);
fill(PALE[0], PALE[1], PALE[2]);
text("alive N = " + nAlive + " / " + N0 + " fissions: " + totalFissions + " nu_bar = " + iso.nu.toFixed(2) + " neutrons / event",
16, height - 14);
// Bottom-right equation footer.
textAlign(RIGHT, BOTTOM); textSize(11); fill(160);
text("dN/dt = -lambda * N A_h + A_l + nu_bar = A_parent E_release ~ 200 MeV",
width - 18, height - 102);
// Slider / select labels (drawn on canvas because DOM labels float above).
textAlign(RIGHT, CENTER); textSize(11); fill(PALE[0], PALE[1], PALE[2]);
text("isotope", 76, height - 44);
text("speed", 276, height - 44);
}
function formatTime(seconds) {
if (seconds <= 0) return "0";
const ABS = Math.abs(seconds);
if (ABS >= 3.156e16) return (seconds / 3.156e16).toFixed(2) + " Gyr";
if (ABS >= 3.156e13) return (seconds / 3.156e7).toExponential(2) + " yr";
if (ABS >= 3.156e7) return (seconds / 3.156e7).toFixed(2) + " yr";
if (ABS >= 86400) return (seconds / 86400).toFixed(2) + " day";
if (ABS >= 3600) return (seconds / 3600).toFixed(2) + " hr";
if (ABS >= 60) return (seconds / 60).toFixed(2) + " min";
if (ABS >= 1) return seconds.toFixed(2) + " s";
if (ABS >= 1e-3) return (seconds * 1e3).toFixed(2) + " ms";
if (ABS >= 1e-6) return (seconds * 1e6).toFixed(2) + " us";
return seconds.toExponential(2) + " s";
}
```
## Links (Wikipedia order)
<!-- injected from _registry/childlinks/Spontaneous_fission.json (2026-07-30T02:09:12Z) -->
`(n-p)_reaction` · `Aage_Bohr` · `Ab_initio_methods_(nuclear_physics)` · `Alexandru_Proca` · [[Alpha_decay]] · `Alpha_process` · `Atomic_nucleus` · `Atomic_number` · [[Beta_decay]] · `Big_Bang_nucleosynthesis` · `Borromean_nucleus` · `CNO_cycle` · `CRC_Press` · `Carbon-burning_process` · `Clinton_Davisson` · `Cluster_decay` · `Cosmic_ray_spallation` · `Cosmogenic_nuclide` · [[Coulomb's_law]] · [[Decay_chain]] · `Decay_energy` · [[Decay_product]] · `Deuterium_fusion` · `Discovery_of_nuclear_fission` · `Double_beta_decay` · `Double_electron_capture` · `Edward_Mills_Purcell` · `Edward_Teller` · `Electron_capture` · `Electronvolt` · `Empirical_evidence` · `Enrico_Fermi` · `Ernest_Lawrence` · `Ernest_Rutherford` · `Ernest_Walton` · `Eugene_Wigner` · `Even_and_odd_atomic_nuclei` · `Frederick_Soddy` · `Fritz_Strassmann` · `Frédéric_Joliot-Curie` · `Gamma_ray` · `Halo_nucleus` · `Hans_Bethe` · `Hartree–Fock_method` · `Henri_Becquerel` · `High-energy_nuclear_physics` · `Interacting_boson_model` · `Internal_conversion` · `International_Atomic_Energy_Agency` · `Irène_Joliot-Curie` · `Island_of_stability` · `Isobar_(nuclide)` · `Isotone` · `Isotope` · `J._Hans_D._Jensen` · `J._J._Thomson` · `J._Robert_Oppenheimer` · `James_Chadwick` · `John_Cockcroft` · `Large_Hadron_Collider` · `Lise_Meitner` · `Lithium_burning` · `Luis_Walter_Alvarez` · `Magic_number_(physics)` · `Marie_Curie` · `Mark_Oliphant` · `Mass_number` · `Mirror_nuclei` · `Natural_nuclear_fission_reactor` · `Neon-burning_process` · `Neutrinoless_double_beta_decay` · [[Neutron]] · `Neutron_capture` · `Neutron_emission` · `Neutron_imaging` · `Neutron_number` · `Niels_Bohr` · `Nuclear_astrophysics` · `Nuclear_binding_energy` · `Nuclear_drip_line` · `Nuclear_fission` · `Nuclear_fission_product` · `Nuclear_force` · [[Nuclear_fusion]] · `Nuclear_isomer` · `Nuclear_matter` · `Nuclear_physics` · `Nuclear_reaction` · `Nuclear_shell_model` · `Nuclear_structure` · `Nucleon` · `Nucleon_pair_breaking_in_fission` · [[Nucleosynthesis]] · `Nuclide` · `Otto_Hahn` · `Oxygen-burning_process` · `P-process` · `Patrick_Blackett` · `Photodisintegration` · `Photofission` · `Pierre_Curie` · `Plutonium-239` · `Plutonium-240` · [[Positron_emission]] · `Primordial_nuclide` · [[Proton]] · `Proton_capture` · `Proton_emission` · `Proton–proton_chain` · `Quark–gluon_plasma` · `R-process` · [[Radioactive_decay]] · `Radiogenic_nuclide` · `Relativistic_Heavy_Ion_Collider` · `Rp-process` · `S-process` · `Semi-empirical_mass_formula` · `Silicon-burning_process` · `Spallation` · `Stable_nuclide` · `Stellar_nucleosynthesis` · `Superheavy_element` · `Supernova_nucleosynthesis` · `Surface_tension` · `Synthetic_element` · `Triple-alpha_process` · `Uranium-235` · `Uranium-238` · `Valley_of_stability` · `Władysław_Świątecki_(physicist)` · `Yrast`
## From the Real GENERATIVE library

*Spontaneous fission — placed from the Real G.E.N.E.R.A.T.I.V.E. course library (Nuclear room). Source: Wikimedia Commons (via Wikipedia article media). [Details & license](https://commons.wikimedia.org/wiki/File:NuclearReaction.svg).*
> Spontaneous fission (SF) is a form of radioactive decay in which a heavy atomic nucleus splits into two or more lighter nuclei. In contrast to induced fission, there is no inciting particle to trigger the decay; it is a purely probabilistic process. ([Wikipedia](https://en.wikipedia.org/wiki/Spontaneous_fission))
<!-- REAL-GENERATIVE-MEDIA:END -->
<!-- LOCAL-MEDIA-PASS:START -->
## From the vault media library
!Spontaneous fission thumb.png
*Spontaneous Fission — from the vault's own media holdings, placed 2026-07-09. MTN / Wikitube.io original · CC BY-SA 4.0.*
<!-- LOCAL-MEDIA-PASS:END -->
> **Room:** Nuclear · **Status:** ✅ shipped
## Overview
Spontaneous fission is the [[Radioactive_decay|radioactive decay]] mode in which a heavy nucleus splits into two intermediate-mass fragments without any external excitation, releasing on the order of 200 MeV per event together with a small burst of prompt neutrons (an average of roughly 2 to 4) and prompt gamma rays. Niels Bohr and John Wheeler predicted the channel from the liquid-drop model in 1939; Konstantin Petrzhak and Georgy Flyorov observed it experimentally in uranium in 1940. The competition between Coulomb repulsion of the protons and the surface tension of the nuclear matter governs the barrier that separates the parent from the saddle and scission configurations, and the relevant scaling parameter is Z^2/A — once it exceeds about 47 the barrier vanishes and spontaneous fission becomes prompt. For uranium-238 the partial [[Half-life|half-life]] is around 8 x 10^15 years, fewer than one decay in 10^6 of the alpha events; for californium-252 it rises to a 3% branch with a 2.65-year overall half-life, making Cf-252 the workhorse laboratory [[Neutron|neutron]] source. The mass distribution of the fragments is famously double-humped: a heavy peak near A=140 and a light peak near A=96, with a narrow valley of symmetric splits in between.
## See also
- Room hub: Nuclear
- p5.js Editor conventions: P5 JS EDITOR
- Wiki root: MAIN
---
*Scaffolded by `generative-microsim` from row 0 of the Nuclear sheet on 2026-04-30T18:29:48Z.*
Letters: exponential · distribution · lattice · probability · sampling · clock_time · filter · symmetry
<!-- REAL-GENERATIVE-MEDIA:START -->
<!-- CRAFT-LINK:START g12 -->
*Built to the [[WT!P5_js_Microsim_Master_Class|p5.js Master Class]].*
<!-- CRAFT-LINK:END -->
## Wikipedia : Wikitube
**Strict pair:** [Wikipedia](https://en.wikipedia.org/wiki/Spontaneous_fission) : [Wikitube](https://en.wikitube.io/wiki/Spontaneous_fission)
## Previous hub tags
Tree parent: [[Helium-3]].
Legacy hubs: `GENERATIVE`.
---
*Sources: 1 legacy note. Minted wave 1, 2026-07-30 (v1.6 order).*