# Reynolds number
<!-- MICROSIMGEN:BEGIN v1.7 — generated by g08_place_microsims.py; three.js first (§15); do not hand-edit inside -->
## Microsims — three.js
### Reynolds number (three.js)
<div class="microsim-player">
<iframe src="https://wikitube-3d-microsims.netlify.app/Reynolds_number.html" width="100%" height="620" frameborder="0" loading="lazy" sandbox="allow-scripts allow-same-origin" title="Reynolds number — three.js microsim"></iframe>
</div>
**Open it full-screen:** [Reynolds_number.html](https://wikitube-3d-microsims.netlify.app/Reynolds_number.html) · library `threejs` · route `microsim/threejs/`
### Related microsims
Live sims on neighbouring articles — 1 of them inside this article's own Wikipedia link tree:
- [[Viscosity]] *(in tree)*
- [[Fractional_distillation]]
- [[Liquid_helium]]
*Sim hosted off-article; the article owns the reference, not the runtime (WIKI_RULES §10.4). Placed by `g08_place_microsims.py`.*
<!-- MICROSIMGEN:END -->
## Microsim
### Live player
<div class="microsim-player">
<iframe src="https://editor.p5js.org/sciencenibber/full/7nc6jHf-e" width="100%" height="620" frameborder="0" sandbox="allow-scripts allow-same-origin"></iframe>
</div>
<div class="microsim-fallback">
<img src="Microsims/thumbs/Reynolds_number.png" alt="Reynolds_number 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/7nc6jHf-e">open sketch in the p5.js editor</a></em></p>
</div>
**Editor URL:** https://editor.p5js.org/sciencenibber/sketches/7nc6jHf-e
**Description (100 words):**
Tracer particles stream left-to-right past a circular cylinder while three sliders set the freestream speed U, the diameter D, and the kinematic [[Viscosity|viscosity]] nu. The sketch computes Re = U*D/nu live and switches the wake between the four textbook regimes: creeping flow below Re 5, a steady pair of attached vortices to about 40, a clean laminar Karman vortex street to roughly 1000, and a jittery turbulent wake beyond. Streaks are coloured by local speed and the cylinder radius tracks D, so the reader feels how a single dimensionless ratio decides whether a flow stays orderly or breaks into chaos.
```js
// =====================================================================
// Article : Reynolds number
// Slug : Reynolds_number
// Wikitube : en.wikitube.io/wiki/Reynolds_number
// Room : Robotics
//
// Idea : Advect a cloud of tracer particles through a stylised flow
// past a circular cylinder. The reader sets the freestream
// speed U, the cylinder diameter D, and the kinematic
// viscosity nu with three sliders; the sketch computes the
// Reynolds number Re = U*D/nu and switches the WAKE pattern
// between the four classic regimes:
// Re < 5 : creeping flow (smooth, fore-aft symmetric)
// 5 .. 40 : attached vortices (steady recirculation bubble)
// 40 .. 1k : Karman vortex street (clean alternating eddies)
// Re > 1k : turbulent wake (vortex street + jitter)
// The point is qualitative intuition for what Re *means*: it
// is the single dimensionless knob that decides whether a
// flow is orderly or chaotic.
//
// Equation : Re = (ρ·U·D) / μ = U·D / ν (inertial / viscous)
// Strouhal shedding: f = St·U / D, St ≈ 0.2 in the street
// =====================================================================
// Rule §3 — single source of truth for the title/URL/save-name.
const ARTICLE = "Reynolds_number";
// Rule §4 — silence the Friendly Error System for ship.
p5.disableFriendlyErrors = true;
// ---------- controls ----------
let uSlider; // U : freestream speed (m/s)
let dSlider; // D : cylinder diameter (m)
let nSlider; // nu : kinematic viscosity (1e-6 m^2/s units)
// ---------- layout constants (set in setup) ----------
let cx, cy; // cylinder centre, px
let PANEL_TOP; // y where the bottom control panel begins
const NP = 950; // particle count
// ---------- particle pool ----------
let px = [], py = []; // current position
let ppx = [], ppy = []; // previous position (for streaks)
function setup() {
// Rule §5 — canvas inside setup, standard size, retina density.
createCanvas(720, 520);
pixelDensity(2);
PANEL_TOP = height - 96; // reserve a strip for sliders + readouts
cx = width * 0.30; // cylinder sits left-of-centre
cy = PANEL_TOP * 0.5; // vertically centred in the flow region
// Rule §6 — controls built in setup, positioned explicitly, ranges
// chosen to be mathematically meaningful (water .. glycerin etc).
uSlider = createSlider(0.5, 10, 2.0, 0.1); // m/s
uSlider.position(96, height - 76);
uSlider.style("width", "150px");
dSlider = createSlider(0.01, 2.0, 0.10, 0.01); // m
dSlider.position(96, height - 50);
dSlider.style("width", "150px");
// nu in units of 1e-6 m^2/s: 1 = water, 15 = air, ~1100 = glycerin.
nSlider = createSlider(1, 1500, 30, 1);
nSlider.position(96, height - 24);
nSlider.style("width", "150px");
// Seed particles across the inlet column and a bit beyond.
for (let i = 0; i < NP; i++) spawn(i, true);
textFont("system-ui");
}
// (Re)spawn particle i. If full=true scatter across whole canvas so the
// first frame is already populated; otherwise drop it at the left inlet.
function spawn(i, full) {
px[i] = full ? random(width) : random(-20, 0);
py[i] = random(8, PANEL_TOP - 8);
ppx[i] = px[i];
ppy[i] = py[i];
}
// Map the diameter slider to an on-screen cylinder radius in pixels so
// the geometry the reader sees actually reflects D.
function radiusPx(D) { return map(D, 0.01, 2.0, 7, 64); }
// ---------- the flow field ----------
// Returns {u, v} pixel-velocity at (x, y) for the current regime.
// Base layer is inviscid potential flow past a cylinder; the wake layer
// is switched on by the Reynolds number.
function field(x, y, a, U0, Re, t) {
const dx = x - cx, dy = y - cy;
const r2 = dx * dx + dy * dy;
const r = Math.sqrt(r2);
// Potential flow past a cylinder of radius a (complex-potential result).
const a2 = a * a;
let u = U0 * (1 - a2 * (dx * dx - dy * dy) / (r2 * r2));
let v = U0 * (-2 * a2 * dx * dy / (r2 * r2));
// --- wake modifications, only downstream of the cylinder ---
if (dx > 0) {
const wake = Math.exp(-(dy * dy) / (2 * (a * 1.6) * (a * 1.6))); // lateral
if (Re < 5) {
// creeping flow: viscosity smears momentum, keep it smooth & slow.
u *= 0.9;
} else if (Re < 40) {
// attached vortices: a steady reverse-flow bubble right behind.
if (dx < 2.6 * a) {
const bub = wake * (1 - dx / (2.6 * a));
u -= U0 * 1.4 * bub; // reverse flow near the body
v += U0 * 0.8 * bub * (dy > 0 ? 1 : -1);
}
} else {
// vortex street: transverse oscillation that grows then decays.
const St = 0.2;
const omega = St * U0 / a; // shedding angular frequency
const k = omega / U0; // convective wavenumber
const grow = Math.min(dx / (3 * a), 1); // ramp on
const decay = Math.exp(-dx / (14 * a)); // fade far away
const amp = U0 * 1.1 * grow * decay * wake;
v += amp * Math.sin(k * dx - omega * t);
// turbulent regime: superimpose incoherent jitter on top.
if (Re >= 1000) {
const turb = Math.min((Math.log10(Re) - 3) / 3, 1); // 0..1
const n = noise(x * 0.02, y * 0.02, t * 0.01) - 0.5;
const m = noise(x * 0.02 + 50, y * 0.02 + 50, t * 0.01) - 0.5;
u += U0 * 1.6 * turb * n * wake;
v += U0 * 1.6 * turb * m * wake;
}
}
}
return { u, v };
}
// Name the regime for the readout.
function regimeName(Re) {
if (Re < 5) return "creeping (Stokes) flow";
if (Re < 40) return "steady attached vortices";
if (Re < 1000) return "laminar Karman vortex street";
return "turbulent wake";
}
function draw() {
background(250);
// ---------- read controls ----------
const U = uSlider.value(); // m/s
const D = dSlider.value(); // m
const nu = nSlider.value() * 1e-6; // m^2/s
const Re = U * D / nu; // the dimensionless number itself
const a = radiusPx(D); // cylinder radius in px
const U0 = map(U, 0.5, 10, 0.8, 6); // base pixel speed per frame
const t = frameCount;
// ---------- advect + draw particles (rule §8 layer 2) ----------
strokeWeight(1.2);
for (let i = 0; i < NP; i++) {
const f = field(px[i], py[i], a, U0, Re, t);
ppx[i] = px[i];
ppy[i] = py[i];
px[i] += f.u;
py[i] += f.v;
// colour the streak by local speed: slow = blue, fast = orange/red.
const sp = Math.sqrt(f.u * f.u + f.v * f.v);
const hot = constrain(map(sp, 0, U0 * 2.2, 0, 1), 0, 1);
stroke(lerpColor(color(40, 90, 200), color(220, 90, 40), hot), 170);
line(ppx[i], ppy[i], px[i], py[i]);
// recycle particles that leave the field, sink into the panel, or
// tunnel into the cylinder.
const inBody = (px[i] - cx) ** 2 + (py[i] - cy) ** 2 < a * a;
if (px[i] > width + 4 || py[i] < 4 || py[i] > PANEL_TOP - 2 || inBody) {
spawn(i, false);
}
}
// ---------- reference geometry: the cylinder (rule §8 layer 1) ----------
noStroke();
fill(60);
circle(cx, cy, 2 * a);
fill(150);
circle(cx, cy, 2 * a - 6);
// ---------- bottom control panel backdrop ----------
noStroke();
fill(255, 235);
rect(0, PANEL_TOP, width, height - PANEL_TOP);
stroke(220);
line(0, PANEL_TOP, width, PANEL_TOP);
drawHUD(U, D, nu, Re);
}
// =====================================================================
// HUD — rule §2. Drawn last, noStroke first. ASCII-only strings.
// =====================================================================
function drawHUD(U, D, nu, Re) {
noStroke();
// 2a. top-left title block
fill(20);
textAlign(LEFT, TOP);
textSize(20);
text("Reynolds number", 14, 12);
fill(110);
textSize(12);
text("Wikitube microsim - en.wikitube.io/wiki/" + ARTICLE, 14, 38);
// 2b. top-right control hints
fill(110);
textAlign(RIGHT, TOP);
textSize(11);
text("sliders: U (speed), D (diameter), nu (viscosity)", width - 14, 12);
text("Re < 5 creeping < 40 vortices < 1000 street < turbulent",
width - 14, 28);
// slider labels (rule §7): symbol to the left, right-aligned.
fill(60);
textAlign(RIGHT, CENTER);
textSize(12);
text("U", 88, height - 76 + 7);
text("D", 88, height - 50 + 7);
text("nu", 88, height - 24 + 7);
// inline slider value readouts, just right of each slider
fill(40);
textAlign(LEFT, CENTER);
textSize(12);
text(nf(U, 1, 1) + " m/s", 256, height - 76 + 7);
text(nf(D, 1, 2) + " m", 256, height - 50 + 7);
text(nf(nu * 1e6, 1, 0) + "e-6 m^2/s", 256, height - 24 + 7);
// 2c. the headline readout: Re and its regime
textAlign(LEFT, CENTER);
fill(20);
textSize(20);
text("Re = " + reFormat(Re), 392, height - 64);
fill(196, 90, 40);
textSize(13);
text(regimeName(Re), 392, height - 40);
// 2d. bottom-right equation footer
fill(80);
textAlign(RIGHT, BOTTOM);
textSize(11);
text("Re = rho*U*D / mu = U*D / nu", width - 12, height - 8);
}
// Human-friendly Reynolds number: integer below 10k, else scientific.
function reFormat(Re) {
if (Re < 10000) return nf(Re, 1, Re < 100 ? 1 : 0);
const e = Math.floor(Math.log10(Re));
return nf(Re / Math.pow(10, e), 1, 1) + "e" + e;
}
```
## Links (Wikipedia order)
<!-- injected from _registry/childlinks/Reynolds_number.json (2026-07-30T02:09:12Z) -->
`Aerodynamics` · `Airfoil` · `Alfvén_Mach_number` · `Angular_velocity` · `Annual_Review_of_Fluid_Mechanics` · `Aorta` · `Archimedes'_principle` · `Archimedes_number` · `Arnold_Sommerfeld` · `Atheroma` · `Atmospheric_entry` · `Atwood_number` · `Bagnold_number` · `Bejan_number` · `Biot_number` · `Blue_whale` · `Bodenstein_number` · `Boundary_layer` · `Brain` · `Brinkman_number` · `Cambridge` · `Capillary_number` · `Cauchy_number` · `Cavitation` · `Chandrasekhar_number` · `Characteristic_length` · `Ciliate` · `Columbus,_Ohio` · `Complex_network` · `Compressible_flow` · `Computational_fluid_dynamics` · `Damköhler_numbers` · `Darcy_number` · `Darcy–Weisbach_equation` · `David_Ruelle` · `Dean_number` · `Deborah_number` · [[Density]] · `Deposition_(geology)` · `Dimensionless_numbers_in_fluid_mechanics` · `Dimensionless_quantity` · `Drag_coefficient` · `Dukhin_number` · `Eckert_number` · `Eddy_(fluid_dynamics)` · `Ekman_number` · `Ellipsoid` · `Entrance_length_(fluid_dynamics)` · `Euler_number_(physics)` · `Eötvös_number` · `Fish` · `Floris_Takens` · `Flow_conditioning` · `Flow_separation` · `Flow_velocity` · `Fluid` · [[Fluid_dynamics]] · `Fluid_mechanics` · `Fluidized_bed` · `Freestream` · `Froude_number` · `Galilei_number` · `Golf_ball` · `Graetz_number` · `Grashof_number` · `Görtler_vortices` · `Hagen_number` · `Heat_exchanger` · `Hydraulics` · `Inertia` · `International_Congress_of_Mathematicians` · `Iribarren_number` · `Kapitza_number` · `Kelvin–Helmholtz_instability` · `Keulegan–Carpenter_number` · `Knudsen_number` · `Laminar_flow` · `Laplace_number` · `Lewis_number` · `Mach_number` · `Magnetic_Prandtl_number` · `Magnetic_Reynolds_number` · `Major_League_Baseball` · `Marangoni_number` · `Mixture` · `Morton_number` · `Navier–Stokes_equations` · `Non-Newtonian_fluid` · `Nusselt_number` · `Ohio_State_University` · `Ohnesorge_number` · `Osborne_Reynolds` · `Paris` · `Philosophical_Transactions_of_the_Royal_Society` · `Porosity` · `Prandtl_number` · `Péclet_number` · `Ratio` · `Rayleigh_number` · `Reynolds-averaged_Navier–Stokes_equations` · `Reynolds_transport_theorem` · `Richardson_number` · `Roshko_number` · `Rossby_number` · `Rouse_number` · `Schmidt_number` · `Scruton_number` · `Sea_level` · `Sherwood_number` · `Shields_parameter` · `Sir_George_Stokes,_1st_Baronet` · `Stanton_number` · `Stigler's_law_of_eponymy` · `Stokes_flow` · `Stokes_number` · `Streamlines,_streaklines,_and_pathlines` · `Strouhal_number` · `Stuart_number` · `Taylor_number` · `Taylor–Couette_flow` · `Temperature_dependence_of_viscosity` · `Terminal_velocity` · `Tropical_cyclone` · `Turbulence` · `Turbulent_Prandtl_number` · `Ursell_number` · [[Velocity]] · [[Viscosity]] · `Volumetric_flow_rate` · `Vortex` · `Wake_(physics)` · `Weber_number` · `Weissenberg_number` · `Wind_tunnel` · `Womersley_number`
## From the Real GENERATIVE library

*Reynolds number — placed from the Real G.E.N.E.R.A.T.I.V.E. course library (Robotics room). Source: Wikimedia Commons (via Wikipedia article media). [Details & license](https://commons.wikimedia.org/wiki/File:Laminar-turbulent_transition.jpg).*

*Animated: Reynolds number — placed from the Real G.E.N.E.R.A.T.I.V.E. course library (Robotics room). Source: Wikimedia Commons (via Wikipedia article media). [Details & license](https://commons.wikimedia.org/wiki/File:Vortex-street-animation.gif).*
> In fluid dynamics, the Reynolds number (Re) is a dimensionless quantity that helps predict fluid flow patterns in different situations by measuring the ratio between inertial and viscous forces.[2] At low Reynolds numbers, flows tend to be dominated by laminar (sheet-like) flow, while at high Reynolds numbers, flows tend to be turbulent. The turbulence resul ([Wikipedia](https://en.wikipedia.org/wiki/Reynolds_number))
<!-- REAL-GENERATIVE-MEDIA:END -->
<!-- LOCAL-MEDIA-PASS:START -->
## From the vault media library
!Reynolds number thumb.png
*Reynolds Number — from the vault's own media holdings, placed 2026-07-09. MTN / Wikitube.io original · CC BY-SA 4.0.*
<!-- LOCAL-MEDIA-PASS:END -->
<!-- SIGN-SYSTEMS:START -->
**Semiotic universals** (the notations and alphabet letters this article speaks — each opens its canonical card): flow · spiral · momentum · probability · attractor chaos. Index: the glyph gallery · SEMIOTICS PORTAL.
<!-- SIGN-SYSTEMS:END -->
> **Room:** [[Robotics]] · **Status:** ✅ shipped
## Overview
In [[Fluid_dynamics|fluid dynamics]], the Reynolds number (Re) is a dimensionless quantity that helps predict fluid flow patterns in different situations by measuring the ratio between inertial and viscous forces.2 At low Reynolds numbers, flows tend to be dominated by laminar (sheet-like) flow, while at high Reynolds numbers, flows tend to be turbulent. The turbulence results from differences in the fluid's speed and direction, which may sometimes intersect or even move counter to the overall direction of the flow (eddy currents). These eddy currents begin to churn the flow, using up [[Energy|energy]] in the process, which for liquids increases the chances of cavitation.
_(Overview is shorter than 200 words; the pipeline should expand it from textbook context before publishing.)_
## See also
- Room hub: [[Robotics]]
- p5.js Editor conventions: P5 JS EDITOR
- Wiki root: MAIN
---
*Scaffolded by `generative-microsim` from row 7 of the Robotics sheet on 2026-06-03T08:27:42Z.*
Letters: flow · spiral · momentum · probability · attractor_chaos · energy · exponential · mined_geometry
See also (bridge flow x mined_geometry): Direction (geometry)
See also (bridge flow x measurement): Line of action
<!-- REAL-GENERATIVE-MEDIA:START -->
<!-- CRAFT-LINK:START g12 -->
*Built to the [[WT!P5_js_Microsim_Master_Class|p5.js Master Class]].*
<!-- CRAFT-LINK:END -->
<!-- COMPENDIUMLINK:BEGIN g19 — generated from _registry/plans/THURY_COMPENDIUM_SECTIONS.md; do not hand-edit inside -->
*Linked from the [[WT!Thury_Hydrodynamics_Compendium|Thury Hydrodynamics Compendium]], sections 1, Fluid dynamics and 3, Turbulence.*
<!-- COMPENDIUMLINK:END -->
<!-- SPINEPATH:BEGIN g20 — shortest chain of Wikipedia links between local articles to a Compendium Main article; do not hand-edit inside -->
*Connected to the Apex Spine:* Reynolds number → [[Fluid_dynamics|Fluid dynamics]] — [[WT!Thury_Hydrodynamics_Compendium|Compendium]] section 1, *Fluid dynamics*.
<!-- SPINEPATH:END -->
<!-- THURYSIM:BEGIN g21 — Thury Compendium microsim (framework build, specs/variants/Reynolds_number.json); do not hand-edit inside -->
**Microsim — three.js (Wikitube framework):** *Reynolds number*
<div class="wt-sim" data-src="https://wikitube-3d-microsims.netlify.app/thury/Reynolds_number.html" data-title="Reynolds number"></div>
*Built from `MICROSIM_GUIDE/specs/variants/Reynolds_number.json`; part of the [[WT!Thury_Hydrodynamics_Compendium|Thury Hydrodynamics Compendium]] set.*
<!-- THURYSIM:END -->
## Wikipedia : Wikitube
**Strict pair:** [Wikipedia](https://en.wikipedia.org/wiki/Reynolds_number) : [Wikitube](https://en.wikitube.io/wiki/Reynolds_number)
## Previous hub tags
Tree parent: [[Helium]].
Legacy hubs: `GENERATIVE`.
---
*Sources: 1 legacy note. Minted wave 1, 2026-07-30 (v1.6 order).*