Each particle carries its own position on the GPU. Every frame, a vertex shader samples the gradient of a 3D simplex-noise potential, takes the perpendicular — a divergence-free curl — and integrates one Euler step, writing the result straight back into a vertex buffer via transform feedback. Positions never return to the CPU.