A thin liquid column is unstable: surface tension σ lowers the surface area when a ripple of wavelength λ > 2πR grows, so a jet from a nozzle becomes a string of drops. The simulator solves the one-dimensional slender-jet equations of Eggers & Dupont (1994) on one periodic wavelength, then lays that cell along the jet with the Galilean map z = U·t (so a vibrator at frequency f = U/λ gives a stroboscopically still picture). Nothing about drop size is drawn by hand: main drop and satellites come out of the numerical pinch-off.
Equations
Linear (Rayleigh 1878, inviscid cylinder, x = kR):
ω²τ² = x · I₁(x)/I₀(x) · (1 − x²), τ = √(ρR³/σ)
unstable for x < 1; maximum x = 0.6970, λ_opt = 9.014 R, ω_max τ = 0.3433
Long-wave viscous (Weber 1931): ω̃ = −(3/2)Oh x² + √( (9/4)Oh² x⁴ + x²(1−x²)/2 ), Oh = μ/√(ρσR)
x_max = 1/√(2 + 3√2 Oh) (Eggers & Villermaux 2008)
Nonlinear 1-D model (h = radius, u = axial velocity, κ = mean curvature × 2):
∂ₜh² + ∂ᵤ(h²u) = 0
∂ₜu + u ∂ᵤu = −∂ᵤκ + 3Oh h⁻² ∂ᵤ(h² ∂ᵤu), κ = 1/(h√(1+hᵤ²)) − hᵤᵤ/(1+hᵤ²)^{3/2}
Drop size from mass balance on one wavelength: πR²λ = (4/3)πa³ → a = R (3λ/4R)^{1/3} (a = 1.891 R at λ_opt)
Breakup time (linear + nonlinear offset): t_b ≈ ln(1/ε)/ω + 1.1 τ, breakup length L = U t_b
Scales: We = ρU²R/σ, Re = 2ρUR/μ, cut-off frequency f_c = U/(2πR), wavenumber kR = 2π f R/U
Numerical method
Staggered grid (a = h² at cell centres, u on faces), second-order central differences with the full curvature, classical RK4, adaptive step Δt = min(0.25Δz²/√(hmax/2), 0.1 hmin3/2√Δz, 0.4Δz²/(6Oh), 0.3Δz/|u|max); default Δz = R/12 (λ/108 for the optimum). Upwind schemes damp the instability in a periodic cell and are not used. The run stops at hmin < hcut = 0.03 R (the neck is not resolvable below Δz); drops are the segments between neck minima thinner than 0.5 R; fragments below 0.15 R are ignored (< 2·10⁻⁴ of the volume). The solver runs in a Web Worker, never on the render path.
Independent numerical checks
Expected numbers are typed in as literals (SciPy / textbook closed forms), not taken from the model code. Rows marked [sim] run the real solver.
#
Check
Value
Expected
Error
Model limits (what this does not capture)
Temporal cell + z = U·t map instead of a true spatial problem: accurate for We ≫ 1, an approximation at WeR ≈ 7 (a few percent in L); all cells are identical (no noise between drops); gravity is neglected (horizontal jet).
Dripping regime (WeR ≲ 3.2, absolute instability) is outside the model: the page warns instead of simulating.
No azimuthal modes (kink/“snake”), no air drag (aerodynamic breakup at Wegas > 0.4), no turbulence, nozzle velocity-profile relaxation, charge, surfactants or thermocapillarity.
The 1-D model overestimates ωmax by ≈ 3 % compared with the full Rayleigh result (shown in the dispersion plot).
After pinch-off drops are shown as spheres of equal volume that coast with their mass-averaged velocity and merge on contact (no oscillations); the pinch cut-off hcut changes the satellite radius by < 3 % (checked).
Fluid data: glycerol and olive-oil values are textbook figures marked “verify before publish”. Not affiliated with any printer or nozzle maker.