I had another go at using Curl Noise to approximate fluid flow. I have been following this paper somewhat

Basically a grid is generated and at each point a noise value is obtained (just a scalar value). Then from this noise the fluid flow vector field is derived (just by taking the curl) and so you get turbulence over the whole grid. My noise is crappy (just a function like sin(x*y) so bear that in mind).

Then a mask is added on top which is by default 0. When the mask is 0 you see no turbulence but when the mask is non-zero you can see through it to the turbulent layer underneath. As the microbes move they leave a trail of high mask values behind them (proportional to their speed) which is why they have a turbulent trail.

The mask values then diffuse (using the heat equation, if I were a pony and had one trick applying the heat equation spuriously would be it) and decay over time so after a while you cant see the turbulence anymore.

This implementation (code in the the prototypes repository - marked aug15) is stupid in that it generated the turbulence everywhere whereas it would be much more efficient to only generate it where the mask is non-zero. Anyway what do you guys think? Is this the sort of thing you are imagining with fluid flow?