๐Ÿ“˜ ์œ ์ฒด ์‹œ๋ฎฌ๋ ˆ์ด์…˜(2) - FLIP

ํŒŒ์ธยท2022๋…„ 3์›” 27์ผ
0

์œ ์ฒด ์‹œ๋ฎฌ๋ ˆ์ด์…˜

๋ชฉ๋ก ๋ณด๊ธฐ
1/2
post-custom-banner

์ด์ „ ํฌ์ŠคํŠธ์—์„œ ๋‚˜๋น„์—-์Šคํ† ํฌ์Šค ๋ฐฉ์ •์‹์„ ์ด์‚ฐํ™” ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค.

๐Ÿ“˜ ์œ ์ฒด ์‹œ๋ฎฌ๋ ˆ์ด์…˜(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์ด ์ ์šฉ๋˜๋Š” ๊ณผ์ •์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค.

profile
๊ณต๋ถ€์ •๋ฆฌ์šฉ
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€