ã¯ããã«
CFDïŒèšç®æµäœååŠïŒ -èšç®æµäœååŠã
液äœã®ããŸããŸãªããã»ã¹ãšãããŸããŸãªçš®é¡ã®æ¶²äœïŒããšãã°ãèèããªã€ã«-ãããã¯ãã¹ãŠæ¶²äœïŒã®ã·ãã¥ã¬ãŒã·ã§ã³ã«äœ¿çšãããŸãã
ãã®æçš¿ã§ã¯ãè¡šé¢ãéããŠé害ç©ãããéåžžã®æ°Žã®2Dã·ãã¥ã¬ãŒã¿ãŒãæ€èšããŸãïŒ3DããŒãžã§ã³ã§ã¯ããã¹ãŠãåæ§ã§ããã
ãœãŒã¹ã³ãŒããå©çšå¯èœã§ãïŒã
æ°Žé¢ã¯æ°Žãšç©ºæ°ãåé¢ããå¢çã§ãããããã«ããæ³¢ã氎滎ãªã©ãã·ãã¥ã¬ãŒãã§ããŸãã
ããã€ãã®çç±ã§ã·ãã¥ã¬ãŒã¿ãŒãäœæããããšã«ããŸããã ãããã®1ã€ã¯ãã€ã³ã¿ãŒãããäžã®äž»é¡ã«é¢ããé©åã«èšè¿°ããããœãŒã¹ã®æ¬ åŠã§ãã ç§ãèŠã€ããã®ã¯ãFortranãŸãã¯2dã®ã¿ã§ããã
ãã®ãããã·ãã¥ã¬ãŒã¿ã®äž»ãªæ©èœïŒ
- ãªã¢ã«ã¿ã€ã ã¢ãŒã
- ã·ã³ãã«ã§æ確ãªèšç®ã¹ããŒã +æ瀺çãæé»ç
- ãªãŒãã³ãœãŒã¹
- 2Dãš3DããããŸã
- çµã¿èŸŒã¿ã®ã·ã³ãã«ãªOpenGLã¬ã³ããŒ
- xmlã·ãŒã³ã®èª¬æ
èšç®ã®èŠ³ç¹ãããç§ã¯Navier-Stokesã®æ¹çšåŒïŒããã³ã€ã³ã¿ãŒãããã§èŠã€ãã£ããœãŒã¹ïŒããå§ããŸããã
ããã¯ãç²æ§ã®ããéå§çž®æ§æµäœã®éåãèšè¿°ããå埮åæ¹çšåŒã®ã·ã¹ãã ã§ãã å®çŸ©äžããã¹ãŠã®æ¶²äœã¯éå§çž®æ§ã§ãããããããã§éå§çž®æ§ãšããèšèã¯ããã«äŒŒãŠããŸãã ç²åºŠã¯ãåã
ã®ç²åéã®æ©æŠã瀺ããå²ãåœãŠãããããªã¥ãŒã å
šäœãåãããšãã«ãã¬ã¹ã®å Žåã®ããã«ãç²åãç°ãªãæ¹åã«æ£ä¹±ããã®ãé²ããŸãã 液äœç²åã¯ãã§ããã ãäžç·ã«ãã£ã€ããŸãã
ç§ã®ã·ãã¥ã¬ãŒã¿ãŒã§ã¯ããããã«ä¿®æ£ãããæ¹çšåŒã®ã»ããã䜿çšããŸãããã以äžã§ããã«è©³ãã説æããŸã...
æµäœååŠæ¹çšåŒ
ãããã£ãŠãäžè¬çãªïŒãã¯ãã«ïŒåœ¢åŒã®åºæ¬çãªãããšã¹ããŒã¯ã¹æ¹çšåŒã¯æ¬¡ã®ãšããã§ãã

ããã«ïŒ
- uã¯ãé床ãã£ãŒã«ãã®åŸæ¥ã®æå®ã§ãïŒ2Dã§ã¯ãé床ã¯xæ¹åãšyæ¹åã®2ã€ã®æåã§æ§æãããããããuãšvã§ç€ºãããŸãïŒ
- pã¯å§åã§ã
- tã¯æéã§ã
- rhoã·ã³ãã«-æµäœå¯åºŠ
- èšå·nu-åç²åºŠ
- Fext-éåïŒgïŒãªã©ãæµäœã«äœçšããå€å
æåã®æ¹çšåŒã¯éåæ¹çšåŒã2çªç®ã¯é£ç¶æ¹çšåŒã§ãã
éåæ¹çšåŒã¯ãå³ã«ãããã¥ãŒãã³æ¹çšåŒma = Fã«äŒŒãŠããŸã-æµäœã«äœçšããåã®åèš-ããã¯å§åãæ¡æ£ãéåã§ã...
2Dããªã¢ã³ãã®å Žåãæ¹çšåŒã¯æ¬¡ã®åœ¢åŒãåããŸãïŒããã§ã¯ããããã¯æ¢ã«ç¡æ¬¡å
圢åŒã§æ瀺ãããŠããŸãïŒã

éåæ¹çšåŒã¯ã2ã€ã®é床æå-uããã³vã®2ã€ã®æ¹çšåŒã§è¡šãããŸãã
æ°ããä¿æ°ã«é¢ããŠãReã¯ã¬ã€ãã«ãºæ°ïŒç¡æ¬¡å
å€æ°ã«åãæ¿ãããšãã«å€æïŒã§ããã2ã€ã®åã®ä¿æ°ïŒä¿æ°ïŒãããã«çœ®ãæããŸãã å¯åºŠãšç²åºŠã ããã¯æ°Žãã©ã®ããã«èŠãããã«ãã£ãŠç°ãªããŸã-èèãæ®éã®æ°Žã®ããã« Reãå€ããã°å€ãã»ã©ã液äœã¯éåžžã®æ°Žã«äŒŒãŠããŸãã
æ¬åŒ§å
ã¯ã液äœã®ç²æ§æåïŒãŸãã¯æ¡æ£ïŒãå®çŸ©ããè¡šçŸã§ãã å³åŽã®æ®ãã®çšèªïŒéåãé€ãïŒã¯å¯Ÿæµã§ãã å·ŠåŽ-é床ãšå§åã
次ã«ããããã®æ¹çšåŒãå°ãåçŽåããŸããã

ã芧ã®ããã«ã察æµã¯æ¶æ»
ãã液äœã®æåããããã«æªåããŸãããå
šäœçã«ã¯èŠèŠçã«ã¯éåžžã«æ£åžžã«èŠããŸããããã«ã察æµãé©åã«é¢æ£åããããã«ãç¹å¥ãªã¹ããŒã ã䜿çšãããŸã-ããã¯ããªãé¢åã«èŠããŸãã
æ¹çšåŒã解ããšããSplittingãšåŒã°ããç¹å¥ãªã¹ããŒã ã䜿çšãããŸããããã«ã€ããŠè©³ãã説æããããšæããŸãããããã¯å¥ã®æçš¿ã®å¯èœæ§ãé«ããªããŸãã
Bridson R. Fluid Simulation for Computer Graphics.pdfã®ãæ°å€ã·ãã¥ã¬ãŒã·ã§ã³ã®æŠèŠãã
ãããŠãæµäœååŠã®æ°å€ã·ãã¥ã¬ãŒã·ã§ã³Griebel M Dornseifer T Neunhoeffer T SIAM 1998
åå²æ¹çšåŒã®è§£æ³ã¯æ¬¡ã®ãšããã§ãã

æéã¹ãããã§ã¯ããªã€ã©ãŒæ³ã䜿çšãããŸããæåã®ã¹ãããã§ããå§åãäžããŠãé床FãšGã®äžéèšç®ãååŸããŸãããããã®é床ã¯ãå§åãèæ
®ããªãããšã«å ããŠãé£ç¶æ¹çšåŒãæºãããŸããã ããªãããŒãªæäœã«ãããå§åãèšç®ããæ¹çšåŒãèŠã€ãããŸããããã«ãããé£ç¶æ¹çšåŒã®åé¡ã解決ãããŸãã ãã§ã«èšç®ãããFãšGãããã®æ¹çšåŒã解ããšãæ°ããå§åPãèŠã€ãããŸãã
次ã«ã3çªç®ã®ã¹ãããã§ãèšç®ãããå§åãèæ
®ããŠé床ãä¿®æ£ãããŸãã
ããã«ããã1ã€ã®å®å
šãªã¿ã€ã ã¹ããããå®äºãã次ã®ã¹ãããã§ãã¹ãŠãæ°ãã«ç¹°ãè¿ãããŸãã
æ¹çšåŒã®é¢æ£å
æ¹çšåŒãé¢æ£åããããã«ãæéå·®åæ³ã䜿çšãããŸãã æéã¹ãããã§ã¯ãæšæºã®ãªã€ã©ãŒæ³ã䜿çšãããŸã-æŠç¥çã«ã¯æ¬¡ã®ããã«ãªããŸãïŒuïŒn + 1ïŒ= uïŒnïŒ+ dt * fã
ããã§ãfã¯ãæéå·®ãå«ãŸãªãæ¹çšåŒã®å
šäœãšããŠç解ãããŸãã
äžè¬çã«ãæ°ããç¬éïŒuïŒn + 1ïŒïŒã®é床å€ã¯ãåã®ç¬éïŒuïŒnïŒïŒã®å€ããæ±ããããŸãã
ãã®æçš¿ã§ã¯æ¹çšåŒã®é¢æ£çãªé¡äŒŒäœã«ã€ããŠã¯èª¬æããŸããããããã¯æµäœååŠã®æ°å€ã·ãã¥ã¬ãŒã·ã§ã³ïŒGriebel M Dornseifer T Neunhoeffer T SIAM 1998ïŒã§éåžžã«ããã§ããŠããŸãã
é¢æ£æ¹çšåŒã解ãããã«äœ¿çšãããã®ã¯ã解ã®ãããªãã¯ã¹æ³ã§ã¯ãªããå埩ã¬ãŠã¹ã¶ã€ãã«æ³ã§ãã è¡åã®äºåçãªçµã¿ç«ãŠãå¿
èŠãšãããäžè¬ã«äžéé
åãå¿
èŠãšããŸãããèšç®ã¹ããŒã ãç°¡åã«å€æŽã§ããŸããããããã®è§£æ³ã¯1åã®å埩åŸã«æ¢ã«ãããã·ãã¥ã¬ãŒã·ã§ã³å
šäœã倧å¹
ã«å éããŸãã
ãã®æçš¿ã§ã¯ã2Dã±ãŒã¹ãæ€èšããŸããäž»ãªéç¹ã¯å¢çæ¡ä»¶ã®èª¬æã§ãã ãããã¯æ¹çšåŒã解ãã®ã«æ倧ã®å°é£ãåŒãèµ·ãããŸãã ã·ãã¥ã¬ãŒããããé åå
šäœããæ°Žå¹³æ¹åã®imaxãã€ã³ããšåçŽæ¹åã®jmaxãã€ã³ãã«åå²ãããŸãã imax * jmaxã»ã«ã®ã°ãªããã«ãªããŸãã
4ã€ã®å¢çç·ããå¢çç¹ãè¿œå ãããŸãã åèšã§ããµã€ãºïŒimax + 2ïŒ*ïŒjmax + 2ïŒã®é
åãååŸãããŸãã
åã»ã«ã«ã¯ãé床ãšå§åã®ç¬èªã®å€ããããŸã-èšç®ã°ãªããäžã®ãã¯ãã«éåºŠå Žãšã¹ã«ã©ãŒå§åå Žã«ã€ããŠè©±ãã®ãæ
£ç¿ã§ãã
Uã¯xã®ã»ã«å
ã®ç²åé床ã§ã
Vã¯ãyã®ã»ã«å
ã®ç²åé床ã§ãã
P-å§å
éåžžãèšç®ãããå€æ°ïŒUãVãPïŒãã»ã«ã®äžå¿ã«é
眮ããã®ãäžè¬çã§ãããæµäœã¢ããªã³ã°ã®å Žåãããã¯åžžã«ãœãªã¥ãŒã·ã§ã³ã«åé¡ãåŒãèµ·ãããŸã-å®å
šã«æ£ãããªãæ¯åããŠããããšãå€æããŸããã ãã®ãããCFDã¯ã¹ã¿ãã¬ãŒãã°ãªããã䜿çšããŸã-ãªãŒããããã°ãšãåŒã°ããŸãã

å³ãããé床ã¯ã»ã«èªäœã§ã¯ãªããã»ã«ã®é¢ãu-ã»ã«ã®å³å¢çç·ãv-äžéšå¢çç·ã«ããããšãããããŸãã
å£ã®å¢çæ¡ä»¶
å·®åæ³ã§èšç®ããã«ã¯ãèšç®ã°ãªããã®å¢çã«å€ïŒuãvãpïŒãèšå®ããå¿
èŠããããŸãããããã¯å·Šããäžãå³äžã®4ã€ã®å£ã§ããå¢çæ¡ä»¶ã¯ãæ»ãæ¢ãã¿ã€ããšããªãŒã¹ãªãŒãã¿ã€ãã§ãã ä»ã®ã¿ã€ãããããŸããããããã¯äžè¬çãªèšç»ã§ã¯ãªããããå°éçãªæ¡ä»¶ã§ãã
ããªãŒã¹ãªãŒã -ããã¯ã液äœãå£ã«æ²¿ã£ãŠèªç±ã«æ»ãããšãæå³ããŸãããŸãã§æ©æŠããªãã液äœãããã«æ²¿ã£ãŠåãã®ã劚ãããã®ããªããã®ããã«ã
ãã®æçš¿ã§ã¯ããã®ã¿ã€ãã®å¢çæ¡ä»¶ã¯èæ
®ããŸããã
æ»ãæ¢ãã¯ç²çç¶æ
ã§ããã€ãŸãã液äœãå£ã«ã¶ã€ãããšé床ãäœäžããŸãã
ããã¯ãæµäœé床ãå£é床ãšäžèŽããããšãæå³ããŸãïŒã€ãŸãããã®äŸã§ã¯ãåºå®å¢çã§ãŒãã«çããïŒã
ããšãã°ãå³åŽã®å¢çã®ã¿ãèããŸããé床= 0ã®uã³ã³ããŒãã³ãã ããã¯å£ã«åçŽã§ãããæ°Žã¯å¢çã貫éããŠã¯ãããŸããã
æ»ãã®ãªãå¢çã®å Žåã®vã³ã³ããŒãã³ãã0ã§ãããã¹ã¿ãã¬ãŒãã¡ãã·ã¥ã®å Žåã¯ä¿®æ£ããå¿
èŠããããŸããvã³ã³ããŒãã³ãã®å ŽåãvãçŽæ¥å¢çã«ãªããããåŒããããã«ä¿®æ£ããå¿
èŠããããŸãã
å£ã®vã¯ãæåŸã®2ã€ã®ã»ã«éã®å¹³åã«çãããªããŸãã v_g =ïŒv [imax + 1] [j] + v [imax] [j]ïŒ/ 2
v_gã¯ãŒãïŒïŒv [imax + 1] [j] + v [imax] [j]ïŒ/ 2 = 0ïŒã§ãããããããããã°ã©ã ã§èšå®ããå¿
èŠãããå€v [imax + 1] [j]ãèŠã€ããŸãã
v [imax + 1] [j] =-v [imax] [j];
äžéã®uã³ã³ããŒãã³ãã«ãåãããšãè¡ãå¿
èŠããããŸãã

é
åã§ã¯ã4ã€ã®å¢çç·ã次ã®åº§æšã§è¡šãããŸãã
å·Šå£u [0] [j]ãjã¯å£å
šäœãèµ°ããŸã
v [0] [j]
ã³ãŒãã§ã¯æ¬¡ã®ããã«ãªããŸãã
for (j = 0; j <= jmax + 1; j++) { U[0][j] = 0.0; V[0][j] = -V[1][j]; }
åºå£u [i] [0]
v [i] [0]
for (i = 0; i <= imax + 1; i++) { U[i][0] = -U[i][1]; V[i][0] = 0.0; }
å³å£ééã空ããã°ãªããããããããå³ã®å£ã«ã¯ãæåŸã®åã§ã¯ãªãæåŸãã2çªç®ã®åã«æ²¿ã£ãŠééããuã®å€ã®å¢çããããŸãããããã£ãŠãã»ã«ã®Uã®å€ãU [imax] [j]ã«èšå®ããŸãã
u [imax] [j]
v [imax + 1] [j]
for (j = 0; j <= jmax + 1; j++) { U[imax][j] = 0.0; V[imax + 1][j] = -V[imax][j]; }
äžå£ããã§ãvã®å€ã®å Žåãå¢çã¯æåŸãã2çªç®ã®ç·jmaxã«æ²¿ã£ãŠèµ°ãã®ã§ãã»ã«ã®Vã®å€ãèšå®ããŸã-V [i] [jmax]
u [i] [jmax + 1]
v [i] [jmax]
for (i = 0; i <= imax + 1; i++) { U[i][jmax + 1] = -U[i][jmax]; V[i][jmax] = 0.0; }
ã¡ã€ã³ãœã«ããŒããã¹ãããããã«ããã¹ãŠã®å¢çå€= 0ãèšå®ã§ããŸãã
ãŸããå¢çã«å§åããããå¿
èŠããããŸããå§åã¯ãé床ãšããŠãšããžã§ã¯ãªãã»ã«ã®äžå€®ã«èšå®ãããŸãããããã£ãŠãéåžžã«ç°¡åã§ããå¢çã®å§åã¯ãé£æ¥ããã»ã«ãšåãã«èšå®ã§ããŸããé£æ¥ããã»ã«ããå€ãã³ããŒããã ãã§ãã
for (j = 1; j <= jmax; j++) {
é害ç©ã®å¢çæ¡ä»¶
é害ç©ã¯ãã©ã°C_Bã§è¡šãããŸãã ãããã®å¢çæ¡ä»¶ã¯ãå€å£ã®å Žåãšåãåçã§èšå®ãããŠããŸããå§åã®èšå®ã®2ã€ã®äŸã瀺ããŸãã
if (IsObstacle(i, j)) {
å€åšã»ã«ã®å Žåãåšå²ã®æ°Žã»ã«ã®å€ã®å¹³åãååŸããããšãã°é害ç©ãååŸãããšããã®å·Šäžã«æ°Žãããããã次ã®ããã«é害ç©ã»ã«ã®å§åãèæ
®ããŸãã
if (IsFluid(i - 1, j) && IsFluid(i, j + 1)) { P[i][j] = (P[i][j + 1] + P[i - 1][j]) / 2; }
è¡šé¢ã®å¢çæ¡ä»¶
è¡šé¢ãšãã®åãã¯ãç²åã䜿çšããŠã¢ãã«åãããŸãã ïŒãã®ã»ã¯ã·ã§ã³ã§èª¬æãããŠããããã«äœæããããè¡šé¢ã«å¢çæ¡ä»¶ãæã€ãœãŒã¹ã¯ãsimpletestobstacleãã©ã«ããŒã«ãããŸããïŒ
æåã«ãç²åã¯ã»ã«ããšã«4åãã€ã»ã«ããšã«æ¶²äœã§é
眮ãããŸãïŒåã³ãŒããŒè¿ãã«1åïŒã 次ã«ãåã¹ãããã§ã®ç²åã¯ãå€å
žååŠããã®åçŽãªãªã€ã©ãŒæ³ã䜿çšããŠç§»åããŸãã 移åã®é床ã¯ãã»ã«å
šäœã®å¹³åãšããŠåã»ã«ã§ååŸãããŸãïŒãã ããè£éãªã©ã䜿çšããŠãåé¡ãããŸããïŒã
x = particles[k].x; y = particles[k].y;
åã¹ãããã§ãç²åã®ããã»ã«ã¯æ°ŽãšããŠã©ãã«ä»ããããæ®ãã¯ç©ºã®ã»ã«ã§ãããåºæ¬å€æ°ïŒuãvãpïŒã¯èšç®ãããŸããã
äž»ãªå€æ°ãèšç®ããã«ã¯ãå£ã«å¿
èŠãªã®ãšåãããã«ãè¡šé¢ãšé£æ¥ããã»ã«ã«å¢çæ¡ä»¶ãèšå®ããå¿
èŠããããŸãã ããããæåã«ãæ°Žãšã©ãã«ä»ãããã现èã®ãã¡ãã©ã®çŽ°èãè¡šé¢ã«å±ãããŸãã©ã®åŽãã空æ°ãå
¥ã£ãŠããããå€æããå¿
èŠããããŸãã ãããã®ç®çã®ããã«ãFLAGãšFLAGSURFã®2ã€ã®ã¢ã¬ã€ã䜿çšãããŸãã 1ã€ç®ã¯ãã»ã«ã¿ã€ãïŒæ°Žã空æ°ïŒç©ºïŒãé害ç©ïŒã®ã¿ãæå®ãããŠããŸãã 察å¿ãããã©ã°ã¯æ¬¡ã®ãšããã§ãïŒç¥èªB-å¢çF-æµäœE-空ïŒïŒ
public const int C_B = 0x0000;
FLAGSURFé
åã¯ãè¡šé¢ã®ã»ã«ã決å®ããããã«äœ¿çšãããæ®ãã®ã»ã«ã§ã¯ãããã®å€= 0ã§ãã ãã®é
åã®ãã©ã°ã¯ãã»ã«ã®ã¿ã€ãã ãã§ãªãã空ã®é£æ¥ã»ã«ã®ãã¹ãŠã®çµã¿åããã決å®ããŸãã ãã©ã°ã¯ãçµåã§ããããã«æšæºããããã¹ã¯ãšããŠäœæãããŸãã
FLAGSURFã®åå€ã«ã¯ã4蟺ïŒé£æ¥ã»ã«ïŒã«å¯Ÿå¿ãã4ããããå«ãŸããŠããŸãã
ãããã1ã«èšå®ãããŠããå Žåã察å¿ããé£æ¥ã»ã«ã§-空ã 0ã®å Žå-æ°ŽããããŸãã
ãããïŒ0000 NSWO 0000 0000-æåã¯ãNïŒååïŒSïŒååïŒWïŒè¥¿æ±ïŒããã³OïŒè¥¿ïŒã®4ã€ã®åŽé¢ã瀺ããŸãã
ãã©ã°ã®ãªã¹ãå
šäœããœãŒã¹ã«ãããããå€ã®ããã€ãã®äŸã瀺ããŸãã
public const int C_W = 0x0200; // 512
ãã€ããªã§ã¯ãå€ã¯0000 0010 0000 0000ã®ããã«ãªããŸã
ããã§ããµã€ãWã«å¯Ÿå¿ãããã©ã°ã¯1ã«èšå®ãããŸããããã¯ãçŸåšã®ã»ã«ã®å·ŠåŽã空ã§ããããšãæå³ããŸãã
åæã«ãæ®ãã®3ãããã¯0ã«èšå®ãããŸããããã¯ãæ®ãã®é£æ¥ã»ã«ãæ°Žã§æºããããããšãæå³ããŸãã

public const int C_SW = 0x0600; // 1536 0000 0110 0000 0000
ããã§ã¯ãWãšSã®äž¡åŽã«å¯Ÿå¿ãããã©ã°ã1ã«èšå®ãããŠããŸãããããã£ãŠãçŸåšã®ã»ã«ã®å·Šãšäžã¯ç©ºã§ãæ®ãã®ã»ã«ã¯æ°Žã§ãã

è¡šé¢ã»ã«ã®ã¿ã€ãã決å®ããFLAGSURFé
åãåãããšãã察å¿ãããããã¯ãã®æ¹æ³ã§1ã«èšå®ãããŸãã
FLAGSURFé
åã¯ãäž»ã«è¡šé¢ã®å¢çæ¡ä»¶ãèšå®ããããã«ã®ã¿å¿
èŠã§ãã è¡šé¢ã»ã«ã®çš®é¡ãç°ãªããšãç°ãªãå¢çæ¡ä»¶ãé©çšãããããã§ãã æ¢ã«è¿°ã¹ãããã«ãè¡šé¢ã»ã«ã®é£ã«ãã空ã®ã»ã«ã«å¢çæ¡ä»¶ã眮ãå¿
èŠããããŸãããŸããè¡šé¢ã»ã«èªäœã«ãå¢çæ¡ä»¶ãå¿
èŠã§ããã°ãªããããããããŠããããã¹ãŠã®è¡šé¢ã»ã«ãuvå€æ°ã®èšç®ã«å«ãŸããªãããã§ãã
å€ãèšå®ããåçã¯ç°¡åã§ãã ãªããªã 空æ°å§ã¯æ°Žå§ããã1000åäœã-é床ãå¶éããã移åæ¹åãå€ããããšãªããæ°Žãç¡èŠããŠæ°Žé¢ã«æ²¿ã£ãŠèªç±ã«ç§»åãããããšãã§ããŸãã ãã¡ãããç§ã®ã¹ããŒã ã§ã¯ãè¡šé¢åŒµåã¯èæ
®ãããŠããŸãããããã§ãªããã°ããã¹ãŠãã¯ããã«è€éã«ãªããŸãã
è¡šé¢ã®ã»ã«ãšãããã«æ¥ãã空ã®ã»ã«ã®é床UãšVã®å€ããæ ŒåããããŠããããšãå¿ããã«èšé²ããŸãã
é
眮ã®å€ã¯ãé£æ¥ããæ°Žã»ã«ããååŸãããŸãããè€æ°ã®ã»ã«ãååšããå¯èœæ§ããããããã©ã®é£æ¥ã»ã«ãããããååŸãããã決å®ããã ãã§ãã

ããã¯ã貌ãä»ããå¿
èŠã®ããå¢çæ¡ä»¶ãå«ãç»é¢ã§ããéãåè§ã¯æ°Žã§ãã é»ãããŒã¯ã¯ãå¿
èŠãªå¢çæ¡ä»¶ã§ãã ã©ãã«ã®äžéšã¯è¡šé¢ã»ã«ã«ãäžéšã¯ç©ºã®ã»ã«ã«é
眮ãããŠããããšã«æ³šæããŠãã ããã ããã¯ããœã«ããŒã³ãŒãã«ã¯æ¬¡ã®ãããªæ¡ä»¶ãããããã«çºçããŸãïŒã芧ã®ãšãããUVã¯å³å¢çå£ã®åã®ã»ã«ã§èšç®ãããŸããïŒã
if (IsFluid(i, j) && IsFluid(i+1, j)){ F[i][j] = ... }
ããã€ãã®äŸãèŠãŠã¿ãŸãããã
ãã©ãã°ã±ãŒãžC_SW
case GG.C_SW: { U[i][j - 1] = U[i][j]; V[i][j - 1] = V[i][j]; U[i - 1][j] = U[i][j]; V[i - 1][j] = V[i][j]; } break;
ããã§ã¯ãã»ã«èªäœã®å€ã¯å¿
èŠãããŸãã-ãœã«ããŒã§èšç®ãããŸãã ãã ããé£æ¥ãã空ã®ã»ã«ã«å€ãå¿
èŠã§ã-ãªããªã ãœã«ããŒã«ã¯U [i] [j-1]ãªã©ã®é
ããããŸãã
ãããã®ç©ºã®ã»ã«ã«æãè¿ãæ°Žã»ã«ã¯ãããããã®ã»ã«[i] [j]ã§ãããUãšVã®å€ãååŸãããŸãã
å³ãããV [i-1] [j]ã®å€ã¯ãã»ã«[i] [j]ãš[i-1] [j + 1]ã®äž¡æ¹ããååŸã§ããããšãããããŸãããäžè¬çãªå Žåãã»ã«[ i-1] [j + 1]ã¯éæ°Žã§ããå¯èœæ§ãããããã®äžã®Vã®å€ãå¢çã§ããå¯èœæ§ãããããŸã äžã«çœ®ãããªããããæ£ãããªãã·ã§ã³ã¯[i] [j]ã§ãã ã
ãã©ãã°ã±ãŒãžC_W
case GG.C_W: { U[i - 1][j] = U[i][j]; V[i - 1][j] = V[i][j]; } break;
ããã§ã¯ãã¹ãŠã䌌ãŠããŸãã
ãã©ã°ãC_NWã®ã»ã«
case GG.C_NW: { V[i][j] = V[i][j - 1]; U[i - 1][j] = U[i][j]; } break;
ããã§ãã»ã«èªäœã®Uã®å€ã¯ãœã«ããŒã§èšç®ãããŸãã 圌女ã®å³åŽã«æ°Žæ§œããããŸãã ãã ããäžã®ã»ã«ã¯ç©ºã§ãããããVãäžããå¿
èŠããããŸãããŸããU [i-1] [j]ãèšå®ããå¿
èŠããããŸãã U [i-1] [j]ã
åã®å Žåãšåãããã«ãV [i] [j]ããã§ã¯ãªããã»ã«V [i] [j-1]ããå€V [i] [j]ãååŸããŸããV[i-1ã®å€] [j]ã¯å¢çã§ããããŸã ç¥ãããŠããªãããšãå€æããå ŽåããããŸãã
空ã®ã»ã«ãšè¡šé¢ã»ã«ã®å§åã0ã«èšå®ããŸããããã¯å®å
šã«æ£ããããã§ã¯ãããŸããããæ©èœããŸãã
è¡šé¢ã»ã«ã§ã¯ãå§åã®æ¹çšåŒã解ããšãã«ãããã®ã»ã«ã¯å¢çã§ãããå§åèšç®ã¯ã»ã«å
ã§çŽæ¥å®è¡ãããªããããå§åãå¿
èŠã§ãã
ç²åã®ã¿ã®æµäœéåã¢ã«ãŽãªãºã
ãœãŒã¹ã«ã¯ãã¿ã€ãã«ã«ãã©ãã¯ãšããååã®ãªãã·ã§ã³ããããŸãã ããã¯ãç²åã液äœå
šäœã§ã¯ãªãè¡šé¢èªäœã®ã¿ã移åããèªç±è¡šé¢ã移åããæ¹æ³ã§ãã ããã¯ãVOFã¡ãœããã«å€å°äŒŒãŠããŸãããè¡šé¢ã®äºåçãªåæ§ç¯ãããã§è¡ãããããªãé¢åã§ãã ç§ã®æ¹æ³ã§ã¯ãç²åãã»ã«ãé¢ãããšã空ã®ããŒã¯ãä»ããããç²åã®ãªãè¿ãã®æ¶²äœã»ã«ã«ç²åãè¿œå ãããŸã-è¡šé¢ãã©ãã«ããããããããŸãã ç²åã空ã®ã»ã«ã«å
¥ãå Žåãã»ã«ã¯æ¶²äœãšããŠããŒã¯ãããŸãã ãã¡ããããã®æ¹æ³ã«ã¯äžæ£ç¢ºãªéšåãããªããããŸãããé«éã§ãããè€éãªã³ãŒãã£ã³ã°ãå¿
èŠãšããŸããã
æé»çãªèšç®ã¹ããŒã
ãœãŒã¹ã«ã¯æé»çãªãœã«ããŒã®ããŒãžã§ã³ããããŸã-é床ã®æ¹çšåŒã«é©çšãããŸããæ瀺çãªããŒãžã§ã³ãšã®ã³ãŒãã®éãã¯æå°éã§ãã ãµã³ããªã³ã°ãããšããUããã³V [i] [j]ãå«ããã¹ãŠã®é
ã¯ãæ瀺çãªããã«å³ã§ã¯ãªãæ¹çšåŒã®å·ŠåŽã«ç§»åããŸããæé»çïŒæé»çïŒã¹ããŒã ã䜿çšãããšãæ瀺çã«ã¯äžå¯èœãªå€§å¹
ã«å€§ããªæéã¹ãããã䜿çšã§ããŸãã
æé»çã«ã€ããŠã¯ã
httpïŒ//math.mit.edu/cse/codes/mit18086_navierstokes.pdfã§èªãããšãã§ããŸãã
3DããŒãžã§ã³
3DããŒãžã§ã³ã§ã¯ããã¹ãŠã2Dãšã®é¡æšã«ãã£ãŠè¡ãããŸãã
F1-F8 + WASDããŒãç¢å°ãER PgUp PgDownãå¶åŸ¡ããŠã«ã¡ã©ãå転ãããŸãã
æ°Žæºãããã·ãŒã³ã®å Žå-PããŒ-æ°Žå§ããªãã«ããŸãã
G-ããè¯ãè¡šé¢ã¬ã³ããªã³ã°ïŒç«æ¹äœã®ä»£ããã«çã䜿çšãããŸãïŒããã²ã©ãé
ããªããŸãã
Demosãã©ã«ããŒ-xmlãã¡ã€ã«åœ¢åŒã®ã·ãŒã³ãšãã©ã¡ãŒã¿ãŒïŒãµã€ãºãã¿ã€ã ã¹ããããéåãã»ã«ãããã®ããŒãã£ã¯ã«æ°ïŒããããŸãã HeightMapïŒé«ãã®ãããïŒããã€ã³ãã§ãã€ã³ãããããšãã§ããŸãããµã€ãºã¯ä»»æã§ã-èªåãµã€ãºå€æŽããããŸãã
çµè«ãšããŠã2Dããã³3Dã®ã¹ã¯ãªãŒã³ã·ã§ãããæäŸããŸãã

æ®ãã®ã¹ã¯ãªãŒã³ã·ã§ããã¯ãã¡ã ãœãŒã¹ã¯ãã
sourceforgeã§ãã
ãœãŒã¹ã«ãããããžã§ã¯ããã¹ãŠãVisual Studio 2010ã§æžãããŠããŸã
-ã¢ãããã£ãã¡ãã·ã¥ãªãã¡ã€ã³ã¡ã³ã -ã»ã«ã¯ããå°ããªéšåã«åå²ããããããã®ããŒã¿ãŒã»ã«ã§ãã«ãŠã³ããããŸã
ãã¹ãŠã®å€æ°ãäžæ¹ã倧ããªã»ã«ã¯ãåºå¥ããããšåšã»ã«ã«é£æ¥ããŸãã
fluid2subcell *
-æé»ããŒãžã§ã³
fluide2dimplicit \ããã³fluide2dimplicitfree \
-ããã°ã©ã 㯠ãå€ãããŒãžã§ã³ãåé€ããã«ä»ã®ããŒãžã§ã³ãšç°¡åã«äº€æã§ããã¢ãžã¥ãŒã«ã«åå²ãããŠããŸã
fluide2dmodule \
-æ°Žã®åãã¯ãè¡šé¢äžã®ç²åã®ã¿ã®åãã«ãã£ãŠå®çŸãããŸã
fluide2dtrack *
-ãã®æçš¿ã§èª¬æãããŠãããè¡šé¢äžã®æ瀺çãªæ¹æ³ãšå¢çæ¡ä»¶ãæã€äœæ¥ããŒãžã§ã³
simpletestobstacle \
-ç¡æ¬¡å
ã®Reã®ä»£ããã«-æ°Žã®å¯åºŠãšç²åºŠã®å®éã®ä¿æ°ã䜿çšãã ã
ããã«ãããæ¹çšåŒã解ããšãã«ãUVPã¢ã¬ã€ã®å®éã®é床ãšå®éã®å§åãããã«ååŸã§ããŸãã
simpletestobstaclereal \
-æéããªã¥ãŒã ãã©ã«ããŒå
ã®ãã¹ãŠããã®ã¡ãœããã«é©çšãããŸã
æ¬ããäœãããïŒ
èšç®æµäœååŠã®çŽ¹ä»æéäœç©æ³Versteeg HK Malalasek
-çŸåš3D
-æãç°¡åãªãªãã·ã§ã³-è¡šé¢ãšé害ç©ãªã
SimpleFluid3D \
-C ++ã®ãã¹ãŠãåããææ°ããŒãžã§ã³
fluid3dunion \
-7åã®GeForce 550ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã§ãOpenCLã§èšè¿°ãããGPUïŒæ°Žã®ã¿ïŒã®ãªãã·ã§ã³ïŒç¹ã«GPUã®æé©åãªãïŒ
fluid3clsimple \
-fluid3dunionã«ãããã®ã®éåžžã«åæã®ããŒãžã§ã³ -ããŒãžã§ã³ã¯æ©èœããŠããŸãããcïŒã«ã¯å€ãã®æ¬ ç¹ããããŸãã
fluide3tao
é¢é£ãªã³ã¯è¯ãèšäºã¯ãã¡ã
Kalland_Master.pdfæµäœååŠã«ã€ããŠç°¡åã«ïŒéåæ¹çšåŒæžç±ïŒ
-Griebel M Dornseifer TæµäœååŠã®æ°å€ã·ãã¥ã¬ãŒã·ã§ã³SIAM 1998
//ç¹ã«ãã®æ¬ã«æ³šç®ããŸããå®éã¯ãã¹ãŠç§ããå§ãŸã£ããã®ã§ããã®ãœãŒã¹ã³ãŒãã¯ç°¡åã«èŠã€ãããŸãããcfdå®è£
ã®ããè¯ã説æã¯ãŸã èŠã€ãããŸããã
-ã³ã³ãã¥ãŒã¿ãŒã°ã©ãã£ãã¯ã¹åãBridson R. Fluid Simulation
-ã¢ã³ããŒãœã³JDJrèšç®æµäœååŠã¢ããªã±ãŒã·ã§ã³ã®åºç€MGH 1995
-ãã£ãŒã«ãºããŒã·ã¥-å
éšããã³å€éšãããŒã®æ°å€èšç®2007
-Gretar Tryggvasonæ°æ¶²æ··çžæµã®çŽæ¥æ°å€ã·ãã¥ã¬ãŒã·ã§ã³
-Versteeg HK Malalasekèšç®æµäœååŠå
¥éæéäœç©æ³
ã©ãã«ããŠãããã¹ãŠã®æ¬ãèŠã€ããããšãã§ããŸãã
PS CFDã«ç²ŸéããŠãã人ãããå Žåããœãªã¥ãŒã·ã§ã³ã®é床ãšæ£ç¢ºãã®ç¹ã§ïŒç¹ã«ãµãŒãã§ã¹ã®ã¢ããªã³ã°ã®å ŽåïŒãã®ãããžã§ã¯ããäžç·ã«æ¹åããããšã¯èå³æ·±ãã§ãããã
ç§èªèº«ã¯ã¬ã³ããªã³ã°ãå€å°ã¬ã³ããªã³ã°ã§ããŸãããæ°åŠãšç©çåŠã¯ç§ã®äž»ãªåéã§ã¯ãããŸããã ã³ã¡ã³ãã圹ç«ã€ãã³ããåãã§ãå±ãããŸãã