# Helium cryogenics
## Microsim
### Live player
<div class="microsim-player">
<iframe src="https://editor.p5js.org/sciencenibber/full/pP5sZ5sSv" width="100%" height="620" frameborder="0" sandbox="allow-scripts allow-same-origin"></iframe>
</div>
<div class="microsim-fallback">
<img src="Microsims/thumbs/Helium_cryogenics.png" alt="Helium_cryogenics 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/pP5sZ5sSv">open sketch in the p5.js editor</a></em></p>
</div>
**Editor URL:** https://editor.p5js.org/sciencenibber/sketches/pP5sZ5sSv
**Description (100 words):**
A vertical, logarithmic temperature thermometer from 300 K down to 1 mK. The reader drags a yellow marker along the bar — or clicks to jump — and a side panel reports the active helium phase, the cooling technology that reaches that temperature, and a short engineering note. Nine colored bands stack the full helium cryogenic ladder: ambient precool, two expansion stages, liquefaction, the He I bath, the He II superfluid region that cools the LHC, He-3 evaporation, dilution refrigeration, and the post-helium sub-mK zone. Faint yellow ticks mark canonical landmarks: LN2, LH2, He-4 critical, He-4 NBP at 4.222 K, He-3 NBP, and the He-4 lambda transition at 2.172 K. Arrow keys nudge by 0.05 decades.
```js
// =====================================================================
// Helium_cryogenics.js -- Wikitube microsim
// Article: Helium_cryogenics en.wikitube.io/wiki/Helium_cryogenics
// Room: Helium Pattern: A (state space: cryogenic
// temperature ladder)
// ---------------------------------------------------------------------
// Idea: the reader drags a marker up and down a vertical, logarithmic
// temperature thermometer spanning 300 K down to 1 mK. As the marker
// crosses each cryogenic band, an info panel on the right reports the
// active helium phase, the cooling technology that reaches this
// temperature, and the working fluid. The thermometer is annotated
// with the canonical landmark temperatures of helium cryogenics:
//
// * 273.15 K water freezes (top reference)
// * 77 K LN2 boiling point (precool stage)
// * 20.4 K LH2 boiling point
// * 5.195 K He-4 critical temperature
// * 4.222 K He-4 normal boiling point
// * 3.19 K He-3 normal boiling point
// * 2.172 K He-4 lambda transition (He I -> He II)
// * 1.0 K practical limit of pumped liquid He-4
// * 0.3 K practical limit of pumped He-3
// * 0.01 K dilution refrigerator base
//
// Why this view complements Cryogenics.js (which is a He-4 (T, P)
// phase diagram): it collapses pressure and instead resolves the
// full helium-flavored temperature stack from ambient to milli-K,
// including the He-3 leg that the (T, P) diagram cannot reach.
//
// Canonical relation behind every phase boundary on the ladder:
// dP/dT = L / (T * dV) [Clausius-Clapeyron]
// The negative slope of He-3's melting curve below 0.32 K (the
// Pomeranchuk effect) is the same relation read backwards: dV < 0.
//
// Visual layout (720 x 520 canvas):
// * top-left: HUD title + en.wikitube.io/wiki/Helium_cryogenics
// * top-right: control hints (drag, arrow keys, click bar to jump)
// * left half: vertical thermometer, log T axis 300 K -> 1 mK
// * right half: info panel -- band name, T readout, helium state,
// cooling technology, notes
// * bottom-left: live (T, log10 T) readout
// * bottom-right: canonical equation (Clausius-Clapeyron)
//
// Conventions (Wikitube Betterfire Standard v0):
// * single ARTICLE constant at top, single quotes
// * p5.disableFriendlyErrors = true to keep the editor console clean
// * non-ASCII (Greek lambda, dots, arrows) lives in COMMENTS ONLY;
// every text() string literal is ASCII (the editor preview pipeline
// mangles non-ASCII inside string arguments to p5 calls)
// * Energy-room palette (P5_JS_EDITOR section 4): dark BG, HOT/COLD
// tones, STRUCT grey, TRAJ yellow accent
//
// No sliders -- the thermometer bar is the controller. Mouse drag and
// arrow keys move the marker; clicking inside the bar jumps to that T.
// =====================================================================
const ARTICLE = 'Helium_cryogenics';
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, 150];
const HOT = [220, 110, 60]; // warm: ambient gas
const COOL = [80, 160, 220]; // cool: precool (LN2, LH2)
const COLD = [60, 130, 220]; // cold: He I bath
const COLDER = [40, 80, 180]; // colder: He II superfluid
const FROZEN = [160, 130, 220]; // violet: dilution-fridge band
const SUBMK = [180, 160, 240]; // lighter violet: sub-mK regime
const STRUCT = [120, 130, 150];
const TRAJ = [240, 220, 80]; // reader marker (yellow accent)
const SCRATCH = [120, 120, 120, 90]; // grid / tick lines
const PANEL_BG = [40, 45, 55, 230]; // right-side info panel fill
// ----- Temperature axis (log10 K) -----------------------------------
const LOG_T_TOP = Math.log10(300); // ~2.477 (top of ladder)
const LOG_T_BOT = -3; // 0.001 K (bottom of ladder)
// ----- Thermometer geometry (set in setup) --------------------------
let ladX, ladY, ladW, ladH;
// ----- Reader's marker (in log10 T) ---------------------------------
let markLogT = Math.log10(4.222); // start at He-4 NBP
let dragging = false;
// ----- Cryogenic bands (descending T) -------------------------------
// Each band has the temperature window it owns, the dominant working
// fluid, the cooling technology that reaches it, a color (for the bar
// slice and the info-panel swatch), and a short engineering note.
const BANDS = [
{
topK: 300, botK: 77,
label: 'ambient / precool',
fluid: 'helium gas (1 atm)',
tech: 'water-cooled compressor + LN2 precool',
color: HOT,
note: 'He is a noble gas at STP; the cold box compresses and precools He gas with LN2 before deep cooling.'
},
{
topK: 77, botK: 20,
label: 'high-T expansion',
fluid: 'helium gas, dense',
tech: 'turbo-expander (Brayton / Claude high stage)',
color: COOL,
note: 'Above the He inversion T (~45 K) only an expansion engine cools; a JT valve alone would heat the gas.'
},
{
topK: 20, botK: 5.195,
label: 'low-T expansion + JT',
fluid: 'helium gas, near saturation',
tech: 'second expander + Joule-Thomson valve',
color: [70, 150, 220],
note: 'Below the 45 K inversion T the JT valve produces net cooling; gas approaches the He-4 saturation dome.'
},
{
topK: 5.195, botK: 4.222,
label: 'liquefaction (He-4)',
fluid: 'two-phase He-4',
tech: 'Claude / Collins liquefier',
color: [60, 140, 220],
note: 'Critical point at 5.195 K, 0.227 MPa. Liquid droplets form on the cold end below 4.222 K at 1 atm.'
},
{
topK: 4.222, botK: 2.172,
label: 'liquid He I bath',
fluid: 'liquid helium-4 (He I)',
tech: 'atmospheric or pumped He-4 dewar',
color: COLD,
note: 'Normal viscous liquid. Workhorse coolant for superconducting magnets in MRI, NMR, and accelerator beamlines.'
},
{
topK: 2.172, botK: 1.0,
label: 'superfluid He II',
fluid: 'liquid helium-4 (He II)',
tech: 'sub-atmospheric pumped He-4',
color: COLDER,
note: 'Zero viscosity, enormous effective k. Cools the LHC dipoles at 1.9 K and SRF cavities at ~2.0 K.'
},
{
topK: 1.0, botK: 0.3,
label: 'He-3 evaporation',
fluid: 'liquid helium-3',
tech: 'single-shot or continuous He-3 refrigerator',
color: [120, 80, 200],
note: 'Pumping on He-3 vapor reaches ~0.3 K. The rare He-3 inventory runs closed-cycle to conserve fluid.'
},
{
topK: 0.3, botK: 0.01,
label: 'dilution refrigeration',
fluid: 'He-3 dissolved in He-4',
tech: 'He-3 / He-4 dilution refrigerator',
color: FROZEN,
note: 'Continuous cooling via the He-3/He-4 tricritical phase boundary. Base T 5-10 mK powers qubit dilution fridges.'
},
{
topK: 0.01, botK: 0.001,
label: 'sub-mK regime',
fluid: 'no helium phase',
tech: 'nuclear adiabatic demagnetisation',
color: SUBMK,
note: 'Beyond helium cryogenics; cooling here comes from nuclear-spin entropy reservoirs (Cu, PrNi5).'
}
];
// ----- Landmarks (drawn as yellow tick lines across the bar) --------
const LANDMARKS = [
{ K: 273.15, label: 'water freezes' },
{ K: 77.0, label: 'LN2 NBP' },
{ K: 20.4, label: 'LH2 NBP' },
{ K: 5.195, label: 'He-4 critical' },
{ K: 4.222, label: 'He-4 NBP' },
{ K: 3.19, label: 'He-3 NBP' },
{ K: 2.172, label: 'He-4 lambda' },
{ K: 1.0, label: 'pumped He-4 limit' },
{ K: 0.3, label: 'He-3 evap base' },
{ K: 0.01, label: 'dilution base' }
];
function setup() {
createCanvas(720, 520);
pixelDensity(2);
textFont('system-ui');
// Thermometer rectangle (vertical bar). Plenty of left margin for
// axis tick labels; the right half of the canvas hosts the info panel.
ladX = 130;
ladY = 70;
ladW = 110;
ladH = height - 130; // 390 px tall
}
function draw() {
background(BG);
// Order: bar slices (filled bands) -> outline + axis ticks -> band
// separators + names -> landmark ticks -> reader marker -> info panel
// -> HUD. Later layers always paint on top.
drawThermometer();
drawBandSeparators();
drawLandmarks();
drawMarker();
drawInfoPanel();
drawHUD();
}
// =====================================================================
// Coordinate transforms: log10(T [K]) <-> py
// =====================================================================
// Top of the bar = LOG_T_TOP (300 K); bottom of the bar = LOG_T_BOT
// (0.001 K). Higher T -> smaller y, like a real wall-mounted thermometer.
function logTtoY(logT) {
return map(logT, LOG_T_TOP, LOG_T_BOT, ladY, ladY + ladH);
}
function yToLogT(py) {
return map(py, ladY, ladY + ladH, LOG_T_TOP, LOG_T_BOT);
}
function tToY(T) { return logTtoY(Math.log10(T)); }
// =====================================================================
// Band classification: which band contains this T?
// =====================================================================
function bandFor(T) {
for (const b of BANDS) {
if (T <= b.topK && T > b.botK) return b;
}
if (T > BANDS[0].topK) return BANDS[0];
if (T <= BANDS[BANDS.length - 1].botK) return BANDS[BANDS.length - 1];
return BANDS[0];
}
// =====================================================================
// Drawing
// =====================================================================
// Paint each band as a colored slice along the vertical bar, then draw
// the bounding outline and axis tick labels at each decade of log10 T.
function drawThermometer() {
noStroke();
for (const b of BANDS) {
const yTop = tToY(b.topK);
const yBot = tToY(b.botK);
const c = b.color;
fill(c[0], c[1], c[2], 175);
rect(ladX, yTop, ladW, yBot - yTop);
}
// Outline.
noFill();
stroke(SCRATCH);
strokeWeight(1);
rect(ladX, ladY, ladW, ladH);
// Decade tick labels on the left edge of the bar.
textSize(10);
textAlign(RIGHT, CENTER);
for (let logT = -3; logT <= 2; logT++) {
const y = logTtoY(logT);
if (y < ladY - 2 || y > ladY + ladH + 2) continue;
stroke(SCRATCH);
line(ladX - 4, y, ladX, y);
noStroke();
fill(...DIM);
const T = Math.pow(10, logT);
text(formatT(T), ladX - 6, y);
}
// "300 K" label at the top edge.
const yTopAxis = logTtoY(LOG_T_TOP);
stroke(SCRATCH); line(ladX - 4, yTopAxis, ladX, yTopAxis);
noStroke();
fill(...DIM);
textAlign(RIGHT, CENTER);
text('300 K', ladX - 6, yTopAxis);
// Rotated axis title (left of the ticks).
push();
noStroke();
fill(...DIM);
textSize(12);
translate(ladX - 50, ladY + ladH / 2);
rotate(-PI / 2);
textAlign(CENTER, CENTER);
text('T [K, log scale]', 0, 0);
pop();
}
// Thin grey separator at each band boundary, with the band name in the
// gutter on the right side of the bar so the reader sees the stack at
// a glance even before dragging the marker.
function drawBandSeparators() {
textSize(10);
textAlign(LEFT, CENTER);
for (const b of BANDS) {
const yBot = tToY(b.botK);
stroke(SCRATCH);
strokeWeight(1);
line(ladX, yBot, ladX + ladW + 6, yBot);
noStroke();
fill(...DIM);
const yMid = (tToY(b.topK) + tToY(b.botK)) / 2;
text(b.label, ladX + ladW + 10, yMid);
}
}
// Each named landmark gets a faint yellow tick line across the bar.
// These are the "anchor temperatures" of helium cryogenics; clicking
// the bar at these heights snaps the marker to them.
function drawLandmarks() {
for (const lm of LANDMARKS) {
const y = tToY(lm.K);
if (y < ladY || y > ladY + ladH) continue;
stroke(TRAJ[0], TRAJ[1], TRAJ[2], 90);
strokeWeight(1);
line(ladX, y, ladX + ladW, y);
}
}
// Reader's marker: a horizontal line across the bar plus a filled dot
// centered on the bar. Updated each frame from the drag handler.
function drawMarker() {
if (dragging) {
const py = constrain(mouseY, ladY, ladY + ladH);
markLogT = yToLogT(py);
}
const y = logTtoY(markLogT);
push();
// Halo across (and slightly beyond) the bar.
stroke(...TRAJ);
strokeWeight(2);
line(ladX - 10, y, ladX + ladW + 10, y);
// Centered dot.
noStroke();
fill(...TRAJ);
circle(ladX + ladW / 2, y, 10);
pop();
}
// Right-hand info panel: band headline, temperature readout, working
// fluid, cooling technology, short note.
function drawInfoPanel() {
const T = Math.pow(10, markLogT);
const band = bandFor(T);
const panelX = 330;
const panelY = ladY;
const panelW = width - panelX - 20;
const panelH = 380;
// Panel background plate.
push();
noStroke();
fill(...PANEL_BG);
rect(panelX, panelY, panelW, panelH, 6);
pop();
// Color swatch (vertical bar) keyed to the band.
noStroke();
fill(band.color[0], band.color[1], band.color[2]);
rect(panelX + 12, panelY + 14, 10, 32);
// Headline band label.
fill(FG);
textSize(16);
textAlign(LEFT, TOP);
text(band.label, panelX + 30, panelY + 16);
// Temperature readout (big, yellow).
fill(...DIM);
textSize(11);
text('current T', panelX + 30, panelY + 50);
fill(...TRAJ);
textSize(22);
text(formatTReadout(T), panelX + 30, panelY + 64);
// Working fluid.
fill(...DIM);
textSize(11);
text('working fluid', panelX + 30, panelY + 104);
fill(FG);
textSize(13);
text(band.fluid, panelX + 30, panelY + 118);
// Cooling technology.
fill(...DIM);
textSize(11);
text('cooling technology', panelX + 30, panelY + 146);
fill(FG);
textSize(13);
text(band.tech, panelX + 30, panelY + 160, panelW - 50, 36);
// Engineering note (wrapped paragraph).
fill(...DIM);
textSize(11);
text('engineering note', panelX + 30, panelY + 204);
fill(FG);
textSize(12);
textLeading(15);
text(band.note, panelX + 30, panelY + 220, panelW - 50, 100);
// Footer: helium-isotope reminder.
fill(...DIM);
textSize(10);
textAlign(LEFT, BOTTOM);
text('He-4 NBP 4.222 K He-3 NBP 3.19 K He-4 lambda 2.172 K',
panelX + 12, panelY + panelH - 10);
}
// Top-left title block, top-right interaction hints, bottom readout
// and canonical Clausius-Clapeyron relation. Required by the Betterfire
// Standard (P5_JS_EDITOR section 2).
function drawHUD() {
noStroke();
fill(FG);
textAlign(LEFT, TOP);
textSize(20);
text(TITLE, 14, 12);
fill(...DIM);
textSize(12);
text('Wikitube microsim . en.wikitube.io/wiki/' + ARTICLE, 14, 36);
// Top-right hints.
textAlign(RIGHT, TOP);
textSize(10);
text('drag the marker along the bar', width - 14, 12);
text('arrow keys nudge (0.05 dec)', width - 14, 24);
text('click anywhere on bar to jump', width - 14, 36);
// Bottom-left: live (T, log10 T) readout.
const T = Math.pow(10, markLogT);
fill(...DIM);
textAlign(LEFT, BOTTOM);
textSize(12);
text('T = ' + formatTReadout(T) + ' log10 T = ' + nf(markLogT, 0, 2),
14, height - 8);
// Bottom-right: canonical equation (required by Betterfire Standard).
fill(FG);
textAlign(RIGHT, BOTTOM);
textSize(13);
text('dP/dT = L / (T * dV) [Clausius-Clapeyron]',
width - 14, height - 8);
}
// =====================================================================
// Formatting helpers
// =====================================================================
// Axis-tick formatter (compact, drops trailing zeros).
function formatT(T) {
if (T >= 100) return nf(T, 0, 0) + ' K';
if (T >= 1) return nf(T, 0, 1) + ' K';
if (T >= 0.01) return nf(T * 1000, 0, 0) + ' mK';
return nf(T * 1000, 0, 1) + ' mK';
}
// Marker readout (more precision; switches units as needed).
function formatTReadout(T) {
if (T >= 100) return nf(T, 0, 1) + ' K';
if (T >= 10) return nf(T, 0, 2) + ' K';
if (T >= 1) return nf(T, 0, 3) + ' K';
if (T >= 0.1) return nf(T * 1000, 0, 1) + ' mK';
if (T >= 0.001) return nf(T * 1000, 0, 2) + ' mK';
return nf(T * 1e6, 0, 1) + ' uK';
}
// =====================================================================
// Input handling
// =====================================================================
// Clicking anywhere on (or near) the bar jumps the marker and starts
// a drag. The hit rect is slightly wider than the bar to make the
// thermometer easy to grab on a trackpad.
function mousePressed() {
if (mouseX >= ladX - 12 && mouseX <= ladX + ladW + 12 &&
mouseY >= ladY && mouseY <= ladY + ladH) {
markLogT = yToLogT(mouseY);
dragging = true;
}
}
function mouseReleased() { dragging = false; }
// Arrow keys nudge the marker in log space; Page Up / Page Down jump
// half a decade so the reader can sweep across the full ladder fast.
function keyPressed() {
const step = 0.05;
if (keyCode === DOWN_ARROW) markLogT = Math.max(LOG_T_BOT, markLogT - step);
if (keyCode === UP_ARROW) markLogT = Math.min(LOG_T_TOP, markLogT + step);
if (keyCode === PAGE_UP) markLogT = Math.min(LOG_T_TOP, markLogT + 0.5);
if (keyCode === PAGE_DOWN) markLogT = Math.max(LOG_T_BOT, markLogT - 0.5);
}
// =====================================================================
// End of Helium_cryogenics.js -- Wikitube microsim, Helium, Pattern A.
// =====================================================================
```
## Links (Wikipedia order)
<!-- injected from _registry/childlinks/Helium_cryogenics.json (2026-07-30T02:09:12Z) -->
`Absolute_zero` · `Ambient_pressure` · `Bose–Einstein_condensate` · [[Cryogenics]] · [[Dilution_refrigerator]] · [[Helium]] · `Lambda_point` · `Phonon` · [[Quantum_computing]] · `Roton` · [[Second_law_of_thermodynamics]] · `State_of_matter` · `X-ray_crystallography`
## From the vault media library
!Helium cryogenics thumb.png
*Helium Cryogenics — 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:** [[Helium]] · **Status:** ✅ shipped
## Overview
**Helium cryogenics** is the branch of cryogenic [[Engineering|engineering]] that uses helium — both helium-4 and the rare isotope helium-3 — as the working fluid for refrigeration and thermal control below about 5 K. Helium is uniquely suited to this regime because it is the only substance that remains liquid at atmospheric pressure all the way to absolute zero: helium-4 boils at 4.222 K, helium-3 at 3.19 K, and neither solidifies under its own vapor pressure no matter how cold the bath. Practical helium cryogenics couples a thermodynamic cooling cycle — Claude (compressor plus expansion engine plus Joule-Thomson stage) or Collins (multi-expander, reaching 4.5 K continuously) — with a vacuum-jacketed Dewar that suppresses heat ingress via multilayer insulation, vapor-cooled radiation shields, and low-conductivity supports. The canonical relation governing every phase boundary is the Clausius-Clapeyron equation dP/dT = L / (T·ΔV), which sets the steep helium saturation slope and explains the negative slope of the helium-3 melting curve below 0.32 K (the Pomeranchuk effect). Below 2.17 K, helium-4 enters a superfluid phase with effectively zero [[Viscosity|viscosity]] — the working fluid of pumped He-4 baths used on the Large Hadron Collider, on gravitational-[[Wave|wave]] detectors, and around superconducting accelerator cavities. Below 1 K, helium-3 evaporation refrigerators and helium-3/helium-4 dilution refrigerators carry cooling power into the millikelvin regime that underpins modern superconducting-qubit platforms, low-noise bolometers, and condensed-matter [[Physics|physics]] laboratories. Code-of-record fabrication follows ASME B31.3 process piping, BPVC VIII-1 pressure vessels, and NIST cryogenic-property tables.
## See also
- Room hub: [[Helium]]
- p5.js Editor conventions: P5 JS EDITOR
- Wiki root: MAIN
---
*Scaffolded by `generative-microsim` from row 24 of the Helium sheet on 2026-05-11T21:17:42Z.*
<!-- LOCAL-MEDIA-PASS: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/Helium_cryogenics) : [Wikitube](https://en.wikitube.io/wiki/Helium_cryogenics)
## Previous hub tags
Tree parent: [[Helium]].
Legacy hubs: none.
---
*Sources: 1 legacy note. Minted wave 1, 2026-07-30 (v1.6 order).*