以åã«å
¬éããã
æçš¿ã§ã空åããã»ã¹ãã¢ãã«åããããã°ã©ã ã§ãªãŒãã³ãœãŒã¹ã©ã€ãã©ãªFreefem ++ããã³NetGenã䜿çšããããšã«ã€ããŠè©±ããŸããã ãã®èšäºã§ã¯ãå
¥åèšèªã®ç°¡åãªç޹ä»ãšããŠãFreefem ++ã®åºæ¬æ©èœãããã«è©³ãã調ã¹ãŸãã ããã«ãããèšèšãããã¢ããªã±ãŒã·ã§ã³ã«å«ãããµãŒãããŒãã£ã®ã³ã³ããŒãã³ããéžæãããšãã«ãéçºè
ããã°ãã°å¿
èŠãšããåææ
å ±ãæäŸãããŸãã
Freefem ++ã®ååŸãšå®è¡
Freefem ++ã¯ãæéèŠçŽ æ³ã«åºã¥ããæ°åŠçåé¡ã解決ããããã«èšèšãããããã°ã©ã ã§ãã Freefem ++ã¯ãWindowsç°å¢ãšLinuxç°å¢ã®äž¡æ¹ã§äœ¿çšã§ããŸãã å
¬åŒãŠã§ããµã€ãã¯
www.freefem.org/ff++ã§ãã ãã®äŸã§ã¯ãFreefem ++ããŒãžã§ã³3.18.-1ã䜿çšãããŸããã å
¬åŒãµã€ãããããŠã³ããŒãããã¢ãŒã«ã€ããã³ãã«ã«ã¯3ã€ã®ããŒãã¢ãžã¥ãŒã«ãããããã®ç®çã¯æ¬¡ã®ãšããã§ãã
- FreeFem ++ãExeã¯ãããã°ã©ã ã®æ¬æ ŒçãªããŒãžã§ã³ã§ãããå¿
èŠã«å¿ããŠããœãªã¥ãŒã·ã§ã³ã®çµæã瀺ãã°ã©ãã£ã«ã«ãŠã£ã³ããŠã衚瀺ããŸãã å¿
èŠã«å¿ããŠãåŒã³åºããšãã«2ã€ã®ããŒãæå®ã§ããŸãã-nowaitã¯ããŠãŒã¶ãŒã«ããå®äºã確èªããã«Freefem ++ãçµäºãã-nw-ãœãªã¥ãŒã·ã§ã³ã®çµæãå«ãã°ã©ãã£ã«ã«ãŠã£ã³ããŠã®è¡šç€ºãæåŠããŸãã
- FreeFem ++-mpi.exe-MPIããŒã¹ã®ã³ã³ãã¥ãŒãã£ã³ã°ã®äžŠååçšã
- FreeFem ++-nw.exe-ã¢ããªã±ãŒã·ã§ã³ããã®åŒã³åºãã§ã¯ãçµæã®ã°ã©ãã£ãã¯åºåãç¡èŠããŸãã 圌ãããã°ã©ã ã§ã®äœæ¥ã®å®äºã®ç¢ºèªãåŸ
ããªãããã«ããã«ã¯ãã³ãã³ãã©ã€ã³ã§-nowaitã¹ã€ãããæå®ããå¿
èŠããããŸãã
ããŒãã¢ãžã¥ãŒã«ã«å ããŠãã¢ãŒã«ã€ãããå¥ã®ããã°ã©ã ã®äžéšãšããŠããã¯ã°ã©ãŠã³ãã§FreeFem ++ãå®è¡ããã«ã¯ã次ã®ãã¡ã€ã«ãå¿
èŠã§ãïŒlibff.dllãlibgcc_s_dw2-1.dllãlibgfortran-3.dllãlibgoto2.dllãlibstdc ++-6.dllã
Freefem ++ããŒãã¢ãžã¥ãŒã«ãèµ·åããããšãã³ãã³ãã©ã€ã³ã«ç¹å¥ãªCã©ã€ã¯ãªããã°ã©ãã³ã°èšèªã§èšè¿°ãããã¹ã¯ãªãããã¡ã€ã«ã®ååãäžããããŸãã ã¹ã¯ãªããã§åºåæŒç®åãŸãã¯ç¹å¥ãªä¿å颿°ã䜿çšããŠãçµæããã¡ã€ã«ã«æžã蟌ãã§ããã«äœ¿çšã§ããŸãã
2Däžè§åœ¢åå²
åã«ãFreefem ++ã䜿çšããŠãå¹³é¢ãæã€èŠçŽ ã§æ§æããã3次å
ã¢ãã«ã®STLèšè¿°ãäœæã§ããããšã瀺ããŸããã ãã®åé¡ã解決ããã«ã¯ãé¢ã®äžè§åœ¢åå²ãå®è¡ããå¿
èŠããããŸãã Freefem ++ã䜿çšããŠãããã©ã®ããã«è¡ãããããèŠãŠã¿ãŸãããã å¢çã§å®çŸ©ããã衚é¢ã®äžè§åœ¢åå²ãå®è¡ããå¿
èŠããããŸãïŒå³1ãåç
§ïŒã
å³ 1.衚é¢é åFreefem ++ã§ã¯ãäžè§æž¬éãå®è¡ããé åã®å¢çããã©ã¡ããªãã¯åœ¢åŒã§èšå®ãããŸãã æ¬¡ã®ã³ãŒããæ€èšããŠãã ããã
int n = 5;
ããŒããŒb0ïŒt = 0,1ïŒ{x = 7 * t; y = 0; }
ããŒããŒb1ïŒt = 0,1ïŒ{x = 7; y = 0 + 6 * t; }
ããŒããŒb2ïŒt = 0,1ïŒ{x = 7-7 * t; y = 6; }
ããŒããŒb3ïŒt = 0,1ïŒ{x = 0; y = 6-6 * t; }
ããŒããŒb4ïŒt = 0,1ïŒ{x = 1 + 2 * t; y = 1.5; }
ããŒããŒb5ïŒt = 0,1ïŒ{x = 5; y = 1.5 + 2 * t; }
ããŒããŒb6ïŒt = 0,1ïŒ{x = 5-4 * t; y = 5.5; }
ããŒããŒb7ïŒt = 0,1ïŒ{x = 1; y = 5.5-4 * t; }
ããŒããŒb8ïŒt = 0,1ïŒ{x = 5; y = 3.5 + 2 * t; }
ããŒããŒb9ïŒt = 0,1ïŒ{x = 3 + 2 * t; y = 1.5; }
ããŒããŒb10ïŒt = 0,1ïŒ{x = 3 + 3 * t; y = 0.5; }
ããŒããŒb11ïŒt = 0,1ïŒ{x = 6; y = 0.5 + 3 * t; }
ããŒããŒb12ïŒt = 0,1ïŒ{x = 6-1 * t; y = 3.5; }
ããŒããŒb13ïŒt = 0,1ïŒ{x = 3; y = 3.5-2 * t; }
ããŒããŒb14ïŒt = 0,1ïŒ{x = 5-2 * t; y = 3.5; }
ããŒããŒb15ïŒt = 0,1ïŒ{x = 3; y = 1.5-1 * t; }
ããããïŒb0ïŒnïŒ+ b1ïŒnïŒ+ b2ïŒnïŒ+ b3ïŒnïŒ+ b4ïŒnïŒ+ b5ïŒnïŒ+ b6ïŒnïŒ+ b7ïŒnïŒ+ b8ïŒnïŒ+ b9ïŒn ïŒ+ b10ïŒnïŒ
+ b11ïŒnïŒ+ b12ïŒnïŒ+ b13ïŒnïŒ+ b14ïŒnïŒ+ b15ïŒnïŒïŒ;
Freefem ++ã¯ãã¹ã«ã©ãŒåã®å€æ°ãå®çŸ©ããŸãïŒintãrealãstringãboolã 倿°å®£èšã¯C ++ã®å Žåãšåæ§ã«å®è¡ããã倿°nã®å Žåãšåæ§ã«ã倿°ãåæåã§ããŸãã
å¢çç·ã¯ããã©ã¡ãŒã¿ãŒåãããè¡ã䜿çšãããã©ã°ã¡ã³ãã«ãã£ãŠå®çŸ©ãããŸãã å¢çã¿ã€ãã¯ããã®ç®çã®ããã®ãã®ã§ãã å¢çãã©ã°ã¡ã³ãã¯ã端ã§ã®ã¿äº€å·®ã§ããŸãã å¢çãã©ã°ã¡ã³ãã®å®£èšã«ã¯ãå¢çã®èå¥åããã©ã¡ãŒã¿ãŒå€æŽã®å¢çïŒãã®å Žåã¯ãã©ã¡ãŒã¿ãŒtïŒãããã³ãã©ã¡ãŒã¿ãŒã«å¿ããŠxããã³y座æšã倿ŽããåŒãå«ãŸããŸãã ãã®äŸã§ã¯ããã¹ãŠã®ãã©ã°ã¡ã³ãã¯ã»ã°ã¡ã³ãã§ãã
èæ
®ãããã³ãŒãã®æåŸã®æŒç®åã¯ããããã§ãããç¹å®ã®ã¿ã€ãã®ããŒã¿ã®ã°ã©ãã£ã«ã«è¡šç€ºãç®çãšããŠããŸãã ãã®å ŽåãããŒããŒã®ãã©ã°ã¡ã³ãã§æ§æãããããŒããŒã衚瀺ãããŸãã å¢çãã©ã°ã¡ã³ãã¯ã+æŒç®åã䜿çšããŠå
±éã®å¢çã«çµåãããŸãã ãã©ã°ã¡ã³ãããšã«ããã©ã°ã¡ã³ããåå²ããããŒãã®æ°ã瀺ããã©ã¡ãŒã¿ãŒã瀺ãããŸãã ãã®ãã©ã¡ãŒã¿ã¯ã以äžã®å¥ã®ã³ã³ããã¹ãã§åã³èæ
®ãããŸãã æå®ãããããããæŒç®åã®çµæã¯å³ã«ç€ºãããŠããŸãã 2ã
å³ 2.ããããæŒç®åã«ãã£ãŠè¡šç€ºããã衚é¢é åã®å¢çç·æ¬¡ã«ãäžè§æž¬éãå®è¡ããã³ãŒãã远å ããŸãã å³ 3ã¯ããã®å®è£
ã®çµæã瀺ããŠããŸãã
ã¡ãã·ã¥Th = buildmeshïŒb0ïŒnïŒ+ b1ïŒnïŒ+ b2ïŒnïŒ+ b3ïŒnïŒ+ b4ïŒnïŒ+ b5ïŒnïŒ+ b6ïŒnïŒ+ b7ïŒnïŒ+ b8ïŒnïŒ+ b9ïŒnïŒ+ b10ïŒnïŒ
+ b11ïŒnïŒ+ b12ïŒnïŒ+ b13ïŒnïŒ+ b14ïŒnïŒ+ b15ïŒnïŒãfixeborder = 1ïŒ;
ããããïŒThïŒ;
å³ 3.äžè§æž¬éã®çµæãã®ã³ãŒãã§ã¯ãã¡ãã·ã¥åã®Th倿°ãå°å
¥ãããŠããŸãã ã¡ãã·ã¥ã¿ã€ãã¯ãäžè§åœ¢åå²ã¡ãã·ã¥ã®ãœãããŠã§ã¢ã¢ãã«ã§ãã ãã®ã¿ã€ãã®ãªããžã§ã¯ããååŸããã«ã¯ããã®å Žåãbuildmesh颿°ã䜿çšããŸãããã®é¢æ°ã«ã¯ãåå²ãããé åã®å¢çãå
¥åã«éä¿¡ãããŸãã buildmesh颿°ã«ã¯ããªãã·ã§ã³ã®fixeborderãã©ã¡ãŒã¿ãŒãæž¡ãããšãã§ããŸãããã®ãã©ã¡ãŒã¿ãŒã䜿çšãããšãã©ã€ã³äžã®ãã€ã³ããäžè§æž¬éããã»ã¹äžã«å€æŽãããªãããšãä¿èšŒãããŸãã 2çªç®ã®æŒç®å-ãããã-ãã®å Žåãå
¥åã§meshã¿ã€ãã®ãªããžã§ã¯ããåãåããã°ã©ãã£ãã¯ã¹ãŠã£ã³ããŠã«èŠçŽ ã®ã°ãªããã衚瀺ããŸãïŒå³3ïŒã
ãã§ã«ç€ºããããã«ãããŒããŒã¯ãããŒããŒã¿ã€ãã®ããŒããŒã®ãã©ã°ã¡ã³ãã®åèšãšããŠè¡šãããŸãã ããã§ã¯ãåãã©ã°ã¡ã³ãã«æå®ããããã©ã¡ãŒã¿ãŒã«ã¯2ã€ã®ç®çããããŸãã ãŸããã°ãªãããæ§ç¯ããããã«å¢çã®æçãããã€ã®éšåã«åå²ãããŠãããã瀺ããŸãã å¢çãã©ã°ã¡ã³ãã®åéšåã¯ã圢æãããã¡ãã·ã¥ã®äžè§åœ¢ã®èŸºã«ãªããŸãã 第äºã«ããã©ã¡ãŒã¿ãŒã®ç¬Šå·ã¯ãäžè§æž¬éãåããé åã瀺ããŸãã ãã©ã¡ãŒã¿ãæ£ã®å Žåãå¢çãã©ã°ã¡ã³ãã®å·ŠåŽã§äžè§åœ¢åå²ãå®è¡ãããŸãã è² ã®å Žåãå¢çã®å³åŽã§äžè§åœ¢åå²ãå®è¡ãããŸãã ãããäŸã§èª¬æããŸãããã äžèšã®ã³ãŒãã§æ¬¡ã®ããã«å¢çãæå®ãããå ŽåïŒb0ïŒnïŒ+ b1ïŒnïŒ+ b2ïŒnïŒ+ b3ïŒnïŒ+ b4ïŒnïŒ+ b5ïŒ-2ïŒ+ b6ïŒnïŒ+ b7ïŒnïŒ + b8ïŒnïŒ+ b9ïŒ-2ïŒ+ b10ïŒnïŒ+ b11ïŒnïŒ+ b12ïŒnïŒ+ b13ïŒ-2ïŒ+ b14ïŒ-2ïŒ+ b15ïŒnïŒãb5ãb9ã b13ãšb14ã¯è² ã®å€ãæã€2ã€ã®ã»ã°ã¡ã³ãã«åå²ãããå³3ã«ç€ºãããã«äžè§åœ¢åå²ãå®è¡ãããŸãã 4ã
å³ 4.空ã®ãµããã¡ã€ã³ã䜿çšããäžè§åœ¢åå²ã¿ã€ãmeshã®å€æ°ãã«ãŒãæŒç®åãããã³ãã¡ã€ã«ãžã®åºåã䜿çšããæäœã瀺ãã³ãŒãã远å ããŸãã
ofstream foutïŒ "triangulation.out"ïŒ;
fout.precisionïŒ14ïŒ;
fout << Th.nt << endl;
forïŒint i = 0; i <Th.nt; i ++ïŒ
{
out
<< Th [i] [0] .x << ""
<< Th [i] [0] .y << ""
<< Th [i] [1] .x << ""
<< Th [i] [1] .y << ""
<< Th [i] [2] .x << ""
<< Th [i] [2] .y << ""
<< endl;
}
ããŒã¿ããã¡ã€ã«ã«åºåããããã«ãofstreamã¿ã€ããæäŸãããŸããããã¯ãC ++ã®fstreamã©ã€ãã©ãªããã®ãã¡ã€ã«åºåã¹ããªãŒã ã«é¡äŒŒããŠããŸãã ãã¡ã€ã«å€æ°ãåæåãããšãã¯ããã¡ã€ã«åãæå®ããå¿
èŠããããŸãã ãã¡ã€ã«ã«ããŒã¿ã远å ããã ãã§ããå Žåã¯ã2çªç®ã®è¿œå åæåãã©ã¡ãŒã¿ãŒãæå®ããå¿
èŠããããŸãã ãã¡ã€ã«å€æ°ã䜿çšããŠãå€ãã®æäœãå®è¡ã§ããŸãã ãã®äŸã§ã¯ãç²ŸåºŠé¢æ°ã¯ãå°æ°ç¹ã®åŸã«è¡šç€ºãããæ¡æ°ãèšå®ããŸãã iostreamã©ã€ãã©ãªã®ãããã¥ã¬ãŒã¿ãŒãšåæ§ã«ãåºå圢åŒãå¶åŸ¡ãã颿°ãããã€ããããŸãã <<æŒç®åã䜿çšãããšãã¹ã«ã©ãŒåã®å€æ°ã®å€ããã¡ã€ã«ã«åºåã§ããŸãã æååã§ã¯ãè¡æ«æåã\ nãã䜿çšãããããã®ç®çã®ããã«ã°ããŒãã«å€æ°endlãåºåã§ããŸãã
äžèšã®ã³ãŒãã«ã¯ãC ++ã®forã¹ããŒãã¡ã³ãã®ããžãã¯ãå®å
šã«ç¹°ãè¿ãforã«ãŒãã¹ããŒãã¡ã³ãããããŸãã ã€ã³ã¯ãªã¡ã³ãæŒç®åãšãã¯ãªã¡ã³ãæŒç®åãåæ§ã®C ++æŒç®åãç¹°ãè¿ããŸãã
Freefem ++ã¯ãã¡ãã·ã¥ã¿ã€ãã«ãã£ãŠè¡šãããèŠçŽ ã®ã¡ãã·ã¥ã®ããŸããŸãªããããã£ãžã®ã¢ã¯ã»ã¹ãæäŸããŸãã ããã§ã¯ãFreefem ++ã2次å
ã¡ãã·ã¥ã¿ã€ãmeshãš3次å
ã¡ãã·ã¥ã¿ã€ãmesh3ãæäœããããã®åãã€ã³ã¿ãŒãã§ãŒã¹ãæäŸããããšã«æ³šæããŠãã ããã ãããã£ãŠãããã§ã¯ãåŸã§mesh3ã«ã€ããŠèª¬æãç¹°ãè¿ããªãããã«ã瀺ãããŠãã2ã€ã®ã¿ã€ãã®ãã®ã€ã³ã¿ãŒãã§ã€ã¹ãæ€èšããŸãã äŸãããããããã«ãntããããã£ã¯ã°ãªããèŠçŽ ïŒã¡ãã·ã¥ã®å Žåã¯äžè§åœ¢ãã¡ãã·ã¥3ã®å Žåã¯åé¢äœïŒã®æ°ãè¿ããŸãã ã°ãªãããã€ã³ãã®æ°-nvããããã£ãå¢çèŠçŽ ã®æ°-nbeãååŸã§ããŸãã
ã¿ã€ãmeshãŸãã¯mesh3ã®ãªããžã§ã¯ãã«ã¯ãè§æ¬åŒ§ "[]"ã«ããã€ã³ããã¯ã¹ä»ããšæ¬åŒ§ "ïŒïŒ"ã«ããã€ã³ããã¯ã¹ä»ãã®2ã€ã®ã¿ã€ãã®ã€ã³ããã¯ã¹ä»ããé©çšã§ããŸãã æåã®ãã®ã¯ãæå®ãããã€ã³ããã¯ã¹ãæã€ã°ãªããèŠçŽ ïŒã¡ãã·ã¥ã®å Žåã¯äžè§åœ¢ãmesh3ã®å Žåã¯åé¢äœïŒãæäŸããŸãã ãããã£ãŠãTh [i]ã¯ã°ãªããèŠçŽ ïŒãã®äŸã§ã¯äžè§åœ¢ïŒã§ããããã®èŠçŽ ã«æäŸãããç¹å®ã®é¢æ°ãé©çšãããŸãã ãïŒïŒã-ã€ã³ããã¯ã¹ä»ãã¯ãæå®ãããã€ã³ããã¯ã¹ãæã€é ç¹ãæäŸããŸãã 座æšãååŸããæäœãé ç¹ã«é©çšã§ããŸãã æ¬¡ã®é¢æ°ãã°ãªããèŠçŽ ã«é©çšãããŸããã€ã³ããã¯ã¹ãä»ããŠèŠçŽ ã®é ç¹ãååŸããã©ãã«ãååŸããŸãã
3Dã¡ãã·ã¥
Freefem ++ã¯ã3Dã¡ãã·ã¥ã®mesh3ã®ã¿ã€ããå®çŸ©ããŸãã ãã®ãããªã°ãªããã¯ãçæé¢æ°ã䜿çšããŠååŸã§ããŸãã ããšãã°ãbuildlayersïŒïŒé¢æ°ã䜿çšãããšãZè»žã«æ²¿ã£ãŠ2Däžè§åœ¢åå²ãåŒã£åŒµã£ãŠ3Dã¡ãã·ã¥ãäœæã§ããŸãããFreefem ++ã«ã¯ç¬èªã®ãžã§ãã¬ãŒã¿ãŒããããŸããã ãããã®ç®çã®ããã«ããµãŒãããŒãã£ã®TetGenãžã§ãã¬ãŒã¿ãŒã䜿çšããïŒå
¬åŒãŠã§ããµã€ã
wias-berlin.de/software/tetgen ïŒã察å¿ããFreefem ++颿°ã¯ãã®ãžã§ãã¬ãŒã¿ãŒãžã®ããã°ã©ã ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŸãã TetGenã¯ãèè
ã®èš±å¯ãªãã«åçšãããžã§ã¯ãã§äœ¿çšããããšã¯ã§ããŸããã ãã ãããã®ãããªã©ã€ã»ã³ã¹ãåé¡ãåŒãèµ·ããå Žåã¯ãå¥ã®ã°ãªãããžã§ãã¬ãŒã¿ãŒã䜿çšã§ããŸãã Freefem ++ã«ã¯ãã¡ãã·ã¥åœ¢åŒã«æºæ ãããã¡ã€ã«ãã3Dã¡ãã·ã¥ãã€ã³ããŒãããæ©èœããããŸãã ã¡ãã·ã¥ãã¡ã€ã«ã®åœ¢åŒã¯æ¬¡ã®ãšããã§ãã
- ãã©ãŒãããããŒãžã§ã³ïŒMeshVersionFormatted 1ïŒãã¹ããŒã¹ãã£ã¡ã³ã·ã§ã³ïŒDimension 3ïŒã«é¢ããæ
å ±ã¯ããã¡ã€ã«ã®å
é ã«èšé²ãããŸãã
MeshVersionFormatted 1
次å
3
- VerticesããŒã¯ãŒãã®åŸã«ââãã°ãªããé ç¹ã®æ°ã瀺ãããXãYãZ座æšãšé ç¹ã©ãã«ã瀺ãããŠããé ç¹ããªã¹ããããŸãã
é ç¹
65
7 5 1.5 0
7 3 1.5 0
7 3 0.5 0
7 5 3.5 0
...
- TetrahedraããŒã¯ãŒãã®åŸã«ââãã°ãªããèŠçŽ ã®æ°ã瀺ããã4ã€ã®é ç¹çªå·ãšã©ãã«ãæžã蟌ãŸããèŠçŽ ããªã¹ããããŸãã
åé¢äœ
185
52 56 49 50 0
3 18 14 61 0
47 64 57 54 0
...
- TrianglesããŒã¯ãŒãã®åŸã«ââãå¢çäžè§åœ¢ã®æ°ãèšé²ãããŸãã åäžè§åœ¢ã«ã€ããŠããããã®äžè§åœ¢ã®é ç¹ã§ããã°ãªããããŒãã®é ç¹ã®çªå·ããªã¹ããããå¢çã©ãã«ã瀺ãããŸãã
äžè§åœ¢
96
2 3 8 2
2 8 1 2
4 1 7 2
...
- ãã¡ã€ã«ã¯EndããŒã¯ãŒãã§çµäºããŸãã
ã¡ãã·ã¥ãã¡ã€ã«ã¯ããã¡ã€ã«åãæå®ããreadmesh3颿°ã䜿çšããŠã€ã³ããŒããããŸãã
mesh3 Th;
Th = readmesh3ïŒ "example3d.mesh"ïŒ;
ããããïŒThïŒ;
ã¡ãã·ã¥ãã¡ã€ã«ããã¡ãã·ã¥ãã€ã³ããŒãããã«ã¯ãåé¢äœã®é ç¹çªå·ã®é åºãéèŠã§ãã Freefem ++ãœãŒã¹ã³ãŒãã®Mesh3dn.hppãã¡ã€ã«ã«ã¯ã枬å®ïŒïŒåé¢äœã®äœç©ãèšç®ããã¡ãœãããæã€DataTetæ§é ããããŸãã ã¡ãã·ã¥ãã¡ã€ã«å
ã®åé¢äœã®é ç¹ãèšç®ãããããªã¥ãŒã ãè² ã«ãªãããã«ç¶ãå ŽåãFreefem ++ã¯å€±æããŸãã ãã®ããããã®ç¶æ³ãçºçããªãããã«ãã¡ãã·ã¥ãã¡ã€ã«ã®é ç¹ããªã¹ãããå¿
èŠããããŸãã
å¿
èŠã«å¿ããŠããããã颿°ã䜿çšããŠã°ã©ãã£ãã¯ãŠã£ã³ããŠã«ã°ãªããã衚瀺ã§ããŸãïŒå³5ãåç
§ïŒã
å³ 5.ããããæ©èœãåãã3Dã¡ãã·ã¥è¡šç€ºåŸ®åæ¹çšåŒç³»ã®è§£
Freefem ++ã®äž»ãªç®çã¯ãæéèŠçŽ æ³ã䜿çšããŠååŸ®åæ¹çšåŒç³»ãè§£ãããšã§ãã ãã®ãããæ¹çšåŒç³»ã«å«ãŸãã颿°ã¯æéèŠçŽ ã°ãªããã§æ±ºå®ãããŸãã Freefem ++ã§ã¯ãFE空éïŒæéèŠçŽ ç©ºéïŒã®ã¿ã€ããå€å¥ã§ããŸãã 空éã®çš®é¡ã«å¿ããŠãç¹å®ã®ç©ºéã®æ©èœã®ãªããžã§ã¯ããå°å
¥ãããŸãã äŸãã°
ãã§ã¹ããŒã¹VhïŒThãP23dïŒ;
Vh f = x ^ 2 + y ^ 2 + z ^ 2;
ããã§ãVhã¯ã°ãªããThäžã®ç©ºéã®ã¿ã€ããfã¯ãã®ç©ºéäžã®é¢æ°ã§ãã
æéèŠçŽ ç©ºéã®åã宣èšãããšããèŠçŽ ã®åºç€ã瀺ãããŸãã P03d-åºåç宿°ãP13d-åºåçç·åœ¢ãP23d-åºåç2次ãªã©ã®å€ãåãããšãã§ããŸãã å³ å³6ã¯ã2次åºåºãæã€äŸã®é¢æ°ã瀺ããŠããŸãã 7-ç·åœ¢ããŒã¹ãšé¡èãªæªã¿ãæã€åã颿°ã
å³ 6.äºæ¬¡åºåºããã€æéèŠçŽ é¢æ°
å³ 7.ç·åœ¢åºåºãæã€æéèŠçŽ é¢æ°
Freefem ++ã®ååŸ®åæ¹çšåŒç³»ãè§£ãã«ã¯ãåé¡ã®å€åã¹ããŒãã¡ã³ããæå®ãããåé¡ã解決ããããšãç®çã®é¢æ°ã圢æãããŸãã æ¬¡ã®ã¹ã¯ãªããã«åºã¥ããŠãå€åå®åŒåããã³ãã®ä»ã®ããã°ã©ãã³ã°èŠçŽ ã®èšè¿°æ¹æ³ãæ€èšããŸãã
mesh3 Th = readmesh3ïŒ "example3d.mesh"ïŒ;
ãã§ã¹ããŒã¹VVhïŒThã[P2ãP2ãP2ãP1]ïŒ;
ãã§ã¹ããŒã¹VhïŒThãP23dïŒ;
ãã¯ãGradïŒuïŒ[dxïŒuïŒãdyïŒuïŒãdzïŒuïŒ] //
ãã¯ãdivïŒu1ãu2ãu3ïŒïŒdxïŒu1ïŒ+ dyïŒu2ïŒ+ dzïŒu3ïŒïŒ//
VVh [u1ãu2ãu3ãp];
VVh [v1ãv2ãv3ãq];
func fup =ïŒ1-xïŒ*ïŒxïŒ* y *ïŒ1-yïŒ* 16;
ProbïŒ[u1ãu2ãu3ãp]ã[v1ãv2ãv3ãq]ïŒ=ãè§£ããŸã
int3dïŒThãqforder = 3ïŒïŒGradïŒu1ïŒ '* GradïŒv1ïŒ+ GradïŒu2ïŒ' * GradïŒv2ïŒ+ GradïŒu3ïŒ '* GradïŒv3ïŒ
-divïŒu1ãu2ãu3ïŒ* q-divïŒv1ãv2ãv3ïŒ* p + 1e-10 * q * pïŒ
+ãªã³ïŒ5ãu1 = 0ãu2 = 0ãu3 = 0ïŒ
+ onïŒ1ãu1 = fupãu2 = 0ãu3 = 0ïŒ;
ããããïŒpãnbiso = 10ïŒ;
ãã®äŸã§ã¯ãæ¬¡ã®æ§æãæç€ºãããŠããŸãã ãã¯ãã«å Žã«ã¯æéèŠçŽ ç©ºéãæå®ã§ããŸãã ãã®äŸã§ã¯ã空éVVhã¯4ã€ã®æåãæã€ãã¯ãã«ãã£ãŒã«ãã«å¯ŸããŠæå®ãããVhã¯ã¹ã«ã©ãŒãã£ãŒã«ãã«å¯ŸããŠæå®ãããŸãã
Freefem ++ã¯ãmacroããŒã¯ãŒãã§å§ãŸããã¯ãã宣èšããæ©èœãæäŸããŸãã ãã¯ã眮æäžã«ããã¯ãåã¯ãã¯ãæ¬äœã«çœ®ãæããããä»®ãã©ã¡ãŒã¿ãŒãå®éã®ãã©ã¡ãŒã¿ãŒã«çœ®ãæããããŸãã ãã®äŸã«ã¯ã2ã€ã®ãã¯ãïŒGradïŒuïŒãšdivïŒu1ãu2ãu3ïŒããããŸãã ãããã®ãã¯ãã¯ç¹å¥ãªè¡šèšdxãduãdzã䜿çšããããããã®åº§æšã§å·®åã瀺ããŸãã
颿°ã¯funcããŒã¯ãŒãã䜿çšããŠå®£èšãããŸãã ããã«ã颿°ã®åŒæ°ãäºçŽèªã§ããxãyãzã§ç€ºãããŠããå Žåãä»®ãã©ã¡ãŒã¿ãŒãæå®ããå¿
èŠã¯ãããŸããã
ãœã«ããŒæ§é ã¯ãåé¡ã®å€åå®åŒåãšè§£ãèšé²ããããã«äœ¿çšãããŸãã ã¿ã¹ã¯åã®åŸã«ãäžæãªé¢æ°ãšãã¹ã颿°ããªã¹ããããŸãã ãã®å ŽåãProbåé¡ã«ã¯ã空éVVhã§å®çŸ©ããã2ã€ã®ãã¯ãã«é¢æ°ããããŸãã[u1ãu2ãu3ãp]-æãŸãããã®ãš[v1ãv2ãv3ãq]-詊è¡ã®ãã®ã çå·ã®åŸã«ãå€åå®åŒåã®åŒãèšè¿°ãããŸãã ãã®æç¹ã§ã®äŸã«ã¯ã2ã€ã®ç¹å®ã®Freefem ++ã³ã³ã¹ãã©ã¯ãããããŸãã 3次å
ç©åãèšé²ããã«ã¯ãç¹å¥ãªint3dæ§é ã䜿çšããŸãããã®æ§é ã§ã¯ãç©å空éïŒãã®å Žåã¯ã°ãªããThïŒãæå®ãããŸãã ããã«ãããã§ã¯ã¢ãã¹ãããã£ã§ç€ºãããè¡å転眮æŒç®åã䜿çšãããŸãã å€åå®åŒåã®çµããã«ãå¢çæ¡ä»¶ãè§£ææ§é ã«æžã蟌ãŸããŸãã å¢çæ¡ä»¶ã¯ç¹å¥ãªåèªonã§ç€ºããããã®åŸãã¯ã©ã¹mesh3ã®ãªããžã§ã¯ãããã®é åã«å¯Ÿå¿ããã©ãã«ãæ¬åŒ§ã§ç€ºãããŸãã ãããã®ã©ãã«ãã¡ãã·ã¥ãã¡ã€ã«ã«æžãèŸŒãæ¹æ³ã«ã€ããŠã¯ãäžèšã§èª¬æããŸããã ãªãŒãžã§ã³ã«ã¯ãç®çã®ãã£ãŒã«ãã®ã³ã³ããŒãã³ãããªã¹ããããããããã«å¶çŽãæžã蟌ãŸããŸãã å¶çŽã¯ä»»æã®åŒã§ãã ãã®äŸã§ã¯ãæ°å€ãšfup颿°ãå¶çŽãšããŠæå®ãããŠããŸãã
颿°plotã䜿çšããŠãã£ãŒã«ãã³ã³ããŒãã³ããåºåããããšãå³3ã«ç€ºãããã«ãçå€é¢ãæã€å®æããèŠçŽ ç©ºéãã°ã©ãã£ãã¯ãŠã£ã³ããŠã«è¡šç€ºãããŸãã 8.çå€é¢ã®æ°ã¯ãã¹ã¯ãªããã®nbisoãã©ã¡ãŒã¿ãŒã§èšå®ããã°ã©ãã£ãã¯ãŠã£ã³ããŠã§æåã§å€æŽã§ããŸãã
å³ 8.決å®ã®çµæçµè«
Freefem ++ã¯ãæ°åŠçåé¡ã解決ããããã®åŒ·åãªããŒã«ã§ãããåžè²©ã®ã¢ããªã±ãŒã·ã§ã³ãå«ãã¢ããªã±ãŒã·ã§ã³ã®éçºã«äœ¿çšã§ããŸãã åŸè
ã®å ŽåãFreefem ++ã®äŸ¿å©ãªæ©èœã¯ãæéèŠçŽ ã®3Dã¡ãã·ã¥ãã€ã³ããŒãã§ããããšã§ããããã«ããããµãŒãããŒãã£ã®ã¡ãã·ã¥ãžã§ãã¬ãŒã¿ãŒã䜿çšã§ããŸãã