One million unknowns, one minute
The 2008 MILAMIN claim, live: one million degrees of freedom set up, solved and post-processed in about a minute, now in your browser. The problem is the original benchmark, a viscous circular inclusion (viscosity ratio 1000) in simple shear, and everything below happens locally when you press Run.
Pressure p
Maximum shear stress τ
What runs where
MILAMIN was never one trick. The 2008 paper showed that a general unstructured finite element code reaches a million unknowns per minute when every stage gets equal care: meshing, assembly, factorization and postprocessing all have to scale, because the moment one of them is neglected it dominates the total time. That strategy, not any single component, is what this page carries into the browser: the same pipeline, stage by stage, now sandboxed, installation-free and threaded on whatever device opens it, at rates that match and often beat the 2008 native-MATLAB numbers.
The stages: meshing with Shewchuk's Triangle in our own WebAssembly build; element matrices and assembly in one fused loop, as in the original; CHOLMOD's supernodal Cholesky in WebAssembly, threaded; Powell–Hestenes pressure iterations; and the fields drawn per pixel from the element solution. Unknowns are counted as in 2008, the bubble node included. The how it works page has the details of each stage, of the counting and of what is outside the five timers.
Two details of the setup. The computational domain is a disc of radius 2.5 (inclusion radius 1) with the analytical far-field velocity prescribed on its rim; the panels frame that disc in a square, so their corners stay empty. And the default thread count is deliberately not the maximum your machine offers: 2D factorizations are memory-bandwidth-bound, gain little beyond about four threads and lose ground when every hardware thread is used, so the page starts at four on a desktop and at two on a phone, and lets you try more. Where the optimum lies depends on the machine: on the one phone we measured, with its mix of large and small cores, two threads were the fastest setting.
The solution is not just fast but checked: the same solver is verified against an independent banded Cholesky backend to 10 digits, and against the analytical inclusion solution, on every build (46 checks); the convergence lab runs that comparison live on finer and finer meshes. See the benchmark page for how the time scales with size, and the 2011 technical notes for the original native-MATLAB analysis this mirrors.
Reference: Dabrowski, M., Krotkiewski, M. & Schmid, D. W. (2008), MILAMIN: MATLAB-based finite element method solver for large problems, Geochemistry, Geophysics, Geosystems 9, Q04030, doi:10.1029/2007GC001719.