![]() | ![]() |
ã¯ããã«
CFDïŒèšç®æµäœååŠïŒ -èšç®æµäœååŠã
液äœã®ããŸããŸãªããã»ã¹ãšãããŸããŸãªçš®é¡ã®æ¶²äœïŒããšãã°ãèèããªã€ã«-ãããã¯ãã¹ãŠæ¶²äœïŒã®ã·ãã¥ã¬ãŒã·ã§ã³ã«äœ¿çšãããŸãã
ãã®æçš¿ã§ã¯ãè¡šé¢ãéããŠé害ç©ãããéåžžã®æ°Žã®2Dã·ãã¥ã¬ãŒã¿ãŒãæ€èšããŸãïŒ3DããŒãžã§ã³ã§ã¯ããã¹ãŠãåæ§ã§ããã ãœãŒã¹ã³ãŒããå©çšå¯èœã§ãïŒã
æ°Žé¢ã¯æ°Žãšç©ºæ°ãåé¢ããå¢çã§ãããããã«ããæ³¢ã氎滎ãªã©ãã·ãã¥ã¬ãŒãã§ããŸãã
ããã€ãã®çç±ã§ã·ãã¥ã¬ãŒã¿ãŒãäœæããããšã«ããŸããã ãããã®1ã€ã¯ãã€ã³ã¿ãŒãããäžã®äž»é¡ã«é¢ããé©åã«èšè¿°ããããœãŒã¹ã®æ¬ åŠã§ãã ç§ãèŠã€ããã®ã¯ãFortranãŸãã¯2dã®ã¿ã§ããã
ãã®ãããã·ãã¥ã¬ãŒã¿ã®äž»ãªæ©èœïŒ
- ãªã¢ã«ã¿ã€ã ã¢ãŒã
- ã·ã³ãã«ã§æ確ãªèšç®ã¹ããŒã +æ瀺çãæé»ç
- ãªãŒãã³ãœãŒã¹
- 2Dãš3DããããŸã
- çµã¿èŸŒã¿ã®ã·ã³ãã«ãªOpenGLã¬ã³ããŒ
- xmlã·ãŒã³ã®èª¬æ
èšç®ã®èŠ³ç¹ãããç§ã¯Navier-Stokesã®æ¹çšåŒïŒããã³ã€ã³ã¿ãŒãããã§èŠã€ãã£ããœãŒã¹ïŒããå§ããŸããã
ããã¯ãç²æ§ã®ããéå§çž®æ§æµäœã®éåãèšè¿°ããå埮åæ¹çšåŒã®ã·ã¹ãã ã§ãã å®çŸ©äžããã¹ãŠã®æ¶²äœã¯éå§çž®æ§ã§ãããããããã§éå§çž®æ§ãšããèšèã¯ããã«äŒŒãŠããŸãã ç²åºŠã¯ãåã ã®ç²åéã®æ©æŠã瀺ããå²ãåœãŠãããããªã¥ãŒã å šäœãåãããšãã«ãã¬ã¹ã®å Žåã®ããã«ãç²åãç°ãªãæ¹åã«æ£ä¹±ããã®ãé²ããŸãã 液äœç²åã¯ãã§ããã ãäžç·ã«ãã£ã€ããŸãã
ç§ã®ã·ãã¥ã¬ãŒã¿ãŒã§ã¯ããããã«ä¿®æ£ãããæ¹çšåŒã®ã»ããã䜿çšããŸãããã以äžã§ããã«è©³ãã説æããŸã...
æµäœååŠæ¹çšåŒ
ãããã£ãŠãäžè¬çãªïŒãã¯ãã«ïŒåœ¢åŒã®åºæ¬çãªãããšã¹ããŒã¯ã¹æ¹çšåŒã¯æ¬¡ã®ãšããã§ãã
![](https://habrastorage.org/storage3/6c5/b00/3d5/6c5b003d500f5be1ac72c59f4b4e65b4.png)
ããã«ïŒ
- uã¯ãé床ãã£ãŒã«ãã®åŸæ¥ã®æå®ã§ãïŒ2Dã§ã¯ãé床ã¯xæ¹åãšyæ¹åã®2ã€ã®æåã§æ§æãããããããuãšvã§ç€ºãããŸãïŒ
- pã¯å§åã§ã
- tã¯æéã§ã
- rhoã·ã³ãã«-æµäœå¯åºŠ
- èšå·nu-åç²åºŠ
- Fext-éåïŒgïŒãªã©ãæµäœã«äœçšããå€å
æåã®æ¹çšåŒã¯éåæ¹çšåŒã2çªç®ã¯é£ç¶æ¹çšåŒã§ãã
éåæ¹çšåŒã¯ãå³ã«ãããã¥ãŒãã³æ¹çšåŒma = Fã«äŒŒãŠããŸã-æµäœã«äœçšããåã®åèš-ããã¯å§åãæ¡æ£ãéåã§ã...
2Dããªã¢ã³ãã®å Žåãæ¹çšåŒã¯æ¬¡ã®åœ¢åŒãåããŸãïŒããã§ã¯ããããã¯æ¢ã«ç¡æ¬¡å 圢åŒã§æ瀺ãããŠããŸãïŒã
![](https://habrastorage.org/storage3/b71/7c6/009/b717c600929e15c4f7cdad103d18f0cb.png)
éåæ¹çšåŒã¯ã2ã€ã®é床æå-uããã³vã®2ã€ã®æ¹çšåŒã§è¡šãããŸãã
æ°ããä¿æ°ã«é¢ããŠãReã¯ã¬ã€ãã«ãºæ°ïŒç¡æ¬¡å å€æ°ã«åãæ¿ãããšãã«å€æïŒã§ããã2ã€ã®åã®ä¿æ°ïŒä¿æ°ïŒãããã«çœ®ãæããŸãã å¯åºŠãšç²åºŠã ããã¯æ°Žãã©ã®ããã«èŠãããã«ãã£ãŠç°ãªããŸã-èèãæ®éã®æ°Žã®ããã« Reãå€ããã°å€ãã»ã©ã液äœã¯éåžžã®æ°Žã«äŒŒãŠããŸãã
æ¬åŒ§å ã¯ã液äœã®ç²æ§æåïŒãŸãã¯æ¡æ£ïŒãå®çŸ©ããè¡šçŸã§ãã å³åŽã®æ®ãã®çšèªïŒéåãé€ãïŒã¯å¯Ÿæµã§ãã å·ŠåŽ-é床ãšå§åã
次ã«ããããã®æ¹çšåŒãå°ãåçŽåããŸããã
![](https://habrastorage.org/storage3/fea/f45/921/feaf459212eeaca1ac6928997bc67e63.png)
ã芧ã®ããã«ã察æµã¯æ¶æ» ãã液äœã®æåããããã«æªåããŸãããå šäœçã«ã¯èŠèŠçã«ã¯éåžžã«æ£åžžã«èŠããŸããããã«ã察æµãé©åã«é¢æ£åããããã«ãç¹å¥ãªã¹ããŒã ã䜿çšãããŸã-ããã¯ããªãé¢åã«èŠããŸãã
æ¹çšåŒã解ããšããSplittingãšåŒã°ããç¹å¥ãªã¹ããŒã ã䜿çšãããŸããããã«ã€ããŠè©³ãã説æããããšæããŸãããããã¯å¥ã®æçš¿ã®å¯èœæ§ãé«ããªããŸãã
Bridson R. Fluid Simulation for Computer Graphics.pdfã®ãæ°å€ã·ãã¥ã¬ãŒã·ã§ã³ã®æŠèŠãã
ãããŠãæµäœååŠã®æ°å€ã·ãã¥ã¬ãŒã·ã§ã³Griebel M Dornseifer T Neunhoeffer T SIAM 1998
åå²æ¹çšåŒã®è§£æ³ã¯æ¬¡ã®ãšããã§ãã
![](https://habrastorage.org/storage3/81b/b3b/19d/81bb3b19dbb27fe9391f7774bb873ce5.png)
æéã¹ãããã§ã¯ããªã€ã©ãŒæ³ã䜿çšãããŸããæåã®ã¹ãããã§ããå§åãäžããŠãé床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ã¯ã¹ã¿ãã¬ãŒãã°ãªããã䜿çšããŸã-ãªãŒããããã°ãšãåŒã°ããŸãã
![](https://habrastorage.org/storage3/50e/d48/9ab/50ed489ab58268cfca313f0315370870.png)
å³ãããé床ã¯ã»ã«èªäœã§ã¯ãªããã»ã«ã®é¢ã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ã³ã³ããŒãã³ãã«ãåãããšãè¡ãå¿ èŠããããŸãã
![](https://habrastorage.org/storage3/f35/b1b/dac/f35b1bdac569af6786ede2f43261ec18.png)
é åã§ã¯ã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++) { // P[0][j] = P[1][j]; // P[imax + 1][j] = P[imax][j]; } for (i = 1; i <= imax; i++) { P[i][0] = P[i][1]; P[i][jmax + 1] = P[i][jmax]; }
é害ç©ã®å¢çæ¡ä»¶
é害ç©ã¯ãã©ã°C_Bã§è¡šãããŸãã ãããã®å¢çæ¡ä»¶ã¯ãå€å£ã®å Žåãšåãåçã§èšå®ãããŠããŸããå§åã®èšå®ã®2ã€ã®äŸã瀺ããŸãã
if (IsObstacle(i, j)) { // - - P if (IsFluid(i, j - 1)) { P[i][j] = P[i][j - 1]; } // - ... else if (IsFluid(i - 1, j)) { P[i][j] = P[i - 1][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; // i = (int)(x / delx); j = (int)(y / dely); u = U[i][j]; v = V[i][j]; // x += delt * u; y += delt * v;
åã¹ãããã§ãç²åã®ããã»ã«ã¯æ°ŽãšããŠã©ãã«ä»ããããæ®ãã¯ç©ºã®ã»ã«ã§ãããåºæ¬å€æ°ïŒuãvãpïŒã¯èšç®ãããŸããã
äž»ãªå€æ°ãèšç®ããã«ã¯ãå£ã«å¿ èŠãªã®ãšåãããã«ãè¡šé¢ãšé£æ¥ããã»ã«ã«å¢çæ¡ä»¶ãèšå®ããå¿ èŠããããŸãã ããããæåã«ãæ°Žãšã©ãã«ä»ãããã现èã®ãã¡ãã©ã®çŽ°èãè¡šé¢ã«å±ãããŸãã©ã®åŽãã空æ°ãå ¥ã£ãŠããããå€æããå¿ èŠããããŸãã ãããã®ç®çã®ããã«ãFLAGãšFLAGSURFã®2ã€ã®ã¢ã¬ã€ã䜿çšãããŸãã 1ã€ç®ã¯ãã»ã«ã¿ã€ãïŒæ°Žã空æ°ïŒç©ºïŒãé害ç©ïŒã®ã¿ãæå®ãããŠããŸãã 察å¿ãããã©ã°ã¯æ¬¡ã®ãšããã§ãïŒç¥èªB-å¢çF-æµäœE-空ïŒïŒ
public const int C_B = 0x0000; // public const int C_F = 0x0010;// public const int C_E = 0x1000;//
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ã«èšå®ãããŸããããã¯ãæ®ãã®é£æ¥ã»ã«ãæ°Žã§æºããããããšãæå³ããŸãã
![](http://habrastorage.org/storage3/b25/77e/078/b2577e07876044c13bc0e653ee7172d0.png)
public const int C_SW = 0x0600; // 1536 0000 0110 0000 0000
ããã§ã¯ãWãšSã®äž¡åŽã«å¯Ÿå¿ãããã©ã°ã1ã«èšå®ãããŠããŸãããããã£ãŠãçŸåšã®ã»ã«ã®å·Šãšäžã¯ç©ºã§ãæ®ãã®ã»ã«ã¯æ°Žã§ãã
![](http://habrastorage.org/storage3/9c7/0b9/be2/9c70b9be202d9b2edcb43380494e312a.png)
è¡šé¢ã»ã«ã®ã¿ã€ãã決å®ããFLAGSURFé åãåãããšãã察å¿ãããããã¯ãã®æ¹æ³ã§1ã«èšå®ãããŸãã
// , 1 if (FLAG[i-1][j] == GG.C_E) FLAGSURF[i][j] = FLAGSURF[i][j] | GG.C_W;
FLAGSURFé åã¯ãäž»ã«è¡šé¢ã®å¢çæ¡ä»¶ãèšå®ããããã«ã®ã¿å¿ èŠã§ãã è¡šé¢ã»ã«ã®çš®é¡ãç°ãªããšãç°ãªãå¢çæ¡ä»¶ãé©çšãããããã§ãã æ¢ã«è¿°ã¹ãããã«ãè¡šé¢ã»ã«ã®é£ã«ãã空ã®ã»ã«ã«å¢çæ¡ä»¶ã眮ãå¿ èŠããããŸãããŸããè¡šé¢ã»ã«èªäœã«ãå¢çæ¡ä»¶ãå¿ èŠã§ããã°ãªããããããããŠããããã¹ãŠã®è¡šé¢ã»ã«ãuvå€æ°ã®èšç®ã«å«ãŸããªãããã§ãã
å€ãèšå®ããåçã¯ç°¡åã§ãã ãªããªã 空æ°å§ã¯æ°Žå§ããã1000åäœã-é床ãå¶éããã移åæ¹åãå€ããããšãªããæ°Žãç¡èŠããŠæ°Žé¢ã«æ²¿ã£ãŠèªç±ã«ç§»åãããããšãã§ããŸãã ãã¡ãããç§ã®ã¹ããŒã ã§ã¯ãè¡šé¢åŒµåã¯èæ ®ãããŠããŸãããããã§ãªããã°ããã¹ãŠãã¯ããã«è€éã«ãªããŸãã
è¡šé¢ã®ã»ã«ãšãããã«æ¥ãã空ã®ã»ã«ã®é床UãšVã®å€ããæ ŒåããããŠããããšãå¿ããã«èšé²ããŸãã
é 眮ã®å€ã¯ãé£æ¥ããæ°Žã»ã«ããååŸãããŸãããè€æ°ã®ã»ã«ãååšããå¯èœæ§ããããããã©ã®é£æ¥ã»ã«ãããããååŸãããã決å®ããã ãã§ãã
![](http://habrastorage.org/storage3/a0a/169/832/a0a169832f715b85127f7ab50e504f0a.png)
ããã¯ã貌ãä»ããå¿ èŠã®ããå¢çæ¡ä»¶ãå«ãç»é¢ã§ããéãåè§ã¯æ°Žã§ãã é»ãããŒã¯ã¯ãå¿ èŠãªå¢çæ¡ä»¶ã§ãã ã©ãã«ã®äžéšã¯è¡šé¢ã»ã«ã«ãäžéšã¯ç©ºã®ã»ã«ã«é 眮ãããŠããããšã«æ³šæããŠãã ããã ããã¯ããœã«ããŒã³ãŒãã«ã¯æ¬¡ã®ãããªæ¡ä»¶ãããããã«çºçããŸãïŒã芧ã®ãšãããUVã¯å³å¢çå£ã®åã®ã»ã«ã§èšç®ãããŸããïŒã
if (IsFluid(i, j) && IsFluid(i+1, j)){ F[i][j] = ... }
ããã€ãã®äŸãèŠãŠã¿ãŸãããã
ãã©ãã°ã±ãŒãžC_SW
![](http://habrastorage.org/storage3/511/79f/750/51179f7501e8af6e57a1d4f0dbeefcdc.png)
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
![](http://habrastorage.org/storage3/797/739/ccc/797739ccc59f87f0847aafc272b92e5b.png)
case GG.C_W: { U[i - 1][j] = U[i][j]; V[i - 1][j] = V[i][j]; } break;
ããã§ã¯ãã¹ãŠã䌌ãŠããŸãã
ãã©ã°ãC_NWã®ã»ã«
![](http://habrastorage.org/storage3/135/d49/c4f/135d49c4f8ab710f6d474369d2bd2ab6.png)
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ã®ã¹ã¯ãªãŒã³ã·ã§ãããæäŸããŸãã
![](http://habrastorage.org/storage3/8bf/222/c48/8bf222c48db3b19efda9a0a267b70c1d.png)
æ®ãã®ã¹ã¯ãªãŒã³ã·ã§ããã¯ãã¡ã
![](http://habrastorage.org/storage3/7fd/65c/979/7fd65c9795961d1b74ad599080d7ac22.png)
![](http://habrastorage.org/storage3/bba/e27/0af/bbae270af237a97bd1478746dfad0c01.png)
![](http://habrastorage.org/storage3/9a3/f0a/66e/9a3f0a66ec9053e05df7308e1f9e6df3.png)
![](http://habrastorage.org/storage3/3fb/352/131/3fb3521310d547b24f1fb5afd71e21e7.png)
![](http://habrastorage.org/storage3/f36/c73/2fe/f36c732fe5176243ceb7e3742e0b2eaa.png)
![](http://habrastorage.org/storage3/8da/fc4/8d4/8dafc48d47dc09f4e069db0bc0637aff.png)
![](http://habrastorage.org/storage3/f12/256/c41/f12256c41f30209a17236b9ed581d376.png)
![](http://habrastorage.org/storage3/d78/201/337/d782013377bbe0ac8e8d25957c4a545d.png)
ãœãŒã¹ã¯ãã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
-ã¢ãããã£ãã¡ãã·ã¥ãªãã¡ã€ã³ã¡ã³ã -ã»ã«ã¯ããå°ããªéšåã«åå²ããããããã®ããŒã¿ãŒã»ã«ã§ãã«ãŠã³ããããŸã
ãã¹ãŠã®å€æ°ãäžæ¹ã倧ããªã»ã«ã¯ãåºå¥ããããšåšã»ã«ã«é£æ¥ããŸãã
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èšç®æµäœååŠå ¥éæéäœç©æ³
ã©ãã«ããŠãããã¹ãŠã®æ¬ãèŠã€ããããšãã§ããŸãã
æµäœååŠã«ã€ããŠç°¡åã«ïŒéåæ¹çšåŒ
æžç±ïŒ
-Griebel M Dornseifer TæµäœååŠã®æ°å€ã·ãã¥ã¬ãŒã·ã§ã³SIAM 1998
//ç¹ã«ãã®æ¬ã«æ³šç®ããŸããå®éã¯ãã¹ãŠç§ããå§ãŸã£ããã®ã§ããã®ãœãŒã¹ã³ãŒãã¯ç°¡åã«èŠã€ãããŸãããcfdå®è£ ã®ããè¯ã説æã¯ãŸã èŠã€ãããŸããã
-ã³ã³ãã¥ãŒã¿ãŒã°ã©ãã£ãã¯ã¹åãBridson R. Fluid Simulation
-ã¢ã³ããŒãœã³JDJrèšç®æµäœååŠã¢ããªã±ãŒã·ã§ã³ã®åºç€MGH 1995
-ãã£ãŒã«ãºããŒã·ã¥-å éšããã³å€éšãããŒã®æ°å€èšç®2007
-Gretar Tryggvasonæ°æ¶²æ··çžæµã®çŽæ¥æ°å€ã·ãã¥ã¬ãŒã·ã§ã³
-Versteeg HK Malalasekèšç®æµäœååŠå ¥éæéäœç©æ³
ã©ãã«ããŠãããã¹ãŠã®æ¬ãèŠã€ããããšãã§ããŸãã
PS CFDã«ç²ŸéããŠãã人ãããå Žåããœãªã¥ãŒã·ã§ã³ã®é床ãšæ£ç¢ºãã®ç¹ã§ïŒç¹ã«ãµãŒãã§ã¹ã®ã¢ããªã³ã°ã®å ŽåïŒãã®ãããžã§ã¯ããäžç·ã«æ¹åããããšã¯èå³æ·±ãã§ãããã
ç§èªèº«ã¯ã¬ã³ããªã³ã°ãå€å°ã¬ã³ããªã³ã°ã§ããŸãããæ°åŠãšç©çåŠã¯ç§ã®äž»ãªåéã§ã¯ãããŸããã ã³ã¡ã³ãã圹ç«ã€ãã³ããåãã§ãå±ãããŸãã