์ด์ ํฌ์คํธ์์ ๋๋น์-์คํ ํฌ์ค ๋ฐฉ์ ์์ ์ด์ฐํ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด์๋ค.
๐ ์ ์ฒด ์๋ฎฌ๋ ์ด์ (1) - Navier-Stokes ๋ฐฉ์ ์
์๋ ฅ ํฌ์(pressure projection)์ ๊ทธ๋ฆฌ๋๋ฅผ ์ด์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง๋ง, ์ด๋ฅ(advection)๋ ์๋ ฅ์ ์ด์ฉํ ํด๊ฒฐ์ด ์ด๋ ค์ ๊ทธ๋ฆฌ๋ ๋ด ์ ์๋ฅผ ์ด์ฉํ์ฌ ํ์ด์ผ ํ๋ค.
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ํํฐํด์ ๋ํ ๋ฌผ๋ฆฌ๋์ ๊ทธ๋ฆฌ๋๋ก ๋ฐ๊พธ๊ณ ์ ์ฅํ๋ ๊ณผ์ ๊ณผ, ๋ฐ๋๋ก ๊ทธ๋ฆฌ๋์ ๋ฌผ๋ฆฌ๋์ ํํฐํด์ ์ ์ฅํ๋ ๊ณผ์ ์ด ํ์ํ๋ค.
์ด ๊ณผ์ ์ ํฌ๊ฒ PIC(Particle-In-Cell)๊ณผ, FLIP(Fluid-Implicit-Particle) ๋๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ๋๋๋ค.
์ด ์ค ํนํ FLIP์ ๋ํ์ฌ ์์ธํ ์์๋ณด๊ณ ์ ํ๋ค.
Ships, Splashes, and Waves on a Vast Ocean ๋ ผ๋ฌธ์์๋ ์ ๋ฐ์ ์ธ FLIP๊ณผ์ ์์ Animating Sand as a Fluid ๋ ผ๋ฌธ์ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ฐ๋๋ค๊ณ ๋์ด ์๋ค.
๋ฐ๋ผ์ Animating Sand as a Fluid ์์ ์ฌ์ฉํ ๋ฐฉ๋ฒ์ ๊ธฐ๋ฐ์ผ๋ก ์์๋ณด์๋ค.
FLIP pseudocode
1) ์
์ ๊ฐ q_p๋ฅผ ๊ทธ๋ฆฌ๋ ๊ฐ q_i,j,k๋ก ๋ฐ๊พผ๋ค.
2) ๊ทธ๋ฆฌ๋ ๊ฐ q_i,j,k๋ฅผ ๊ทธ๋ฆฌ๋์ ์ ์ฅํ๋ค.
3) ์๋ ฅ ํฌ์, ์ธ๋ถ ํ ๋ฑ์ ๊ณ์ฐํ์ฌ ๊ทธ ๊ฒฐ๊ณผ์ธ q(new)_i,j,k๋ฅผ ์ป๋๋ค.
4) ๊ฐ๊ฐ์ ์
์์ ๋ํด ๊ทธ๋ฆฌ๋์์ ๋ณ๊ฒฝ๋ ๊ฐ (delta)q_i,j,k = q(new)_i,j,k - q_i,j,k๋ฅผ ๋ณด๊ฐํ์ฌ ์
์์ ๊ฐ์ ์ถ๊ฐํ๋ค.
5) ๊ทธ๋ฆฌ๋ ์๋์ฅ ๋ด ์
์๋ค์ ์ด๋ฅ๋ฅผ ์ ์ฉํ๋ค.
(q: ๋ฌผ๋ฆฌ๋. ์๋์ ๋ํด ๋ค๋ฃจ๊ณ ์์ผ๋ฏ๋ก ์๋์์๋ q๋ฅผ u๋ก ๋ฐ๊ฟ์ ์์ ํ์๋ค)
๊ฐ ๋จ๊ณ๋ค์ ์ข ๋ ์์ธํ ์ดํด๋ณด์.
1,2) Particle to Grid - ์ ์์ ๊ฐ q_p๋ฅผ ๊ทธ๋ฆฌ๋ ๊ฐ q_i,j,k๋ก ๋ฐ๊พธ๊ณ ์ ์ฅ
๋ ผ๋ฌธ์์๋ 2x2x2 ํฌ๊ธฐ์ ๊ทธ๋ฆฌ๋ ํ๋์ 8๊ฐ์ ์ ์๋ฅผ ๋ด์๋ค.
๊ทธ๋ฐ๋ค์ ๊ฐ ๊ทธ๋ฆฌ๋ ํฌ์ธํธ๋ ๊ทผ์ฒ ์
์๋ค์ ๊ฐ์ค ํ๊ท ๊ฐ์ ๊ฐ์ง๊ฒ ๋๋ค.
์ฌ๊ธฐ์ '๊ทผ์ฒ'์ ๊ธฐ์ค์ ๊ทธ๋ฆฌ๋ ์ ์ ์ค์ฌ์ผ๋ก ํ ๊ทธ๋ฆฌ๋ ์
ํญ์ 2๋ฐฐ์ธ ํ๋ธ์ ํฌํจ๋๋ ๊ฒ์ผ๋ก ์ ์ํ์๋ค.
์ด๊ฑธ ์์์ผ๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ์ ๊ฒ์ด๋ค.
(์ A์ ์ ์ฅ๋๋ ์๋์ ๊ฐ)
๊ฐ์ค์น๋ standard trilinear weighting์ ์ด์ฉํ์๋ค๊ณ ๋์ด ์๋ค.
3) ์๋ ฅ ํฌ์์ ๊ณ์ฐํ์ฌ ๊ทธ ๊ฒฐ๊ณผ์ธ q(new)_i,j,k๋ฅผ ์ป๋๋ค.
๋จผ์ ์ค๋ ฅ์ ๋ํ ํ์ ๊ณ์ฐํด์ผ ํ๋ค.
์ด๊ฑด ๊ฐ๋จํ๋ค. y์ฑ๋ถ์ ์๋๋ฅผ g*timestep ๋งํผ ์ฆ๊ฐ์ํค๋ฉด ๋๋ค.
๊ทธ๋ฐ ๋ค์ ์๋ ฅ ํฌ์์ ์ ์ฉํด์ผ ํ๋ค. ์ด์ ๊ธ์์ ์๋ ฅ์ ๊ตฌํ๋ ๋ฐฉ์ ์์ธ ํฌ์์ก ๋ฐฉ์ ์์ ์ด์ฐํ ํ๊ณ ์ด๋ฅผ ํ๋ ฌ ๊ณฑ์ผ๋ก ํํํ์๋ค.
์ด๋ ๊ฒ ํํ๋ ์์ ๋ ๋จ์ํ ํ์ฌ Ap = d์ ํํ๋ก ํํํ ์ ์๋ค. ๋ฐ๋ผ์ Ap = d๋ก ๋ถํฐ ์๋ ฅ์ ์ป์ด์ผ ํ๋ฉฐ ์ด ๋ conjugate gradient method๋ฅผ ์ด์ฉํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ๊ตฌํด์ง ์๋ ฅ์ ๋๋น์-์คํ ํฌ์ค ๋ฐฉ์ ์์ pressure projection๊ณผ ๊ด๋ จ๋ ์์์ ๋ฃ์ผ๋ฉด ์ ๋ฐ์ดํธ ๋ ๋ฌผ๋ฆฌ๋(์ฌ๊ธฐ์ ์๋)๋ฅผ ์ป์ ์ ์๋ค.
์ด๋ ๊ฒ ํด์ ์ค๋ ฅ๊ณผ ์๋ ฅ ํฌ์์ด ์ ์ฉ๋ ์๋ก์ด ๋ฌผ๋ฆฌ๋์ ์ป์๋ค. PIC์์๋ ์ด ๊ฐ์ ๊ทธ๋๋ก ๊ธฐ์กด ๊ฐ๊ณผ ๋ฐ๊พธ์ง๋ง FLIP์์๋ ๊ธฐ์กด ๊ฐ๊ณผ ๋ณ๊ฒฝ๋ ๊ฐ์ ์ฐจ์ด๋ฅผ ์ด์ฉํ๋ค.
4) ๊ฐ๊ฐ์ ์ ์์ ๋ํด ๊ทธ๋ฆฌ๋์์ ๋ณ๊ฒฝ๋ ๊ฐ (delta)q_i,j,k = q(new)_i,j,k - q_i,j,k๋ฅผ ๋ณด๊ฐํ์ฌ ์ ์์ ๊ฐ์ ์ถ๊ฐํ๋ค.
์ด๋ ๊ฒ ์๋ก์ด ์๋์์ ๊ธฐ์กด ์๋๋ฅผ ๋บ ๊ฐ์ ๊ตฌํ ๋ค์, ๊ทธ ๊ฐ์ ๋ณด๊ฐํ์ฌ ๊ธฐ์กด ์ ์์ ๊ฐ์ ์ถ๊ฐํด์ค๋ค.
์ด๋ฅผ ์์์ผ๋ก ๋ํ๋ด๋ฉด ์๋์ ๊ฐ๋ค.
์ ์์์์ 2D์ ์ํฉ์ด๋ผ ๊ฐ์ ํ๊ณ A,B,C,D 4๊ฐ๋ง ์ ์๋๋ฐ ์ค์ ๋ก ์ฐ๋ฆฌ๋ 3D๋ฅผ ๋ค๋ฃจ๋ 4๊ฐ๊ฐ ์๋ 8๊ฐ์ ๊ทธ๋ฆฌ๋ ์ง์ ์์ ๊ธฐ๋ก๋ ์๋ ๋ณํ๋ฅผ ์ผ์ ํ ๋ณด๊ฐ(trilinear interpolate)ํด์ผ ๋๋ค.
5) ๊ทธ๋ฆฌ๋ ์๋์ฅ ๋ด ์ ์๋ค์ ์ด๋ฅ๋ฅผ ์ ์ฉํ๋ค.
์ด์ ์ค๋ ฅ๊ณผ ์๋ ฅ ํฌ์์ด ์ ์ฉ๋ ๊ฐ์ ์ ์์ ์ ๋ฐ์ดํธ ํ์ผ๋, ์ ์์ ์ด๋ฅ๋ฅผ ์ ์ฉํ๋ฉด ๋๋ค.
ํด๋น ๋ ผ๋ฌธ์์๋ CFL ์กฐ๊ฑด์ ์ํด ์ ํ๋ 5๊ฐ์ ์๋ธ์คํ ๋ค์ด ์๋ RK2 ODE ์๋ฒ๋ฅผ ์ด์ฉํ์๋ค๊ณ ๋์ด ์๋ค.
CFL์ ์ ์ ํ time step์ ๊ตฌํ๋ ๊ฒ์ ๋ํ ์กฐ๊ฑด์ผ๋ก ์ด๋ฅผ ์ ์ฉํ์ฌ ๊ฐ ์๋ธ์คํ ์์ ์ ์๊ฐ 1๊ฐ์ ๊ทธ๋ฆฌ๋ ์ ์ด์์ ์์ง์ด์ง ๋ชปํ๋๋ก ํ๋ค.
RK2 ODE ์๋ฒ๋ 2์ฐจ Runge-Kutta ๋ฐฉ๋ฒ์ด๋ค.
์ด์ ํฌ์คํธ์์ ์ด๋ฅ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด semi-lagrangian ๋ฐฉ๋ฒ์ ์ด์ฉํด์ ์ ์์ ํ์ฌ ์์น Xg์์ ๊ณผ๊ฑฐ ์์น Xp๋ฅผ ๊ตฌํ ๋ ์๋์ ๊ฐ์ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ์ด์ฉํ์๋ค.
์ฌ๊ธฐ์ ์ข ๋ ๋ฐ์ ํ ๋ฐฉ๋ฒ์ด 2์ฐจ Runge-Kutta ๋ฐฉ๋ฒ์ด๋ค.
์ด๋ฐ์์ผ๋ก ํ๋์ time step์์ ๋๋ฒ์ ๊ฑธ์ณ Xp ๊ฐ์ ๊ตฌํ๋ ๊ฒ์ด๋ค. 1/2 timestep์์์ ์ค๊ฐ ์์น๋ฅผ ๊ตฌํ๊ณ , ๊ทธ ์์น๋ฅผ ์ด์ฉํ์ฌ ์ต์ข ์ ์ผ๋ก Xp๋ฅผ ์ป๋ ๋ฐฉ๋ฒ์ด๋ค.
์ด์ ์ ๋ง๋ก Xp๋ฅผ ๊ตฌํ๋ค. ์ ์๊ฐ ์์๋ ์์น Xp๋ฅผ ์์์ผ๋ ๊ทธ ์์น์์์ ๋ฌผ๋ฆฌ๋๋ง ์๋ฉด ์ด๋ฅ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ค.
๊ทธ๋ฐ๋ฐ ๊ณผ๊ฑฐ์ ์์น Xp๊ฐ ํ์ฌ ํํ๋๊ณ ์๋ ๊ทธ๋ฆฌ๋์ ์์ ๊ฐ๋ฅ์ฑ์ด ์๋ค. ๊ทธ๋ด ๊ฒฝ์ฐ ์ธ๊ทผ ๊ทธ๋ฆฌ๋ ํฌ์ธํธ์์ ๋ณด๊ฐํ์ฌ ์ ์ ํ ๊ทผ์ฌ์น๋ฅผ ์ป์ ์ ์๋ค.
์ฌ๊ธฐ์๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ผ์ ํ ๋ณด๊ฐ์ ์ด์ฉํ ์ ์๋ค.
์ด๋ ๊ฒ ํ์ฌ ์ ๋ฐ์ ์ธ FLIP์ด ์ ์ฉ๋๋ ๊ณผ์ ์ ๋ํด ์์๋ณด์๋ค.