# 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).*