• Home
  • Documentation
  • Forum
  • Blog
  • Users
    • Map
    • Userlist
    • Businesses
    • Userpages
    • Connections
  • Contributions
    • All
    • Store
  • Downloads
    • vvvv beta
    • vvvv beta previews
  • Store
Show / Hide Table of Contents

StableFluids

Author: woei
Date: 25 Oct, 2017
Category: plugin
Credits:

Jos Stam http://www.dgp.toronto.edu/people/stam/reality/Research/pdf/GDC03.pdf

Download

64bit

1-StableFluids_v1.0_avx.zip
26 Oct, 2017 - 11:45
StableFluids_v1.0 x64 avx
0-StableFluids_v1.0.zip
25 Oct, 2017 - 10:55
StableFluids_v1.0 x64 avx2

Description

This project was a research project for the #node17 visuals and wasn't really aimed for production. It quite strictly reproduces the credited paper, since it mainly served as a reference for evaluating other algorithms and implementation attempts. The only deviations are the additional vorticity confinement routines, eliminating the restriction to a square and evenly spaced base grid, and using Jacobi instead of Gauss-Seidel solver in order to benefit from SIMD instructions.

The repo demonstrates one way how to take advantage of c++'s native speed (SSE instructions) in vvvv without the need for two separate dlls and interop.

https://github.com/woeishi/StableFluids for detailed info

Nodes

all nodes come 2d and 3d versions

  • StableFluid: Creates and holds a fluid simulation space
  • Evaluate: Drives the fluid simulation, giving access to global parameters
  • SetVelocity / SetDensity: Sets the velocities/densities of the entire fluid simulation space
  • AddVelocity / AddDensity: Adds velocities/densities to the entire fluid simulation space
  • AddRadialVelocity / AddRadialDensity: Adds velocities/densities around the given center to the fluid simulation space (think of it as an emitter)
  • AddRadial: Adds velocities and densities around the given center to the fluid simulation space
  • GetVelocity / GetDensity: Returns the velocities/densities of the enire fluid simulation space
  • Split: Returns the velocities and densities of the enire fluid simulation space
Note: please check [this list](https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#CPUs_with_AVX) if your cpu is compatible

Comments

Comments are no longer accepted.
Please create a new topic in the vvvv beta forum to discuss this contribution.
timpernagel
25 Oct, 2017 - 14:06

Nice! (And <3 for using GDI Renderer)

io
26 Oct, 2017 - 10:10

Red "Evaluate" node here and then it crashes within 20 seconds.

woei
26 Oct, 2017 - 10:26

@io thats a bit unspecific. x64 and you processor must support avx extensions. wiki says intel processors since 2008 and amd 2011

io
26 Oct, 2017 - 10:53

This is a i7 Sandybridge with GTX 675xm, 64bit machine and latest 64bit vvvv

woei
26 Oct, 2017 - 11:22

evaluate is red once you open the help patch? does tty say anything?

woei
26 Oct, 2017 - 11:30

ah, might be incompatible with avx2 extensions. let me check, if i can compile with avx only

io
26 Oct, 2017 - 11:32

Red on open.

woei
26 Oct, 2017 - 11:50

uploaded another version which should be compatible for older cpus. check the list though.

io
26 Oct, 2017 - 11:57

Ok working now thanks

kopffarben
07 Nov, 2017 - 17:33

Hi Woei, on github you write you do this in c++ because it must be unmanaged for SSE/AVX.

Just for info you now this System.Numerics.Vectors? It provides hardware-accelerated numeric types (SIMD), suitable for high-performance processing and graphics applications.

woei
08 Nov, 2017 - 12:46

@kopffarben: yep, i know. however numerics apply those instruction on vectors. which in this case is maximum 3. i do that on iteration which maxes to 8. the cost of this algorithm is not really complicated arithmetics but just running a lot of loops over a lot of arrays. thus unmanaged outperformes .net quite a bit, since there is no boundschecking on array access. cli would of course also optimize into simd instructions, but only for cases where you exactly loop from 0 to length-1 of the array. and that is nearly never the case here, due to special boundary conditions in the algorithm.

i've also got the same implementation in c# with all the performance optimizations i could think of. still didn't get near the speed of c++

  • Improve this Doc

© 2020 by vvvv group. Imprint | Privacy Policy.
Thanks to DocFX for building this website. Analytics by Plausible.

Back to top