Open goofoo opened 7 years ago
Thanks for the suggestion! Yes, this paper shows very nice results and would be nice to have for Jet codebase as well. I will add this to my feature wishlist.
feel free to let me know regarding algorithm details and implementation
Thanks, @zhxx1987 ! I haven't started developing IVOCK, yet, but will definitely ask you if I face any problems during the implementation.
Hi Doyub! What is your plan on implementing this? The part with getting velocity from vorticity bit hard to transfer to code(.
Hi @igbondar!
At the moment, my general plan for Jet Framework is to 1) Add/fix minor improvements/issues 2) Consolidate existing branches for v1.4 and 3) Refactor the API and some of the underlying code structure for v2.0
This means I won't be working on adding "features" like new solvers in the time frame above. If anybody can take a ticket like this one, I am more than happy to help.
Regarding your issue:
The part with getting velocity from vorticity bit hard to transfer to code(.
Feel free to ask me about the code. We can figure out what are needed to support your work.
Hi Doyub! Thanks for answer.
For now my main interest to test IVOCK in Houdini for real-world scenarios. Especially since it can preserve shape stability overtime, compared to existing vortex confinement.
As I understand to obtain u from v I need to almost re-create MultiGrid(same as in source code to IVOCK pdf) with monopole tree as described. I will try to readopt the code, that they have shared but for sure it is much better to understand all theory they mentioned in explanation.
On thing I don't get in ivock pdf - after equation 11 in text E=h/||w||2 - what 2 meaning in this case?
And thanks for your book and source code really helpful!
For this:
On thing I don't get in ivock pdf - after equation 11 in text E=h/||w||2 - what 2 meaning in this case?
I think @zhxx1987 can chime in to share some insights.
@igbondar @doyubkim here are some helpful instructions for ivock implementation:
Hi @zhxx1987! Thanks for help. I tried implement 2d case of IVOCK since it simpler and doesn't require vortex stretching. The problem it is quickly become unstable even with a small increasing of correction values. In picture - from left to right - stable fluids, ivock with 0.015 multiplier, ivock with 0.018 multiplier. I think I did somewhere logic mistake or didn't use some clamping. If you have some time to answer I have couple questions. I follow your pdf guide for 2d case w=(0,0,value):
Xnn - sampled values of vorticity correction near examined cell - for 2d case (x-1,y), (x+1,y), (x,y-1),(x,y+1) denominator b =4, a = -pow(2,grid_cell_size), numerator b= divergence of vorticity correction.
get curl from stream function and add it to velocity
Can you suggest where could be possible error and how to control simulation so it isn't explode over time and be more predictable?
In your C++ code you also using decay_vortices - what purpose of it? Or it is just for pyro model - I see only burn sampling.
Hi @zhxx1987! Thanks for help. I tried implement 2d case of IVOCK since it simpler and doesn't require vortex stretching. The problem it is quickly become unstable even with a small increasing of correction values. In picture - from left to right - stable fluids, ivock with 0.015 multiplier, ivock with 0.018 multiplier. I think I did somewhere logic mistake or didn't use some clamping. If you have some time to answer I have couple questions. I follow your pdf guide for 2d case w=(0,0,value):
- Get vorticity from vel
- advect it (BFECC - advection method Trace)
- advect velocity (BFECC - advection method Trace)
- get new vorticity from adv vel
- get vort difference
- For solving poisson equation I'm using this discretized formula
Xnn - sampled values of vorticity correction near examined cell - for 2d case (x-1,y), (x+1,y), (x,y-1),(x,y+1) denominator b =4, a = -pow(2,grid_cell_size), numerator b= divergence of vorticity correction.
get curl from stream function and add it to velocity
Can you suggest where could be possible error and how to control simulation so it isn't explode over time and be more predictable?
In your C++ code you also using decay_vortices - what purpose of it? Or it is just for pyro model - I see only burn sampling.
Hi igbondar, here are couple things to check:
@igbondar after you done my check list, you shall be able to add back 1.0 of the missing vortices with no problem in 2D. although I used 0.95 in my 3D cases due to some extra errors introduced by the vortex stretching.
for using multigrid solvers in 2D, please check the code at https://github.com/ziyinq/Bimocq/blob/master/src/bimocq2D/BimocqSolver2D.cpp "buildMultiGrid" and "projection". for vorticity stream functions, PURE_NEUMANN = false.
How about to add a method implementation "Restoring Missing Vortices in Advection-Projection Fluid Solvers" http://www.cs.ubc.ca/~zhxx/IVOCK.html