# Atomic mass
<!-- MICROSIMGEN:BEGIN v1.7 — generated by g08_place_microsims.py; three.js first (§15); do not hand-edit inside -->
## Microsims — p5.js
### Atomic mass (p5.js)
<div class="microsim-player">
<iframe src="https://editor.p5js.org/sciencenibber/full/vVFjRW_A0" width="100%" height="480" frameborder="0" loading="lazy" sandbox="allow-scripts allow-same-origin" title="Atomic mass — p5.js microsim"></iframe>
</div>
*Two sliders set proton and neutron count; the sketch computes atomic mass, revealing the binding-energy mass defect that peaks near iron-56.*
**Open in the editor:** [▶ fork this sketch](https://editor.p5js.org/sciencenibber/sketches/vVFjRW_A0) · library `p5js`
### Related microsims
Live sims on neighbouring articles:
- [[Beta_decay]]
- [[Decay_chain]]
- [[Half-life]]
- [[Plutonium]]
- [[Thorium]]
*Sim hosted off-article; the article owns the reference, not the runtime (WIKI_RULES §10.4). Placed by `g08_place_microsims.py`.*
<!-- g09-shelf-note -->
> **Also on this page:** 1 further p5.js sketch already published for this article live further down. Per WIKI_RULES §5 a collision promotes rather than forks — they are one shelf, not rivals; this block is the §10.4 *current best* reference.
<!-- MICROSIMGEN:END -->
## Microsim
### Live player
<div class="microsim-player">
<iframe src="https://editor.p5js.org/sciencenibber/full/ifeHSMgMn" width="100%" height="620" frameborder="0" sandbox="allow-scripts allow-same-origin"></iframe>
</div>
<div class="microsim-fallback">
<img src="Microsims/thumbs/Atomic_mass.png" alt="Atomic_mass 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/ifeHSMgMn">open sketch in the p5.js editor</a></em></p>
</div>
**Editor URL:** https://editor.p5js.org/sciencenibber/sketches/ifeHSMgMn
**Description (100 words):**
An interactive chart of nuclides — [[Neutron|neutron]] number N on the x-axis (0–40), [[Proton|proton]] number Z on the y-axis (0–30) — where every (N, Z) cell is one isotope coloured by its binding energy per nucleon B/A, computed live from the Weizsacker semi-empirical mass formula. The cold-to-hot ramp makes the valley of stability pop as an orange diagonal ridge, bending rightward above Z ≈ 20 toward Fe-56 at the peak. Three landmarks are flagged: He-4 (yellow X), C-12 (magenta circle, defines the u), Fe-56 (cyan ring). Drag, click, or use arrow keys; the readout shows element symbol, Z, N, A, atomic mass in u, B/A, and mass defect.
```js
// =====================================================================
// Atomic_mass.js -- Wikitube microsim
// Article: Atomic mass en.wikitube.io/wiki/Atomic_mass
// Room: Helium Pattern: 8 (Geometry crossover --
// topological / spatial)
// ---------------------------------------------------------------------
// Idea: an interactive *chart of nuclides* -- the canonical
// topological visualisation in nuclear physics. The neutron number N
// is on the x-axis, the proton number Z on the y-axis. Each (N, Z)
// cell is one nuclide; its colour is the binding energy per nucleon
// B/A, computed from the semi-empirical (Weizsacker) mass formula:
//
// B(MeV) = a_V*A
// - a_S*A^(2/3)
// - a_C*Z*(Z-1)/A^(1/3)
// - a_A*(N-Z)^2/A
// + delta(A,Z)
//
// with Weizsacker constants a_V = 15.8, a_S = 18.3, a_C = 0.714,
// a_A = 23.2 (MeV) and pairing term delta = +12/sqrt(A), -12/sqrt(A),
// or 0 for even-even, odd-odd, and odd-A nuclei respectively.
//
// Atomic mass m(A, Z) is then assembled from the hydrogen-atom mass
// m_H (which absorbs the Z bound electrons) and the free-neutron mass
// m_n, with the binding energy subtracted via E = mc^2:
//
// m(A, Z) = Z * m_H + N * m_n - B(MeV) / 931.494 MeV/u
//
// using m_H = 1.0078250 u and m_n = 1.0086649 u.
//
// The visual identity of this chart is the *valley of stability* --
// the diagonal trough where B/A is maximal. Light nuclei sit on Z = N
// (the protons and neutrons balance); above A ~ 40 the trough bends
// rightward as extra neutrons dilute Coulomb repulsion. Iron-56 and
// nickel-62 sit at the peak (B/A ~ 8.79 MeV); helium-4 -- doubly magic
// -- punches well above its semi-empirical prediction at B/A ~ 7.07
// MeV, which is why alpha emission is the universal heavy-nucleus
// decay channel.
//
// Three landmark nuclides are marked on the chart:
// * Helium-4 (Z=2, N=2, m = 4.002602 u, B/A ~ 7.07 MeV)
// * Carbon-12 (Z=6, N=6, m = 12.000000 u exactly -- defines u)
// * Iron-56 (Z=26, N=30, m = 55.934937 u, B/A ~ 8.79 MeV, peak)
//
// Visual layout (720 x 520 canvas):
// * top-left: HUD title + en.wikitube.io/wiki/Atomic_mass subtitle
// * top-right: control hints (drag, arrows, click-to-jump)
// * centre: chart of nuclides, N x-axis 0..40, Z y-axis 0..30
// (Z grows upward); cells coloured by B/A on a cold->hot ramp
// * landmarks: yellow X on He-4, magenta circle on C-12, cyan tick on Fe-56
// * bottom: live readout (element symbol, Z, N, A, atomic mass u,
// B/A MeV, mass defect u) + canonical equation
//
// Conventions (Wikitube Betterfire Standard v0):
// * single ARTICLE constant at the top, single quotes
// * p5.disableFriendlyErrors = true to keep the editor console clean
// * non-ASCII (alpha, lambda, primes, arrows) lives in COMMENTS ONLY;
// every text() string literal is ASCII
// * Energy-room palette (P5_JS_EDITOR section 4): dark BG, HOT/COLD
// tones, STRUCT grey, TRAJ accent
// * No sliders -- the chart itself is the input device. Mouse drag,
// arrow keys, and click-to-jump move the cell selector.
// =====================================================================
const ARTICLE = 'Atomic_mass';
const TITLE = ARTICLE.replace(/_/g, ' ');
p5.disableFriendlyErrors = true;
// ----- Energy room palette (P5_JS_EDITOR section 4) ------------------
const BG = 18;
const FG = 240;
const DIM = [240, 240, 240, 140];
const HOT = [220, 110, 60]; // warm: high B/A (tightly bound)
const COLD = [60, 130, 220]; // cool: low B/A (loosely bound)
const STRUCT = [120, 130, 150]; // structural grey: outside drip lines
const TRAJ = [240, 220, 80]; // reader marker (yellow accent)
const SCRATCH = [120, 120, 120, 90]; // grid / scratch lines
const ACCENT = [200, 100, 220]; // C-12 landmark (magenta)
// ----- Physical constants for the SEMF -------------------------------
const M_H = 1.0078250; // u, hydrogen-1 atomic mass (absorbs e-)
const M_N = 1.0086649; // u, free-neutron mass
const U_PER_MEV = 1 / 931.494; // u per MeV/c^2
// Weizsacker coefficients (MeV) -- standard textbook values
const A_V = 15.8; // volume term
const A_S = 18.3; // surface term
const A_C = 0.714; // Coulomb term
const A_A = 23.2; // asymmetry term
const A_P = 12.0; // pairing prefactor
// ----- Chart range ---------------------------------------------------
const N_MIN = 0;
const N_MAX = 40;
const Z_MIN = 0;
const Z_MAX = 30;
// ----- Plot rectangle in canvas pixels (set in setup) ----------------
let plotX, plotY, plotW, plotH;
let cellW, cellH;
// ----- Reader's grid marker (integer Z, N) --------------------------
let mark = { Z: 2, N: 2 }; // start on Helium-4 (the room mascot)
let dragging = false;
// Element symbols (Z = 0..30). Z=0 used only for the free neutron.
const SYMBOLS = [
'n', 'H', 'He', 'Li', 'Be', 'B', 'C', 'N', 'O', 'F',
'Ne', 'Na', 'Mg', 'Al', 'Si', 'P', 'S', 'Cl', 'Ar', 'K',
'Ca', 'Sc', 'Ti', 'V', 'Cr', 'Mn', 'Fe', 'Co', 'Ni', 'Cu',
'Zn'
];
// Element full names (used in the readout for variety).
const NAMES = [
'neutron', 'hydrogen', 'helium', 'lithium', 'beryllium',
'boron', 'carbon', 'nitrogen', 'oxygen', 'fluorine',
'neon', 'sodium', 'magnesium', 'aluminium', 'silicon',
'phosphorus','sulfur', 'chlorine', 'argon', 'potassium',
'calcium', 'scandium', 'titanium', 'vanadium', 'chromium',
'manganese', 'iron', 'cobalt', 'nickel', 'copper',
'zinc'
];
function setup() {
createCanvas(720, 520);
pixelDensity(2);
textFont('system-ui');
// Plot area: leaves room for HUD top + readout bottom + axis labels.
plotX = 80;
plotY = 70;
plotW = width - 110;
plotH = height - 170;
// Integer cell dimensions in pixels.
cellW = plotW / (N_MAX - N_MIN + 1);
cellH = plotH / (Z_MAX - Z_MIN + 1);
}
function draw() {
background(BG);
// Order: chart field -> axes -> drip-line accents -> landmarks
// -> reader's marker -> HUD. Later layers paint on top.
drawChartField();
drawAxes();
drawValleyAccent();
drawLandmarks();
drawMarker();
drawHUD();
}
// =====================================================================
// Coordinate transforms: (N, Z) integers <-> (px, py) in canvas pixels
// Z grows *upward*, so cell row 0 is at the bottom of the plot.
// =====================================================================
function nToPx(N) { return plotX + (N - N_MIN) * cellW; }
function zToPy(Z) { return plotY + plotH - (Z - Z_MIN + 1) * cellH; }
function pxToN(px) { return Math.floor((px - plotX) / cellW) + N_MIN; }
function pyToZ(py) { return Z_MAX - Math.floor((py - plotY) / cellH); }
// =====================================================================
// Physics: SEMF binding energy, atomic mass, drip-line existence
// =====================================================================
// Pairing term delta(A, Z) for the SEMF, in MeV.
function pairingTerm(A, Z) {
const N = A - Z;
if (A <= 0) return 0;
const zEven = (Z % 2 === 0);
const nEven = (N % 2 === 0);
if (zEven && nEven) return A_P / Math.sqrt(A); // even-even
if (!zEven && !nEven) return -A_P / Math.sqrt(A); // odd-odd
return 0; // odd-A
}
// Total binding energy B (MeV) from the SEMF. Falls apart for very
// light nuclei but is fine for the colour ramp; we override the most
// important landmarks (H-1, He-4, C-12, Fe-56) for the readout.
function bindingEnergy(Z, N) {
const A = Z + N;
if (A <= 0) return 0;
if (Z <= 0 && N === 1) return 0; // free neutron, unbound
if (Z === 1 && N === 0) return 0; // hydrogen-1, no binding
const vol = A_V * A;
const surf = -A_S * Math.pow(A, 2 / 3);
const coul = -A_C * Z * (Z - 1) / Math.pow(A, 1 / 3);
const asym = -A_A * Math.pow(N - Z, 2) / A;
const pair = pairingTerm(A, Z);
return vol + surf + coul + asym + pair;
}
// Atomic mass m(A, Z) in u, using m = Z*m_H + N*m_n - B/c^2.
function atomicMass(Z, N) {
const A = Z + N;
if (A <= 0) return 0;
return Z * M_H + N * M_N - bindingEnergy(Z, N) * U_PER_MEV;
}
// AME-tabulated overrides for the famous landmarks. The SEMF gives B/A
// within ~1 MeV for these, but the *exact* atomic mass values are
// classroom-canonical and the readout must show them.
function exactMass(Z, N) {
if (Z === 2 && N === 2) return 4.002602; // He-4
if (Z === 6 && N === 6) return 12.000000; // C-12, defines u
if (Z === 26 && N === 30) return 55.934937; // Fe-56
if (Z === 1 && N === 0) return 1.007825; // H-1
if (Z === 1 && N === 1) return 2.014102; // D
if (Z === 0 && N === 1) return 1.008665; // free neutron
return atomicMass(Z, N);
}
// Crude "does this nuclide exist" test: only nuclei whose SEMF B/A is
// positive (and within rough drip-line bounds) get painted. This is a
// schematic chart, not an AME-accurate one.
function existsRoughly(Z, N) {
const A = Z + N;
if (A < 1) return false;
if (Z === 0 && N > 1) return false; // no di-neutron etc.
if (N === 0 && Z > 1) return false; // no di-proton etc.
const B = bindingEnergy(Z, N);
if (B <= 0) return false;
// Approximate proton drip on the proton-rich side
if (Z > 0 && N < 0.55 * Z - 0.5) return false;
// Approximate neutron drip on the neutron-rich side (loose)
if (Z > 4 && N > 2.4 * Z + 6) return false;
return true;
}
// =====================================================================
// Colour ramp: B/A in MeV -> RGB on the COLD -> HOT scale
// =====================================================================
function ramp(t) {
// t in [0, 1]. Below 0.35 -> COLD (blue). Above 0.7 -> HOT (orange).
// Middle uses a greenish bridge so the valley reads as a ridge.
const tc = constrain(t, 0, 1);
// Three control points: (0, COLD), (0.5, green-bridge), (1, HOT)
const bridge = [120, 170, 90];
let r, g, b;
if (tc < 0.5) {
const u = tc / 0.5;
r = lerp(COLD[0], bridge[0], u);
g = lerp(COLD[1], bridge[1], u);
b = lerp(COLD[2], bridge[2], u);
} else {
const u = (tc - 0.5) / 0.5;
r = lerp(bridge[0], HOT[0], u);
g = lerp(bridge[1], HOT[1], u);
b = lerp(bridge[2], HOT[2], u);
}
return [r, g, b];
}
// =====================================================================
// Drawing
// =====================================================================
// Paint the (N, Z) chart of nuclides as a grid of small rectangles,
// each tinted by B/A. ~1270 cells total -- well within frame budget.
function drawChartField() {
noStroke();
for (let Z = Z_MIN; Z <= Z_MAX; Z++) {
for (let N = N_MIN; N <= N_MAX; N++) {
const px = nToPx(N);
const py = zToPy(Z);
if (!existsRoughly(Z, N)) {
// Faint grey tile for "no nuclide here" cells so the chart
// outline still reads as a coherent rectangle.
fill(STRUCT[0], STRUCT[1], STRUCT[2], 18);
rect(px, py, cellW + 0.5, cellH + 0.5);
continue;
}
const A = Z + N;
const BA = bindingEnergy(Z, N) / A; // MeV per nucleon
// Map B/A in [0, 9] MeV -> [0, 1] for the ramp.
const t = constrain(BA / 9.0, 0, 1);
const [r, g, b] = ramp(t);
// Slight alpha boost for high-BA cells so the ridge pops.
const a = 130 + 80 * t;
fill(r, g, b, a);
rect(px, py, cellW + 0.5, cellH + 0.5);
}
}
}
function drawAxes() {
push();
noFill();
stroke(SCRATCH);
strokeWeight(1);
rect(plotX, plotY, plotW, plotH);
noStroke();
fill(...DIM);
textSize(10);
// N-axis (x) tick marks every 5 + labels along the bottom edge.
textAlign(CENTER, TOP);
for (let N = 0; N <= N_MAX; N += 5) {
const x = nToPx(N) + cellW / 2;
stroke(SCRATCH); line(x, plotY + plotH, x, plotY + plotH + 4);
noStroke(); text(N, x, plotY + plotH + 6);
}
// Z-axis (y) tick marks every 5 + labels along the left edge.
textAlign(RIGHT, CENTER);
for (let Z = 0; Z <= Z_MAX; Z += 5) {
const y = zToPy(Z) + cellH / 2;
stroke(SCRATCH); line(plotX - 4, y, plotX, y);
noStroke(); text(Z, plotX - 6, y);
}
// Axis titles
noStroke();
fill(...DIM);
textSize(12);
textAlign(CENTER, TOP);
text('N (neutron number)', plotX + plotW / 2, plotY + plotH + 22);
push();
translate(plotX - 50, plotY + plotH / 2);
rotate(-PI / 2);
text('Z (proton number)', 0, 0);
pop();
// Z = N diagonal (light-nuclide guide) -- faint dashed line.
stroke(SCRATCH);
strokeWeight(1);
drawingContext.setLineDash([4, 4]);
const dN = Math.min(N_MAX, Z_MAX);
line(nToPx(0) + cellW / 2, zToPy(0) + cellH / 2,
nToPx(dN) + cellW / 2, zToPy(dN) + cellH / 2);
drawingContext.setLineDash([]);
noStroke();
fill(...DIM);
textSize(9);
textAlign(LEFT, BOTTOM);
text('Z = N', nToPx(dN) + cellW / 2 + 4, zToPy(dN) + cellH / 2);
pop();
}
// Faint highlight along the schematic valley of stability:
// for light nuclei Z = N; for heavier ones N grows ~1.5*Z.
function drawValleyAccent() {
push();
noFill();
stroke(TRAJ[0], TRAJ[1], TRAJ[2], 80);
strokeWeight(1);
beginShape();
for (let Z = 1; Z <= Z_MAX; Z++) {
// Approximate N along the valley: Z below ~20 stays on Z=N,
// then bends toward N ~ 1.5*Z for the heavy region.
let N;
if (Z <= 20) N = Z;
else N = Z + 0.6 * (Z - 20);
if (N > N_MAX) continue;
vertex(nToPx(N) + cellW / 2, zToPy(Z) + cellH / 2);
}
endShape();
pop();
}
function drawLandmarks() {
push();
// Helium-4 (Z=2, N=2) -- yellow X (the room mascot, doubly magic)
const heX = nToPx(2) + cellW / 2;
const heY = zToPy(2) + cellH / 2;
stroke(...TRAJ);
strokeWeight(2);
line(heX - 5, heY - 5, heX + 5, heY + 5);
line(heX - 5, heY + 5, heX + 5, heY - 5);
noStroke();
fill(...TRAJ);
textSize(10);
textAlign(LEFT, BOTTOM);
text('He-4', heX + 7, heY - 3);
// Carbon-12 (Z=6, N=6) -- magenta open circle (defines the u)
noFill();
stroke(...ACCENT);
strokeWeight(2);
const cX = nToPx(6) + cellW / 2;
const cY = zToPy(6) + cellH / 2;
circle(cX, cY, 9);
noStroke();
fill(...ACCENT);
textSize(10);
textAlign(LEFT, BOTTOM);
text('C-12 (defines u)', cX + 7, cY - 3);
// Iron-56 (Z=26, N=30) -- cyan ring at the binding-energy peak
noFill();
stroke(...COLD);
strokeWeight(2);
const fX = nToPx(30) + cellW / 2;
const fY = zToPy(26) + cellH / 2;
circle(fX, fY, 9);
noStroke();
fill(...COLD);
textSize(10);
textAlign(RIGHT, BOTTOM);
text('Fe-56 (B/A peak)', fX - 7, fY - 3);
pop();
}
function drawMarker() {
// Drag-to-update marker (integer cell snapping).
if (dragging) {
const px = constrain(mouseX, plotX, plotX + plotW - 1);
const py = constrain(mouseY, plotY, plotY + plotH - 1);
mark.N = constrain(pxToN(px), N_MIN, N_MAX);
mark.Z = constrain(pyToZ(py), Z_MIN, Z_MAX);
}
const mx = nToPx(mark.N) + cellW / 2;
const my = zToPy(mark.Z) + cellH / 2;
push();
// Outer ring
noFill();
stroke(...TRAJ);
strokeWeight(2);
rect(nToPx(mark.N), zToPy(mark.Z), cellW, cellH);
// Inner crosshair
stroke(...TRAJ);
strokeWeight(1);
line(mx - 4, my, mx + 4, my);
line(mx, my - 4, mx, my + 4);
pop();
}
// =====================================================================
// Input handling
// =====================================================================
function mousePressed() {
// Inside the plot rect: snap marker to that cell and begin drag.
if (mouseX >= plotX && mouseX < plotX + plotW &&
mouseY >= plotY && mouseY < plotY + plotH) {
mark.N = constrain(pxToN(mouseX), N_MIN, N_MAX);
mark.Z = constrain(pyToZ(mouseY), Z_MIN, Z_MAX);
dragging = true;
}
}
function mouseReleased() { dragging = false; }
function keyPressed() {
if (keyCode === LEFT_ARROW) mark.N = Math.max(N_MIN, mark.N - 1);
if (keyCode === RIGHT_ARROW) mark.N = Math.min(N_MAX, mark.N + 1);
if (keyCode === UP_ARROW) mark.Z = Math.min(Z_MAX, mark.Z + 1);
if (keyCode === DOWN_ARROW) mark.Z = Math.max(Z_MIN, mark.Z - 1);
}
// =====================================================================
// HUD
// =====================================================================
function drawHUD() {
// Top-left: title + Wikitube URL (Betterfire Standard rule 2)
noStroke();
fill(FG);
textAlign(LEFT, TOP);
textSize(20);
text(TITLE, 14, 12);
fill(...DIM);
textSize(12);
text('Wikitube microsim . en.wikitube.io/wiki/Atomic_mass', 14, 36);
// Top-right: control hints (Betterfire Standard rule 3)
textAlign(RIGHT, TOP);
textSize(10);
text('drag the chart to move', width - 14, 12);
text('arrow keys nudge cell-by-cell', width - 14, 24);
text('click anywhere in chart to jump',width - 14, 36);
// Bottom-left readout: identify the selected nuclide.
const Z = mark.Z;
const N = mark.N;
const A = Z + N;
const sym = (Z >= 0 && Z < SYMBOLS.length) ? SYMBOLS[Z] : '?';
const name = (Z >= 0 && Z < NAMES.length) ? NAMES[Z] : '?';
const exists = existsRoughly(Z, N);
fill(...DIM);
textAlign(LEFT, BOTTOM);
textSize(12);
const tag = (Z === 0 && N === 1)
? 'n (free neutron)'
: sym + '-' + A + ' (' + name + ')';
text('nuclide: ' + tag + ' Z = ' + Z + ' N = ' + N + ' A = ' + A,
14, height - 38);
if (exists) {
const m = exactMass(Z, N);
const B = bindingEnergy(Z, N);
const BA = A > 0 ? B / A : 0;
// Mass defect vs. Z*m_H + N*m_n, expressed in u.
const def = Z * M_H + N * M_N - m;
fill(FG);
textSize(13);
text('m = ' + nf(m, 0, 4) + ' u B/A = ' + nf(BA, 0, 2) +
' MeV mass defect = ' + nf(def, 0, 4) + ' u',
14, height - 18);
} else {
fill(STRUCT[0], STRUCT[1], STRUCT[2], 220);
textSize(13);
text('(no bound nuclide at this Z, N -- beyond the drip lines)',
14, height - 18);
}
// Bottom-right: canonical equation (Betterfire Standard rule 4)
textAlign(RIGHT, BOTTOM);
fill(FG);
textSize(12);
text('m(A, Z) = Z*m_H + N*m_n - B/c^2', width - 14, height - 18);
fill(...DIM);
textSize(10);
text('B from semi-empirical Weizsacker formula',
width - 14, height - 4);
}
// =====================================================================
// End of Atomic_mass.js -- Wikitube microsim, Helium room, Pattern 8.
// =====================================================================
```
## Links (Wikipedia order)
<!-- injected from _registry/childlinks/Atomic_mass.json (2026-07-30T02:09:12Z) -->
`Amount_of_substance` · `Atom` · `Atomic_nucleus` · `Atomic_number` · `Average` · `Avogadro's_law` · `Avogadro_constant` · `Beryllium-8` · `Big_Bang_nucleosynthesis` · [[Binding_energy]] · `Boltzmann_constant` · `Boyle's_law` · [[Calcium]] · `Carbon-12` · `Charles's_law` · [[Chlorine]] · `Dalton_(unit)` · [[Density]] · [[Electron]] · `Faraday_constant` · `Gas_constant` · `Gay-Lussac's_law` · `History_of_chemistry` · [[Hydrogen]] · `Ideal_gas_law` · `Intensive_and_extensive_properties` · [[Ion]] · `Iron-56` · `Isotope` · `Isotope_geochemistry` · `Jean_Stas` · `John_Dalton` · `Journal_of_Chemical_Education` · `Karlsruhe_Congress` · `Kilogram` · [[Lithium]] · `Mass` · `Mass_concentration_(chemistry)` · `Mass_fraction_(chemistry)` · `Mass_number` · `Mass_spectrometry` · `Mass–energy_equivalence` · `Molality` · `Molar_concentration` · `Molar_mass` · `Molar_mass_constant` · `Molar_volume` · `Mole_(unit)` · `Mole_fraction` · `Molecular_mass` · `Molecule` · `Mononuclidic_element` · `National_Nuclear_Data_Center` · [[Neutron]] · `Neutron_number` · `Nickel-62` · [[Niobium]] · `Nuclear_binding_energy` · `Nuclear_fission` · [[Nuclear_fusion]] · `Nuclide` · [[Oxygen]] · `Particle_number` · `Pressure` · [[Proton]] · `Prout's_hypothesis` · `Relative_atomic_mass` · [[Scandium]] · `Specific_volume` · `Standard_atomic_weight` · `Stanislao_Cannizzaro` · `Thermodynamic_temperature` · `Thomas_Thomson_(chemist)` · `Triple-alpha_process` · `Tritium` · `Volume_(thermodynamics)` · [[Wayback_Machine]] · `Weighted_arithmetic_mean` · [[Zirconium]]
## From the Real GENERATIVE library (beauty pass)

*Atomic mass — image hotlinked from Wikimedia Commons (via the Real G.E.N.E.R.A.T.I.V.E. course library, Nuclear room). [Details & license](https://commons.wikimedia.org/wiki/File:Stylised_atom_with_three_Bohr_model_orbits_and_stylised_nucleus.svg).*
> The atomic mass (ma or m) is the mass of an atom. Although the SI unit of mass is the kilogram (symbol: kg), atomic mass is often expressed in the non-SI unit dalton (symbol: Da) – equivalently, unified atomic mass unit (u). 1 Da is defined as 1⁄12 of the mass of a free carbon-12 atom at rest in its ground state.[1] The protons and neutrons of the nucleus account for nearly all of the total mass of atoms, with the electrons and nuclear binding energy making minor contributions ([Wikipedia](https://en.wikipedia.org/wiki/Atomic_mass))
<!-- BEAUTY-PASS-MEDIA:END -->
> **Room:** [[Helium]] · **Status:** ✅ shipped
## Overview
The **atomic mass** of an isotope is the mass of one neutral atom of that nuclide, conventionally expressed in **unified atomic mass units (u)** or **daltons (Da)**, where 1 u is defined as exactly 1/12 the mass of a neutral, ground-state atom of carbon-12 (1 u is approximately 1.66053906660e-27 kg). For any nuclide of mass number A and atomic number Z, with N = A - Z neutrons, the atomic mass m(A,Z) is *not* simply Z*m(p) + N*m(n) + Z*m(e): it is systematically smaller by an amount E_B/c^2, where E_B is the total nuclear binding energy. This **mass defect** is captured to within a few hundred keV across the chart of nuclides by the semi-empirical (Weizsacker) mass formula E_B = a_V*A - a_S*A^(2/3) - a_C*Z(Z-1)/A^(1/3) - a_A*(N-Z)^2/A + delta, whose terms encode volume, surface, Coulomb, asymmetry, and pairing contributions. The [[Binding_energy|binding energy]] per nucleon E_B/A peaks near A approximately 56 (the iron-nickel region), explaining why both fusion of light nuclei and fission of heavy nuclei release [[Energy|energy]]. Distinct from atomic mass are the **mass number** A (an integer count of nucleons), the **standard atomic weight** (a CIAAW-published, isotope-weighted average for natural samples), and the **relative atomic mass** A_r (a dimensionless ratio to 1/12 m(C-12)). Helium-4, with m approximately 4.002602 u and an exceptionally large binding energy per nucleon (about 7.07 MeV), is the prototypical doubly-magic nucleus and the standard reference for alpha-decay energetics. Modern atomic-mass values are tabulated in the AME evaluations and measured by Penning-trap mass spectrometry to precisions approaching one part in 10^11.
## See also
- Room hub: [[Helium]]
- p5.js Editor conventions: P5 JS EDITOR
- Wiki root: MAIN
---
*Scaffolded by `generative-microsim` from row 130 of the Helium sheet on 2026-05-14T12:30:31Z.*
<!-- BEAUTY-PASS-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/Atomic_mass) : [Wikitube](https://en.wikitube.io/wiki/Atomic_mass)
## Previous hub tags
Tree parents: [[Helium-3]] · [[Oxygen]].
Legacy hubs: `GENERATIVE`.
---
*Sources: 2 legacy notes. Minted wave 1, 2026-07-30 (v1.6 order).*