...
running...
How to use
Wind blows left to right across a rotor with cups on arms. The cup with its open side facing the wind is pushed harder than the one moving back into it, so the rotor speeds up until the two drags balance. The top plot shows angular speed over time with the predicted terminal value (green dashed); the bottom plot is the torque against tip-speed ratio u/v with the rotor operating point.
Try: set bearing friction to zero and the rotor settles at u/v of about 0.3, independent of size, which is why cup anemometers measure wind speed; raise friction to see the speed drop; increase the moment of inertia to slow the spin-up; add gustiness and watch the rotor smooth out the gusts.
The science
A cup facing the wind has drag coefficient Cc ≈ 1.4 (concave) and one moving the other way Cv ≈ 0.4 (convex). With the cup speed u = ωr the relative air speeds are v − u and v + u, so the net torque of N cups is τ = ½ ρ A r (N/2) [ Cc (v − u)|v − u| − Cv (v + u)|v + u| ] − bω and the rotor obeys I dω/dt = τ. With no friction the torque vanishes at u/v = (√Cc − √Cv) / (√Cc + √Cv) ≈ 0.31 so ω is exactly proportional to v.
Simplifications: the drag coefficients are constants taken as the average over a rotation (the real cup coefficient changes with angle), no wake interference between cups, no lift, uniform wind, and the gusts are a smooth sum of two sines.
What is checked and why you can trust it
Every time the page loads, and whenever you press Re-run check, the simulation evaluates its own mathematics against an independent reference, such as a closed-form formula, a finite-difference derivative or an exhaustive count. Each line above reports PASS or FAIL together with the measured numbers, so you can see by how much it agrees. Results are also published on window.__msChecks for automated testing. The check never uses the same code path as the animation it validates, otherwise it would only confirm itself.
How to read a failure: a FAIL line means the measured discrepancy exceeded the stated tolerance for the current slider values. Try Reset, then move the sliders back toward their defaults; if a check still fails at the defaults it is a bug worth reporting. Tolerances are chosen from the numerical method itself, never tuned to make a test pass: round-off level (1e-9) for exact algebra, about 1e-3 for finite differences and Monte Carlo estimates with a few hundred thousand samples, and a documented margin for stochastic learning runs.
Reproducibility: the particle and pen simulations use the browser random generator for initial positions, so exact pixels differ between visits, but the checks depend only on mathematics and not on those positions. Fixed wave tables (curl noise) and fixed grammars (L-system) are deterministic.
This is an educational model. It shows the mechanism clearly, but it is deliberately simplified; the science panel lists what was left out.