Hi n_t!
First off the say great work on adding IPO collision interaction to the simulator! This is looking very fun!
My computing LBM project is long finished but I am still thinking about the LBM algorithm - especially how to improve it.
I'be been wondering if it is possible to do arbitarily large resolution simulation in finite memory and have come to the conclusion that it in general not possible. However, this thinking has led me to another suggestion on how to improve the simulation.
Disclaimer: I am no computer scientist or programmer - I'm just working from what I know of the algorithm. This is probably highly inefficient but hey..I'm just trying to help here.
It seems clear to me that in the end, it is the isosurface generated by the algorithm that matters most - after all this is what we finally render. Another thing that strikes me is that in high resolution simulations (and often what visually makes high resolution simulations more impressive) is the fine spray generated. Here is what I propose...
Instead of storing the distribution functions of every cell in every isolated drop of spray, how about assuming that sufficiently small droplets are unlikely to break apart (due to effects such as surface tension for example) and therefore internal structure is unimportant - the droplet simply obeys Newton's laws of motion. This means that each isolated droplet surface could simply be assigned a global vector defining its motion. Then instead of storing that drops internal distribution functions in its cells between time steps, they could be recalculated each time from the single vector associated in that closed isosurface. This would mean isosurface data need to be stored..but this is the case anyway as we generate a mesh to visualise the isosurface.
Essentially what I am proposing is that the algorithm search for closed isosurfaces of a certain defined size and if it finds such a surface, the isosurface is tagged in some way, the average vector of its contents computed and assigned to that isosurface allowing the fluid cells inside to become void cells and hence release data (and hence memory). From then on that isosurface is have its future extrapolated from the vector data.
This is just an idea and I realise that for simulation without small droplets it would be completely useless. However, if there is a lot of fine spray then many cells could have their data summarised by these vectors - think about it - drop radius*drop radius*drop radius*19*2 doubles could be released per drop (and there could be thousands of droplets) using this method. It requires a minimum number of cells to generate a closed isosurface in the first place (or so I suspect) so there will be savings even for the smallest drops. If the user is allowed to specify the maximum drop size at which this method is used, there could be substantial memory savings (I hope !

).
So in conclusion - there is this idea in my head which makes me inclined to believe that there could be memory saved for high resolution simulations with lots of fine droplets that don't collide too often.
Thanks for listening!
Koba