StableFluids

http://www.dgp.toronto.edu/people/stam/reality/Research/StableFluids/index.html

かなり前のSIGGRAPH論文から。
なんでこの論文かと言うと、GPU共役勾配法を解くときに、このStableFluidがお題として使われていたから。

まだしっかりと理解はしきれてないんですが、基本的なとき方としては、t=t0でのベクトル分布をW0として、これを以下の処理でW4にすると、それがt=t0+dtでのW0になる、というしくみ。

  • add force: W1 = W0 + dt * F
  • advect : W2(X) = W1(p(X, -dt))
  • transform: W^2 = FFT{W2}
  • diffuse : W^3(k) = W^2(k)/(1+v*dt*k*k)
  • project : W^4 = W^3(k) - (1/(k*k))*(k*W^3(k))*k
  • transform: W4 = IFFT{W^4}

p(X,-dt)というのは、ベクトル場のトレースの結果で、今Xにいる点がdt時間前にいた場所をp(X,-dt)とする。

実際のSIGGRAPHではPDA上で動いていたぐらいなので、かなり軽いルーチンのはず。
JavaApplet版もあった。

http://homepage.mac.com/kaotech/StamFluid.html