# Viscosity
<!-- MICROSIMGEN:BEGIN v1.7 — generated by g08_place_microsims.py; three.js first (§15); do not hand-edit inside -->
## Microsims — three.js
### Viscosity (three.js)
<div class="microsim-player">
<iframe src="https://wikitube-3d-microsims.netlify.app/Viscosity.html" width="100%" height="620" frameborder="0" loading="lazy" sandbox="allow-scripts allow-same-origin" title="Viscosity — three.js microsim"></iframe>
</div>
**Open it full-screen:** [Viscosity.html](https://wikitube-3d-microsims.netlify.app/Viscosity.html) · library `threejs` · route `microsim/threejs/`
### Related microsims
Live sims on neighbouring articles:
- [[Fractional_distillation]]
- [[Liquid_helium]]
- [[Reynolds_number]]
*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/LGnSl67W_" width="100%" height="620" frameborder="0" sandbox="allow-scripts allow-same-origin"></iframe>
</div>
<div class="microsim-fallback">
<img src="Microsims/thumbs/Viscosity.png" alt="Viscosity 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/LGnSl67W_">open sketch in the p5.js editor</a></em></p>
</div>
**Editor URL:** https://editor.p5js.org/sciencenibber/sketches/LGnSl67W_
**Description (100 words):**
The microsim splits into two coupled views. The upper Couette cell shows a fixed bottom plate, a moving top plate, and a cloud of pale-cyan particles drifting in the gap with the linear u(y) = U(1 - y/h) profile that Newtonian shear demands; five yellow arrows trace the velocity profile. The bottom half is a viscosity-vs-temperature plot for helium-4 from 1.5 K to 5.5 K on a log axis, with a magenta lambda line at 2.172 K marking the He-II to He-I transition. A draggable yellow dot or the arrow keys move temperature, which updates the dynamic viscosity, shear stress, phase label, and proxy Reynolds gauges in real time.
```js
// =====================================================================
// Viscosity.js -- Wikitube microsim
// Article: Viscosity en.wikitube.io/wiki/Viscosity
// Room: Helium Pattern: D (parametric / efficiency)
// + E (particle / kinetic)
// ---------------------------------------------------------------------
// Idea: the constitutive relation that *defines* viscosity is
//
// tau = mu * (du/dy) (Newton's law of viscosity)
//
// where tau is the shear stress in the fluid, mu is the dynamic
// viscosity (Pa*s), and du/dy is the velocity gradient normal to the
// flow. A planar Couette setup -- two parallel plates with the top one
// sliding sideways at velocity U over a gap h -- realises this
// relation in its simplest form: a linear velocity profile
// u(y) = U * (y / h), constant shear rate, constant shear stress.
//
// The Helium twist: liquid helium-4 below the lambda point (2.172 K)
// becomes superfluid Helium-II, and its measured viscosity in narrow
// channels drops to effectively zero. Above 2.172 K it is ordinary
// liquid Helium-I, with mu ~ 3 micro-Pa*s. The temperature-dependence
// curve plotted here is a piecewise model: roughly constant in the
// Helium-I region, a sharp lambda cusp, a near-zero plateau in the
// Helium-II region, and the kinetic-theory gas branch above the
// critical point for vapor He-4.
//
// Visual layout (720 x 520 canvas):
// * top: HUD title + en.wikitube.io/wiki/Viscosity subtitle
// * upper-left: Couette viscometer -- two plates, particles in the
// gap, velocity arrows showing the linear profile,
// live shear-rate and shear-stress readouts
// * upper-right: live gauges (mu, tau, Re, phase label)
// * lower band: viscosity(T) curve for He-4 from 1.5 K to 5.5 K,
// log-scale viscosity axis, lambda line marked,
// draggable T marker drives the upper-half mu
// * sliders: U (top-plate velocity), h (gap), L (plate length)
// laid out across the bottom of the canvas
// * bottom-right: canonical equation
//
// Conventions (Wikitube Betterfire Standard v0):
// * single ARTICLE constant, single quotes
// * p5.disableFriendlyErrors = true
// * ALL non-ASCII (mu, tau, lambda, dot) lives in COMMENTS only;
// text() strings are pure ASCII
// * Energy-room palette (P5_JS_EDITOR section 4, line 165)
// * sliders all .position().size() -- no floating defaults
// =====================================================================
const ARTICLE = 'Viscosity';
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-viscosity regime
const COLD = [60, 130, 220]; // cool: liquid He-I
const COLDER = [40, 80, 180]; // deeper cool: He-II superfluid
const STRUCT = [120, 130, 150]; // structural grey: plates, axes
const TRAJ = [240, 220, 80]; // trajectory accent: marker, arrows
const SCRATCH = [120, 120, 120, 90]; // scratch / grid lines
const ACCENT = [200, 100, 220]; // lambda line (magenta)
const PARTICLE = [200, 230, 255]; // fluid particles (pale cyan)
// ----- He-4 viscosity landmarks --------------------------------------
// mu in micro-Pa*s. The "kink" at T_lambda is well below 1 nPa*s in
// narrow channels (effectively zero) and the He-I plateau sits around
// 3.5 micro-Pa*s; values here are pedagogical, not high-precision.
const T_LAMBDA = 2.172; // K
const MU_HE_I = 3.5; // micro-Pa*s, liquid He-I plateau
const MU_HE_II = 0.03; // micro-Pa*s, He-II floor (drawn, not zero,
// so it remains visible on a log axis)
const MU_GAS_NBP = 1.25; // micro-Pa*s, He gas at 4.2 K, 1 atm
const MU_GAS_300 = 19.9; // micro-Pa*s, He gas at 300 K (reference,
// shown only as a HUD note)
// ----- Couette viscometer geometry -----------------------------------
// The plate region sits in the upper-left. Coordinates are in canvas
// pixels; the physics works in dimensionless units scaled by U and h.
const VISC_X = 60;
const VISC_Y = 70;
const VISC_W = 360;
const VISC_H = 170;
// ----- Viscosity-vs-T plot rectangle ---------------------------------
const PLOT_X = 60;
const PLOT_Y = 290;
const PLOT_W = width_default() - 120;
const PLOT_H = 130;
// p5 sometimes parses width / height before setup -- this helper makes
// the constant safe to declare at module top.
function width_default() { return 720; }
// ----- Plot axis ranges ----------------------------------------------
const T_MIN = 1.5; // K
const T_MAX = 5.5; // K
const MU_MIN_LOG = -2; // log10(mu in micro-Pa*s) -- 0.01
const MU_MAX_LOG = 1.5; // log10(mu in micro-Pa*s) -- ~32
// ----- State --------------------------------------------------------
let uSlider, hSlider, lSlider; // physics-parameter sliders
let nParts = 240; // number of fluid particles in the gap
let parts = []; // {x, y, t0}; vy is the linear profile
let T_state = 4.222; // K -- start at the normal boiling point
let dragging = false; // dragging the T marker on the bottom plot
// =====================================================================
// setup()
// =====================================================================
function setup() {
createCanvas(720, 520);
pixelDensity(2);
textFont('system-ui');
// Sliders: U (top-plate velocity, dimensionless 0..3),
// h (gap, dimensionless 0.3..1.0),
// L (plate length, dimensionless 0.4..1.0).
uSlider = createSlider(0.0, 3.0, 1.2, 0.05).position(60, 470).size(160);
hSlider = createSlider(0.3, 1.0, 0.85, 0.01).position(260, 470).size(140);
lSlider = createSlider(0.4, 1.0, 0.95, 0.01).position(440, 470).size(140);
// Seed the particle field uniformly across the gap.
for (let i = 0; i < nParts; i++) {
parts.push({
x: random(VISC_X + 8, VISC_X + VISC_W - 8),
y: random(VISC_Y + 8, VISC_Y + VISC_H - 8),
r: random(1.4, 2.4)
});
}
}
// =====================================================================
// draw()
// =====================================================================
function draw() {
background(BG);
// Read controls into named locals so the physics reads as physics.
const U = uSlider.value(); // dimensionless top-plate speed
const h = hSlider.value() * VISC_H; // gap (px)
const L = lSlider.value() * VISC_W; // plate length (px)
const dt = min(deltaTime / 1000, 0.05);
// mu (micro-Pa*s) is a function of the current T_state.
const mu = muOfT(T_state);
// Shear-rate scaling: in our normalised demo, shear rate is U / h.
const shearRate = (U / max(h, 1e-3)); // 1/s (dimensionless)
const tau = mu * shearRate; // micro-Pa (dimensionless)
// ----- Upper-left: Couette viscometer --------------------------
drawCouette(U, h, L, mu, shearRate, tau, dt);
// ----- Upper-right: live gauges --------------------------------
drawGauges(mu, shearRate, tau);
// ----- Lower band: viscosity-vs-T plot -------------------------
drawViscTPlot();
// ----- HUD overlays --------------------------------------------
drawHUD();
// ----- Slider labels -------------------------------------------
drawSliderLabels();
}
// =====================================================================
// muOfT(T) -- piecewise dynamic viscosity of He-4 (micro-Pa*s)
//
// Pieces, drawn to be pedagogical rather than NIST-precise:
// * T < T_lambda : exponential drop into He-II floor
// * T_lambda <= T <= 4.5 : flat-ish He-I liquid plateau
// * 4.5 < T <= T_MAX : interpolated He-gas branch (rising mu)
//
// Above the critical T (5.195 K) helium is a supercritical fluid; the
// curve here trends into kinetic-theory mu ~ T^0.5 behaviour for gas.
// =====================================================================
function muOfT(T) {
if (T < T_LAMBDA) {
// He-II: viscosity drops sharply below the lambda point.
// Smoothstep from He-I plateau down to the He-II floor over
// 0.05 K below T_lambda to give the cusp some visual width.
const span = 0.05;
const frac = constrain((T_LAMBDA - T) / span, 0, 1);
return lerp(MU_HE_I, MU_HE_II, frac);
}
if (T <= 4.50) {
// He-I: nearly constant plateau, very gentle decline with T.
const frac = (T - T_LAMBDA) / (4.50 - T_LAMBDA);
return lerp(MU_HE_I, MU_HE_I * 0.85, frac);
}
// Gas / supercritical branch: rise toward MU_GAS_300 with sqrt(T).
const frac = (T - 4.50) / (T_MAX - 4.50);
const muHi = MU_GAS_NBP * 2.6; // ~ 3.3 micro-Pa*s at T_MAX
return lerp(MU_HE_I * 0.85, muHi, frac);
}
// =====================================================================
// drawCouette -- the upper-left Couette viscometer
// =====================================================================
function drawCouette(U, h, L, mu, shearRate, tau, dt) {
push();
// Plate region background.
noStroke();
fill(28);
rect(VISC_X, VISC_Y, VISC_W, VISC_H);
// Compute the inner gap: top plate sits at (cx - L/2..cx + L/2, gapY),
// bottom plate at (.., gapY + h).
const cx = VISC_X + VISC_W / 2;
const gapY0 = VISC_Y + (VISC_H - h) / 2;
const gapY1 = gapY0 + h;
const x0 = cx - L / 2;
const x1 = cx + L / 2;
// ----- The two plates -----
stroke(...STRUCT);
strokeWeight(4);
line(x0, gapY0, x1, gapY0); // top plate (moving)
line(x0, gapY1, x1, gapY1); // bottom plate (fixed)
// Plate motion arrow (top plate slides to the right at speed U).
if (U > 0.001) {
stroke(...TRAJ);
strokeWeight(2);
const ax = x1 + 6;
const ay = gapY0 - 8;
line(ax - 24 * U / 3.0, ay, ax, ay);
line(ax - 6, ay - 4, ax, ay);
line(ax - 6, ay + 4, ax, ay);
}
// ----- Particle drift in the gap -----
// v(y) = U * (1 - (y - gapY0)/(gapY1 - gapY0)) (top moves right)
// The scaling factor PIX_PER_UNIT converts dimensionless U into a
// pixel velocity per second for the on-screen drift.
const PIX_PER_UNIT = 110;
noStroke();
fill(...PARTICLE);
for (let p of parts) {
if (p.y > gapY0 && p.y < gapY1 && p.x > x0 && p.x < x1) {
const frac = 1 - (p.y - gapY0) / (gapY1 - gapY0); // 0 at bottom, 1 at top
const vx = U * frac * PIX_PER_UNIT;
p.x += vx * dt;
if (p.x > x1 - 2) p.x = x0 + 2; // wrap left -> right (periodic)
}
// Particles outside the gap simply hang in the corners.
ellipse(p.x, p.y, p.r * 2, p.r * 2);
}
// ----- Linear-profile velocity arrows -----
// Five sample arrows from bottom (zero) to top (U). The arrow
// length encodes velocity; this is the visual signature of a
// Newtonian fluid in Couette flow.
stroke(...TRAJ);
strokeWeight(1.5);
fill(...TRAJ);
const ax0 = x0 + 18;
const N = 5;
for (let k = 0; k <= N; k++) {
const yy = lerp(gapY1, gapY0, k / N);
const vv = (k / N) * U * 60; // px arrow length
line(ax0, yy, ax0 + vv, yy);
if (vv > 4) {
triangle(ax0 + vv, yy,
ax0 + vv - 5, yy - 3,
ax0 + vv - 5, yy + 3);
}
}
// ----- Frame label -----
noStroke();
fill(...DIM);
textSize(10);
textAlign(LEFT, TOP);
text('Couette flow (planar shear)', VISC_X + 6, VISC_Y + 4);
textAlign(RIGHT, TOP);
text('top plate moves; bottom fixed', VISC_X + VISC_W - 6, VISC_Y + 4);
// dim shear-rate readout inside the cell
textAlign(LEFT, BOTTOM);
text('shear rate du/dy = ' + nf(shearRate, 0, 2),
VISC_X + 6, VISC_Y + VISC_H - 4);
textAlign(RIGHT, BOTTOM);
text('shear stress tau = mu * du/dy',
VISC_X + VISC_W - 6, VISC_Y + VISC_H - 4);
pop();
}
// =====================================================================
// drawGauges -- upper-right live readouts
// =====================================================================
function drawGauges(mu, shearRate, tau) {
const x0 = 450;
const y0 = 70;
const w = 220;
const h = 170;
push();
noStroke();
fill(28);
rect(x0, y0, w, h);
// Title bar.
fill(...DIM);
textSize(11);
textAlign(LEFT, TOP);
text('Live gauges (He-4 at T = ' + nf(T_state, 0, 3) + ' K)', x0 + 8, y0 + 6);
// Phase classification: He-II, He-I, or gas.
const phase = T_state < T_LAMBDA ? 'He-II (superfluid)' :
T_state <= 4.50 ? 'He-I (normal liquid)' :
'He gas / supercritical';
textAlign(LEFT, TOP);
fill(...FG_arr(phase));
textSize(13);
text(phase, x0 + 8, y0 + 28);
// mu and tau bars (log-scaled bar length so a 1000x range fits).
fill(...DIM);
textSize(11);
text('mu (dynamic viscosity)', x0 + 8, y0 + 60);
drawLogBar(x0 + 8, y0 + 76, 200, 10, mu, MU_MIN_LOG, MU_MAX_LOG, COLD);
fill(...FG);
textSize(11);
text(nf(mu, 0, 3) + ' micro-Pa*s', x0 + 8, y0 + 92);
fill(...DIM);
textSize(11);
text('tau (shear stress)', x0 + 8, y0 + 110);
drawLogBar(x0 + 8, y0 + 126, 200, 10, max(tau, 1e-4), MU_MIN_LOG, MU_MAX_LOG, HOT);
fill(...FG);
textSize(11);
text(nf(tau, 0, 3) + ' micro-Pa', x0 + 8, y0 + 142);
// Reynolds-number style indicator: with mu in micro-Pa*s and
// dimensionless U/h, we just compute U/mu as a scaled inertia/viscous
// ratio. This stays pedagogical; it is not a calibrated Re.
textAlign(RIGHT, BOTTOM);
fill(...STRUCT);
textSize(10);
text('Re proxy = U/mu', x0 + w - 8, y0 + h - 4);
pop();
}
// Pick a phase-appropriate FG colour as an array splat-target.
function FG_arr(label) {
if (label.indexOf('He-II') === 0) return COLDER;
if (label.indexOf('He-I') === 0) return COLD;
return HOT;
}
// Log-scaled progress bar. value is on a linear axis but its log is
// what determines the bar fill fraction.
function drawLogBar(x, y, w, h, value, logMin, logMax, col) {
const logV = Math.log10(max(value, Math.pow(10, logMin)));
const frac = constrain((logV - logMin) / (logMax - logMin), 0, 1);
noStroke();
fill(col[0], col[1], col[2], 60);
rect(x, y, w, h);
fill(...col);
rect(x, y, w * frac, h);
}
// =====================================================================
// drawViscTPlot -- the lower viscosity-vs-T curve
// =====================================================================
function drawViscTPlot() {
push();
// Plot rect background.
noStroke();
fill(28);
rect(PLOT_X, PLOT_Y, PLOT_W, PLOT_H);
// Axes box.
stroke(SCRATCH);
strokeWeight(1);
noFill();
rect(PLOT_X, PLOT_Y, PLOT_W, PLOT_H);
// Axis ticks: T every 0.5 K.
noStroke();
fill(...DIM);
textSize(10);
textAlign(CENTER, TOP);
for (let T = 1.5; T <= 5.5; T += 0.5) {
const x = tToPx(T);
stroke(SCRATCH);
line(x, PLOT_Y + PLOT_H, x, PLOT_Y + PLOT_H + 3);
noStroke();
text(nf(T, 0, 1), x, PLOT_Y + PLOT_H + 4);
}
// log-mu ticks: every decade.
textAlign(RIGHT, CENTER);
for (let logMu = Math.ceil(MU_MIN_LOG); logMu <= Math.floor(MU_MAX_LOG); logMu++) {
const mu = Math.pow(10, logMu);
const y = muToPy(mu);
stroke(SCRATCH);
line(PLOT_X - 3, y, PLOT_X, y);
noStroke();
text(formatMu(mu), PLOT_X - 5, y);
}
// Axis titles.
fill(...DIM);
textSize(10);
textAlign(CENTER, TOP);
text('T [K]', PLOT_X + PLOT_W / 2, PLOT_Y + PLOT_H + 16);
push();
translate(PLOT_X - 36, PLOT_Y + PLOT_H / 2);
rotate(-PI / 2);
text('mu [micro-Pa*s, log]', 0, 0);
pop();
// Lambda vertical line.
stroke(...ACCENT);
strokeWeight(1);
const lx = tToPx(T_LAMBDA);
line(lx, PLOT_Y, lx, PLOT_Y + PLOT_H);
noStroke();
fill(...ACCENT);
textSize(9);
textAlign(LEFT, TOP);
text('lambda line', lx + 3, PLOT_Y + 3);
// Sample the muOfT curve along T.
stroke(...TRAJ);
strokeWeight(2);
noFill();
beginShape();
for (let T = T_MIN; T <= T_MAX; T += 0.02) {
vertex(tToPx(T), muToPy(muOfT(T)));
}
endShape();
// Region labels.
noStroke();
fill(...COLDER);
textSize(10);
textAlign(CENTER, TOP);
text('He-II', tToPx(1.8), PLOT_Y + 8);
fill(...COLD);
text('He-I', tToPx(3.3), PLOT_Y + 8);
fill(...HOT);
text('gas / supercritical', tToPx(5.0), PLOT_Y + 8);
// Draggable T marker.
const mx = tToPx(T_state);
const my = muToPy(muOfT(T_state));
stroke(...TRAJ);
strokeWeight(1);
line(mx, PLOT_Y, mx, PLOT_Y + PLOT_H);
noFill();
circle(mx, my, 16);
fill(...TRAJ);
noStroke();
circle(mx, my, 6);
pop();
}
function formatMu(mu) {
if (mu >= 10) return mu.toFixed(0);
if (mu >= 1) return mu.toFixed(1);
if (mu >= 0.01) return mu.toFixed(2);
return mu.toExponential(0);
}
function tToPx(T) {
return map(T, T_MIN, T_MAX, PLOT_X, PLOT_X + PLOT_W);
}
function muToPy(mu) {
const logMu = Math.log10(Math.max(mu, Math.pow(10, MU_MIN_LOG)));
return map(logMu, MU_MIN_LOG, MU_MAX_LOG, PLOT_Y + PLOT_H, PLOT_Y);
}
function pxToT(px) {
return constrain(map(px, PLOT_X, PLOT_X + PLOT_W, T_MIN, T_MAX),
T_MIN, T_MAX);
}
// =====================================================================
// Input handling -- drag the T marker on the bottom plot
// =====================================================================
function mousePressed() {
if (mouseX >= PLOT_X && mouseX <= PLOT_X + PLOT_W &&
mouseY >= PLOT_Y && mouseY <= PLOT_Y + PLOT_H) {
T_state = pxToT(mouseX);
dragging = true;
}
}
function mouseReleased() { dragging = false; }
function mouseDragged() {
if (dragging) T_state = pxToT(mouseX);
}
function keyPressed() {
const dT = 0.02;
if (keyCode === LEFT_ARROW) T_state = max(T_MIN, T_state - dT);
if (keyCode === RIGHT_ARROW) T_state = min(T_MAX, T_state + dT);
}
// =====================================================================
// drawHUD -- Betterfire title bar + bottom canonical equation
// =====================================================================
function drawHUD() {
// Top-left: title + Wikitube subtitle.
noStroke();
fill(FG);
textAlign(LEFT, TOP);
textSize(22);
text(TITLE, 14, 12);
fill(...DIM);
textSize(12);
text('Wikitube microsim . en.wikitube.io/wiki/Viscosity', 14, 40);
// Top-right: control hints.
textAlign(RIGHT, TOP);
textSize(10);
fill(...DIM);
text('drag the dot on the bottom plot to set T', width - 14, 14);
text('arrow keys nudge T', width - 14, 26);
text('U / h / L sliders shape the Couette cell', width - 14, 38);
// Bottom-right: canonical equation (Betterfire Standard rule 4).
textAlign(RIGHT, BOTTOM);
fill(FG);
textSize(13);
text('tau = mu * (du/dy) [Newton, 1687]', width - 14, height - 4);
}
// =====================================================================
// drawSliderLabels -- thin labels under each slider
// =====================================================================
function drawSliderLabels() {
push();
noStroke();
fill(...DIM);
textSize(10);
textAlign(LEFT, TOP);
text('U (top-plate speed) = ' + nf(uSlider.value(), 0, 2), 60, 448);
text('h (gap fraction) = ' + nf(hSlider.value(), 0, 2), 260, 448);
text('L (plate length) = ' + nf(lSlider.value(), 0, 2), 440, 448);
pop();
}
// =====================================================================
// End of Viscosity.js -- Wikitube microsim, Helium room, Pattern D+E.
// =====================================================================
```
## MicroSim spec
- **Recommended sim type:** flow field
- **Microsimmability score:** 82/100
- **Layout:** drawing region (canvas) on top; control region (sliders/buttons) below.
### Parameters (tunable controls)
- `Dynamic viscosity mu - 0.001 to 2 Pa s`
- `Shear rate / flow velocity`
- `Channel size / gap`
### What animates
A sheared [[Velocity|velocity]] profile and tracer particles between two plates (or past an obstacle) reshape as viscosity and shear rate change, with the [[Reynolds_number|Reynolds number]] flipping the regime visibly.
### Learning objective
Relate viscosity and shear rate to the velocity profile and the onset of turbulence.
## Links (Wikipedia order)
<!-- injected from _registry/childlinks/Viscosity.json (2026-07-30T02:09:12Z) -->
`Ab_initio` · `Acoustic_rheometer` · `Acoustics` · `Activation_energy` · `Adhesion` · `Adolf_Eugen_Fick` · `Ammonia` · `Amorphous_solid` · `Analytical_mechanics` · `Applied_physics` · `Archimedes'_principle` · `Arrhenius_equation` · `Astrophysics` · `Atmosphere` · `Atmospheric_physics` · `Atomic,_molecular,_and_optical_physics` · `Atomic_physics` · `Augustin-Louis_Cauchy` · `Avogadro_constant` · `Basic_research` · `Bending` · `Benzene` · `Bernoulli's_principle` · `Biophysics` · `Blaise_Pascal` · `Blood` · `Boltzmann_constant` · `Boltzmann_equation` · `Boron_trioxide` · `Boyle's_law` · `Branches_of_physics` · `Buoyancy` · `Butane` · `Capillary_action` · `Carbon_dioxide` · `Carlo_Cercignani` · `Castor_oil` · `Celestial_mechanics` · `Centimetre` · `Chapman–Enskog_theory` · `Charles's_law` · `Chemical_engineer` · `Chemical_physics` · `Chromatography` · `Classical_electromagnetism` · `Classical_mechanics` · `Classical_physics` · `Claude-Louis_Navier` · `Clausius–Duhem_inequality` · `Clifford_Truesdell` · `Closed-form_expression` · `Coating` · `Cohesion_(chemistry)` · `Common_logarithm` · `Compatibility_(mechanics)` · `Computational_physics` · `Condensed_matter_physics` · `Conservation_of_energy` · `Conservation_of_mass` · `Constitutive_equation` · `Contact_mechanics` · `Continuum_mechanics` · `Correlation_function_(statistical_mechanics)` · `Couette_flow` · `Critical_point_(thermodynamics)` · [[Cryogenics]] · `Crystallography` · `Daniel_Bernoulli` · `Dashpot` · `David_Enskog` · `Deborah_number` · `Deformation_(physics)` · [[Density]] · `Derivative` · `Dimensional_analysis` · `Drilling_fluid` · `Eddy_(fluid_dynamics)` · `Elasticity_(physics)` · `Electrolyte` · `Electron_mass` · `Electrorheological_fluid` · `Emulsion` · [[Energy]] · [[Engineering]] · [[Engineering_physics]] · `Equations_of_motion` · `Ethanol` · `Evgeny_Lifshitz` · `Experimental_physics` · `Extensional_viscosity` · `Ferrofluid` · `Fick's_laws_of_diffusion` · `Finite_strain_theory` · `Fluid` · [[Fluid_dynamics]] · `Fluid_mechanics` · `Fluid_parcel` · `Fluorescence_correlation_spectroscopy` · `Flux` · [[Fracture_mechanics]] · `Frederick_Thomas_Trouton` · `Frictional_contact_mechanics` · `Gas` · `Gas_constant` · `Gasoline` · `Gay-Lussac's_law` · `General_relativity` · `Geology` · `Geometrical_optics` · `Geophysics` · `Glass` · `Glass_transition` · `Graham's_law` · `Gram` · `Granite` · `Green–Kubo_relations` · `Hagen–Poiseuille_equation` · `Heat` · `History_of_physics` · `Honey` · `Hooke's_law` · [[Hydrogen]] · `Hydrostatics` · `Ideal_gas` · `Imperial_and_US_customary_measurement_systems` · `Infinitesimal_strain_theory` · `Interatomic_potential` · `International_System_of_Units` · `Inviscid_flow` · [[Isaac_Newton]] · `Isobaric_process` · `Jacques_Charles` · `James_Clerk_Maxwell` · `Jean_Léonard_Marie_Poiseuille` · `Joback_method` · `John_Gamble_Kirkwood` · `Joseph_Louis_Gay-Lussac` · `Kelvin` · `Ketchup` · `Kilogram` · [[Kinetic_theory_of_gases]] · [[Krypton]] · `Lard` · `Large_eddy_simulation` · `Latin` · `Lennard-Jones_potential` · `Leonhard_Euler` · `Lev_Landau` · `Linear_combination` · `Linear_elasticity` · `Linseed_oil` · `Liquid` · `List_of_thermodynamic_properties` · `Magnetic_field` · `Magnetohydrodynamics` · `Magnetorheological_fluid` · `Mantle_(geology)` · `Mass_diffusivity` · `Material_failure_theory` · [[Materials_science]] · `Mathematical_physics` · `Mean_free_path` · `Measurement_uncertainty` · [[Mechanical_engineering]] · `Medical_physics` · [[Mercury_(element)]] · `Mie_potential` · `Mixing_(process_engineering)` · `Modern_physics` · `Mole_(unit)` · `Molecular_diffusion` · [[Molecular_dynamics]] · `Molecular_physics` · `Morton_number` · `Motor_oil` · `Mu_(letter)` · `Multiplicative_inverse` · `NASA` · `Navier–Stokes_equations` · [[Neon]] · [[Newton's_laws_of_motion]] · `Newton_(unit)` · `Newtonian_fluid` · `Nobel_Prize_in_Physics` · `Non-Newtonian_fluid` · `Non-equilibrium_thermodynamics` · `Nu_(Greek)` · `Nuclear_physics` · `Ohm's_law` · `Oleic_acid` · `Olive_oil` · `Optics` · `Order_of_magnitude` · `Outline_of_astrophysics` · `Parallel_(geometry)` · `Particle_physics` · `Pascal's_law` · `Pascal_(unit)` · `Pentane` · `Perturbation_theory` · `Philosophy_of_physics` · `Physical_oceanography` · `Physical_optics` · `Physics_education` · `Physics_education_research` · `Pitch_(resin)` · `Pitch_drop_experiment` · `Planck_constant` · [[Plasma_(physics)]] · `Plasticity_(physics)` · `Poise_(unit)` · `Potassium_iodide` · `Pound_(force)` · `Pound_(mass)` · `Pressure` · `Properties_of_water` · `Proprietary_software` · `Quantum_information_science` · [[Quantum_mechanics]] · `REFPROP` · `Radial_distribution_function` · `Relativistic_mechanics` · `Rheology` · `Rheometer` · `Rheometry` · `Robert_Boyle` · `Robert_Hooke` · `Rotational_energy` · `SI_derived_unit` · `Second` · [[Second_law_of_thermodynamics]] · `Shear_modulus` · `Shear_stress` · `Shock_wave` · `Sir_George_Stokes,_1st_Baronet` · `Slug_(unit)` · `Smart_fluid` · `Sodium_chloride` · `Solid-state_physics` · [[Solid_mechanics]] · `Sound` · `Special_relativity` · `Specific_energy` · `Square_foot` · `Statistical_mechanics` · [[Steel]] · `Stokes_flow` · `Strain_(mechanics)` · `Strain_rate` · `Stress_(mechanics)` · `Supercritical_fluid` · [[Superfluid_helium-4]] · `Superfluidity` · `Surface_tension` · `Sydney_Chapman_(mathematician)` · `Syrup` · `Temperature_dependence_of_viscosity` · `Theoretical_physics` · `Thermal_expansion` · [[Thermodynamic_equilibrium]] · [[Thermodynamics]] · `Thomas_Cowling` · `Thomas_Graham_(chemist)` · `Time` · `Time_derivative` · `Timeline_of_fundamental_physics_discoveries` · `Transport_phenomena` · `Turbulence` · `Vapor–liquid_equilibrium` · `Vibration` · `Viscoelasticity` · `Viscometer` · `Viscoplasticity` · `Viscosity_index` · `Viscous_stress_tensor` · `Volume_viscosity` · `Vortex` · `Walter_Noll` · `Water` · `Wikisource` · [[Xenon]]
## From the Real GENERATIVE library (beauty pass)

*Viscosity — animation hotlinked from Wikimedia Commons (via the Real G.E.N.E.R.A.T.I.V.E. course library, Audio room). [Details & license](https://commons.wikimedia.org/wiki/File:Viscosities.gif).*

*Viscosity — image hotlinked from Wikimedia Commons (via the Real G.E.N.E.R.A.T.I.V.E. course library, Audio room). [Details & license](https://commons.wikimedia.org/wiki/File:Laminar_shear.svg).*
> The viscosity of a fluid is a measure of its resistance to deformation at a given rate.[1] For liquids, it corresponds to the informal concept of "thickness": for example, syrup has a higher viscosity than water.[2] Viscosity is defined scientifically as a force multiplied by a time divided by an area. Thus its SI units are newton-seconds per square meter, or pascal-seconds.[1] ([Wikipedia](https://en.wikipedia.org/wiki/Viscosity))
<!-- BEAUTY-PASS-MEDIA:END -->
<!-- SIGN-SYSTEMS:START -->
**Semiotic universals** (the notations and alphabet letters this article speaks — each opens its canonical card): flow · temperature heat · exponential · measurement · probability. Index: the glyph gallery · SEMIOTICS PORTAL.
<!-- SIGN-SYSTEMS:END -->
## Media (PD/CC)
<!-- MEDIA-DEPLOY:Viscosity/Viscosities.gif -->
!Gif Library/Viscosity/Viscosities.gif
*Viscosities.gif · Synapticrelay · CC BY-SA 4.0 · [source](https://commons.wikimedia.org/wiki/File:Viscosities.gif)*
<!-- /MEDIA-DEPLOY -->
> **Room:** [[Helium]] · **Status:** ✅ shipped
## Overview
Viscosity is the macroscopic measure of a fluid's resistance to shear deformation — the internal friction that arises when adjacent fluid layers move at different velocities. [[Isaac_Newton|Isaac Newton]] formalized the idea in *Principia* (1687) with the constitutive relation τ = μ (du/dy), where τ is the shear stress, μ is the dynamic (absolute) viscosity, and du/dy is the [[Velocity|velocity]] gradient normal to the flow. Fluids that obey this linear law are called Newtonian; water, air, and most gases qualify. The SI unit of dynamic viscosity is the pascal-second (Pa·s); kinematic viscosity ν = μ/ρ is reported in m²/s. For gases, Sutherland's formula captures the temperature dependence μ(T) = μ₀ (T/T₀)^(3/2) (T₀ + S)/(T + S), while liquids typically follow an Arrhenius-style exponential decrease with temperature. [[Reynolds_number|Reynolds number]] Re = ρUL/μ uses viscosity to predict whether flow remains laminar or transitions to turbulence, governing pipeline design, lubrication theory, aerodynamic drag, and microfluidic chip behavior. Viscosity drives the Hagen-Poiseuille pressure drop in cryogenic transfer lines, sets the [[Diffusion|diffusion]] coefficient through the Stokes-Einstein relation, and bounds heat-exchanger effectiveness in liquefaction plants. Helium-4 below the lambda point (2.17 K) becomes superfluid Helium-II: its viscosity drops to effectively zero in narrow channels yet remains finite for an oscillating disk, a paradox resolved by Tisza and Landau's two-fluid model. This vanishing viscosity enables persistent currents, fountain effect demonstrations, and the ultralow friction bearings that underpin cold [[Neutron|neutron]] and dilution-refrigerator [[Engineering|engineering]].
## See also
- Room hub: [[Helium]]
- p5.js Editor conventions: P5 JS EDITOR
- Wiki root: MAIN
---
*Scaffolded by `generative-microsim` from row 181 of the Helium sheet on 2026-05-15T01:24:03Z.*
<!-- BEAUTY-PASS-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 -->
**Part of the [[WT!Thury_Hydrodynamics_Compendium|Thury Hydrodynamics Compendium]]** — main article for section 24, *Thick fluids and pipe flow*. Related sections: [[Fluid_dynamics]] · [[Turbulence]] · [[Superfluidity]].
<!-- COMPENDIUMLINK:END -->
<!-- THURYSIM:BEGIN g21 — Thury Compendium microsim (framework build, specs/sims/Viscosity.json); do not hand-edit inside -->
**Microsim — three.js (Wikitube framework):** *Viscosity*
<div class="wt-sim" data-src="https://wikitube-3d-microsims.netlify.app/thury/Viscosity.html" data-title="Viscosity"></div>
*Built from `MICROSIM_GUIDE/specs/sims/Viscosity.json`; part of the [[WT!Thury_Hydrodynamics_Compendium|Thury Hydrodynamics Compendium]] set.*
<!-- THURYSIM:END -->
## Wikipedia : Wikitube
**Strict pair:** [Wikipedia](https://en.wikipedia.org/wiki/Viscosity) : [Wikitube](https://en.wikitube.io/wiki/Viscosity)
## Previous hub tags
Tree parents: [[Helium]] · [[Hydrogen]] · [[Oxygen]].
Legacy hubs: none.
---
*Sources: 2 legacy notes. Minted wave 1, 2026-07-30 (v1.6 order).*