The 3D scene integrates a 40-point curvature-flow chain frame by frame, estimating curvature from a three-point circumradius at every node. When that exact integrator was ported and tested standalone (Node, 4000+ steps at the 3D scene's own defaults), it never settled — the mid-span radius kept oscillating with excursions of 100%+ around the theoretical value, a real numerical instability in that scheme, not a rendering artifact.
This 2D companion instead reduces the problem to what it actually is: a pinned segment settles into a circular arc, and any circular arc through two fixed points a chord distance L apart has a purely geometric radius
R(θ) = L / (2 sin(θ/2)) θ = angle the arc subtends at its own center
minimised exactly at θ = π (a semicircle): R_min = L/2 — no arc through
the two pins can ever have a smaller radius, for any θ.
Combining that geometric fact with the same Peach-Koehler force balance (driving τb vs. line-tension restoring T/R, T ≈ ½Gb²) collapses the whole simulation to one ODE on the bow-out angle θ:
dθ/dt = M · ( τb − T / R(θ) )
Below τ꜀ = Gb/L this has a stable fixed point θ_eq = 2·asin(τ/τ꜀), reproducing R = Gb/(2τ) exactly. At τ = τ꜀, θ_eq → π (the semicircle) exactly. Above τ꜀, R_min = L/2 can never be reached by the force-balance radius (which keeps shrinking below L/2 as τ rises), so no fixed point exists in (0, π) and θ grows without bound — the same instability, derived from geometry instead of a discretised curvature estimate.
A standalone Node verification integrated this ODE at the 3D scene's own default values (τ=60 MPa, G=70 GPa, L=150 nm) and found θ converges to 2·asin(0.514)=1.08035 rad with R=145.83 nm, matching Gb/(2τ) to 5 decimal places; at τ=τ꜀ exactly, θ converges to within 0.22% of π; and at τ=130 MPa (ratio≈1.39) θ was found to grow monotonically past π without ever settling, confirming the instability.
Past θ=π there is no longer a single arc through the pins to solve for exactly — physically, each arm curls independently around its own pin. This simulator represents that (labelled, approximate — the 3D scene itself admits the same kind of simplification for its own pinch-off) by locking each arm's local radius to the force-balance value R_eq = Gb/(2τ) and sweeping it by (θ−π); once that sweep passes a full turn, a loop is released.
The released loop is then genuinely different physics again: a free circular loop obeys the same-looking law dr/dt = M(τb − T/r), but here R_eq is an unstable equilibrium — a critical nucleus radius. A loop seeded at r₀=L/2 (verified to always exceed R_eq whenever τ>τ꜀) expands forever; the same verification script confirmed a loop seeded below R_eq instead collapses to zero. That asymmetry — stable pinned arc, unstable free loop — is the real reason dislocation multiplication is a one-way ratchet.
- τ, G, L — set the physical regime; τ꜀ = Gb/L updates live (b = 0.25 nm, matching the 3D scene).
- Simulation speed — scales the mobility-driven relaxation rate only, not the equilibrium values.
- Reset source — clears emitted loops and reseeds θ = 0.