Turbulence in Blender can cause serious problems, due to the fact that it is not a fluid-like turbulence field: The forces are essentially random, which means they are not divergence-free. A true fluid flow velocity field (derived from the pressure gradient) would instead always be divergence-free, meaning there are no “sinks” and “sources” of matter in the simulation. The effect of this mathematical property is that a turbulence field in Blender can easily “trap” particles or simulated vertices (cloth, hair) in a small area around an attractor point. The simulation can freeze in an awkward state or start to jitter, and un-freezing requires strong counterforces that can destabilize the simulation. With a divergence-free field the vertices can not easily be trapped and the resulting behavior is much more like that of objects following the flow of air or liquid.
A divergence-free field can be constructed from a scalar field using a curl operator. The entire procedure is described in the paper “Curl-Noise for Procedural Fluid Flow” (Bridson, Hourihan, Nordenstam 2007) http://www.cs.ubc.ca/~rbridson/docs/bridson-siggraph2007-curlnoise.pdf
Additional features described in the paper include using 4D noise for time-varying fields and the use of pseudo-advection over multiple octaves.

7 comments
Gottfried Hofmann says:
Jul 22, 2015
Awesome – thanks a lot for this – finally a 4D turbulence with less problems
Jay Swanepoel says:
Jul 22, 2015
Really awesome, thanks so much.
Coby Randal says:
Jul 22, 2015
Thank you!
yvesbodson says:
Jul 23, 2015
is this using cuda or is it only cpu based? It seems that multi threading is key for that sim.. so 8 cores or more are making the difference..?
lukas says:
Jul 23, 2015
This feature is a new forcefield type, it does not touch particle code or other simulations themselves. Any multithreading has to happen on the side of the simulations, for a force field it is irrelevant.
The force field is “just” a function. The current implementation is straightforward C code. I’m currently working on SIMD support, which should give a significant performance improvement.
The noise field could also be used in a shader, to produce convincing pseudo-turbulence without expensive physical simulation. A CUDA implementation would then be useful. None of our physics sims currently support GPU computing, so the general purpose CPU implementation has priority.
Moisyes says:
Jul 28, 2015
Quite better! Improved realism!
Lukasz says:
Aug 4, 2015
Interesting, especially 4D and pseudo-advection.