Vortex Core Singularity: 1/r
Four point vortices orbit and stir a field of tracers. The velocity blows up at every core; the weighted view of the same flow stays bounded.
Loading vortex simulator
Point vortices induce a 1/r velocity that diverges at each core. This demo moves four point vortices with the exact Biot-Savart law and shows the velocity next to its r-weighted (k=-1) view, which is bounded. The weighting is a diagnostic: it does not change how the vortices move.
The Physics
Point Vortex Dynamics
In 2D inviscid flow, a point vortex with circulation Gamma induces a velocity field:
v(r) = Gamma / (2 * pi * r)This is the Biot-Savart law. As r approaches 0 (the vortex core), the velocity diverges. Each vortex moves with the velocity induced by the others.
A Built-In Check
A counter-rotating pair at separation d translates at exactly
U = Gamma / (2 * pi * d)The solver reproduces this to five digits (lib/simulation/vortexSolver.test.ts). Four point vortices are not turbulence: there is no Kolmogorov energy cascade in this model.
Velocity vs Weighted View
Velocity (k=0)
v = Gamma / (2 * pi * r)- - Diverges as r approaches 0
- - Moves the vortices and the tracers
- - Sets the solver timestep in both panels
Weighted view (k=-1)
sum_s v_s * r_s = sum_s Gamma_s / (2 * pi) * t_s- - Each source term weighted by its distance r_s
- - Bounded by sum |Gamma_s| / (2 pi)
- - A readout of the same run; the flow is unchanged
Note: an earlier version advected the vortices with the weighted field, which made every pairwise speed Gamma/(2 pi) regardless of distance. That is a different flow, not a change of calculus.
Benchmark Context
The spectraldns_vortex row of the local CASCADE suite is a synthetic toy, not a SpectralDNS run: one 2-D test function with a singular point, relabelled per domain, scored by how close the optimizer got to that point. Every 1/r row in that file shares the same value. It is a local benchmark, not citable, and this browser demo does not reproduce it.
Mathematical Note
The weight used here is the project's diagnostic factor r^(-k). For a 1/r term, k=-1 gives
(1/r) * r = 1so the weighted readout is bounded. On r > 0 the same fact reads D_BG[r^-1] = e^-1, a constant log-slope. Neither statement removes the singularity: the velocity itself still diverges at each core.
Math checked against local simulation utilities. View more demos | All tools