๐งฒ ์๊ธฐ์ฅ ์๋ฎฌ๋ ์ดํฐ (FEM Based Magnetic Field Simulator)
๐ ๏ธ ์ด ํ๋ก์ ํธ์ ์ฌ์ฉ๋ ์ธ์ด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๋ณธ ํ๋ก์ ํธ๋ ๊ณ ์ฑ๋ฅ GPU ์ฐ์ฐ๊ณผ ์ธํฐ๋ํฐ๋ธํ 3D ์๊ฐํ๋ฅผ ์ํด ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ํ์ฉํฉ๋๋ค.
| ์ธ์ด |
๋ผ์ด๋ธ๋ฌ๋ฆฌ |
์ฉ๋ |
๊ณต์ ๋ฌธ์ url |
| Python |
CuPy |
GPU ๊ธฐ๋ฐ ๋ณ๋ ฌ ์ปดํจํ
๊ตฌํ |
CuPy |
| ย |
NumPy |
GPU ์ฐ์ฐ ๊ฒฐ๊ณผ ํ์ฒ๋ฆฌ |
Numpy |
| ย |
Flask |
๋ก์ปฌ ์น ์๋ฒ ๊ตฌ์ถ ๋ฐ ์๊ธฐ์ฅ ๋ฐ์ดํฐ ์ํธ์์ฉ |
Flask |
| JavaScript |
Three.js |
์น ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฐ ์ค์๊ฐ ์๊ธฐ์ฅ ์๊ฐํ |
Three.js |
โ๋์ ๋ณด์ด์ง ์๋ ์๊ธฐ์ฅ, ์ด์ ์ง์ ์ค๊ณํ๊ณ 3D๋ก ํ์ธํ์ธ์!โ
๋ณธ ํ๋ก์ ํธ๋ ์ ํ์์๋ฒ(FEM) ์ ํ์ฉํ์ฌ ์์์ ์ ๋ฅ ๋ฐฐ์น์ ๋ฐ๋ฅธ ์๊ธฐ์ฅ์ ์ธ๊ธฐ์ ๋ฐฉํฅ์ ๊ณ์ฐํ๊ณ ์๊ฐํํ๋ ์๋ฎฌ๋ ์ดํฐ์
๋๋ค.
์ฐ๊ตฌ ๋๋ ๊ต์ก ๋ชฉ์ ์ด๋ผ๋ฉด ๋ง์๊ป ์ฌ์ฉํ์ธ์.(์ฝ๋ ๋ณํ ๊ฐ๋ฅ, 2์ฐจ ๋ฐฐํฌ ๋ถ๊ฐ) ๊ณต์ ํ์๋ ค๋ฉด ์ด ํ์ด์ง์ url์ ๊ณต์ ํ์ธ์~!
COMSOL์ด ๋๋ฌด ๋น์ธ์ ๋ถ๋ด๋๋ ํ์๋ค์ ์ํด ๋ง๋ค์์ต๋๋ค! ๋ฌด๋ฃ๋ก ์๊ธฐ์ฅ ์๋ฎฌ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํด๋ณด์ธ์.
๊ทธ๋ํฝ ์นด๋ ์์ด๋ Google Colab์์ ์คํ ๊ฐ๋ฅํด์!
ํ๋ก์ ํธ ์๊ฐ ๋ฐ ํํ ๋ฆฌ์ผ Youtube ์์
์๋ฎฌ๋ ์ดํฐ์ ์๋ ๋ชจ์ต๊ณผ ์ฌ์ฉ๋ฒ์ ์์์ผ๋ก ํ์ธํด ๋ณด์ธ์!
์ด๋ฏธ์ง๋ฅผ ๋๋ฅด๋ฉด Youtube ์์์ ๋ณผ ์ ์์ต๋๋ค.
| ๐ฅ ์ปดํจํฐ๋ก ์ง์ ์คํํ๋ ๋ฐฉ๋ฒ |
๐ป Google Colab์์ ์คํํ๋ ๋ฐฉ๋ฒ |
 |
 |
| ์๊ธฐ์ฅ ์๋ฎฌ๋ ์ด์
์ ํต์ฌ ๊ธฐ๋ฅ ์๊ฐ |
GPU๊ฐ ์์ด๋ ์น์์ ๋ฐ๋ก ์คํํ๋ ๋ฐฉ๋ฒ |
** โจ ํต์ฌ ๊ธฐ๋ฅ**
- 3D ๋ฒกํฐ ์๊ฐํ: ๊ฐ ์ง์ ์ ์๊ธฐ์ฅ ๋ฐฉํฅ๊ณผ ์ธ๊ธฐ๋ฅผ 3D ํ์ดํ๋ก ์ฆ์ ํ์ธ (6๊ฐ ์ด๋ก ๊ตฌ์ฑ๋
.csv ํ์ผ์ด๋ฉด ๋ค ์๊ฐํ๋ผ์!)
- ๋ค์ํ ์ ๋ฅ ์ค์ : ์ ๋ฅ์ ํํ(์ ๋๋ ์ ๋ถ), ์ธ๊ธฐ(Ampere), ์์น(3D Vector)๋ฅผ ์์ ๋กญ๊ฒ ๋ฐฐ์น
- ์ ๋ฐ๋ ์กฐ์ : Mesh Dense์ Vector Dense ๋ณ์๋ฅผ ํตํด ์๋ฎฌ๋ ์ด์
ํด์๋ ์กฐ์
- ๋ฐ์ดํฐ ๋ด๋ณด๋ด๊ธฐ: ๊ฒฐ๊ณผ๊ฐ์ Microsoft Excel ๋ฑ์์ ๋ถ์ ๊ฐ๋ฅํ
.csv ํ์ผ๋ก ์ ์ฅ
๐ ์ปดํจํฐ์์ ์ง์ ๋๋ฆฌ์๋ ค๋ฉด NVIDIA ๊ทธ๋ํฝ์นด๋๊ฐ ํ์ํด์! ์์ผ์๋ค๋ฉด Google Colab์์ ์คํํ์ธ์~
์ด ํ๋ก๊ทธ๋จ์ ๊ณ ์ฑ๋ฅ ์ฐ์ฐ์ ์ํด NVIDIA GPU(CUDA)๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ๊ทธ๋ํฝ์นด๋: NVIDIA ๊ทธ๋ํฝ์นด๋ ํ์ (CUDA ์ฐ์ฐ ์ง์)
- run.bat ํ์ผ์ ์คํํด ์๋ ์ค์น:
run.bat ํ์ผ ์คํ ์ ๊ฐ์ ํ๊ฒฝ๊ณผ ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋์ผ๋ก ์ค์น๋ฉ๋๋ค.
- ์ ์ปดํจํฐ ํ๊ฒฝ: CUDA 13.1, CuPy 13.6.0, NumPy 2.4.0 (๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ จ ๋ฌธ์ ๊ฐ ์๊ฒผ๋ค๋ฉด, ์ด๊ฒ๊ณผ ๋น์ทํ ๋ฒ์ ๋ค์ ์ค์นํด๋ณด์ธ์.)
๐ GPU๊ฐ ์๋ ๊ฒฝ์ฐ ์ฌ์ฉ ๋ฐฉ๋ฒ(์ถํ๋๋ ค์! ๋ถ์์๋ค์!)
0. ํ๋ก๊ทธ๋จ ๋ค์ด๋ก๋
- ์ฌ๊ธฐ๋ฅผ ๋๋ฌ ZIP ์์ถ ํ์ผ์ ๋ค์ด๋ก๋ํ์ธ์.
- ์์ถ ํด์ ํ์๊ณ ํด๋์ ๋ค์ด๊ฐ์ธ์.
1. ํ๋ก๊ทธ๋จ ์คํ
run.bat ํ์ผ์ ์คํํ๋ฉด ํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ๊ณ ๋ก์ปฌ ์๋ฒ๊ฐ ๊ตฌ๋๋ฉ๋๋ค. โ์ ์ ์๋ ๊ฒ์์โ ๊ฒฝ๊ณ ๋ ์ ๊ฐ ๋์ด ์์ด์ ์ ์์๋ช
๋ฐฐํฌ๋ฅผ ๋ชป ํด์ ๊ทธ๋ฐ๊ฑฐ์์. ์
์ฑ ๋ฐ์ด๋ฌ์ค๋ ์์ต๋๋ค. (์ฒ์ ๊ฐ๋์๋ ์๊ฐ์ด ๊ฑธ๋ ค์.)
- ์๋์ผ๋ก ์ธํฐํ์ด์ค๊ฐ ์ผ์ง์ง ์๋๋ค๋ฉด ์น ๋ธ๋ผ์ฐ์ ์ 127.0.0.1:5000์ ์
๋ ฅํ์ธ์.
2. ์๋ฎฌ๋ ์ด์
์ค์
- Step 0: ์๋ฎฌ๋ ์ด์
๊ณต๊ฐ ํฌ๊ธฐ์ Mesh Dense(๊ฒฉ์ ๋ฐ๋)๋ฅผ ์ค์ ํฉ๋๋ค.
- Step 1: ์ ๋ฅ ์ ๋ณด๋ฅผ ์
๋ ฅ(ํํ, ์ธ๊ธฐ, ์ขํ)ํ๊ณ Request ๋ฒํผ์ ๋๋ฌ ๋ชฉ๋ก์ ์ถ๊ฐํฉ๋๋ค.
- Step 2: ๋ชจ๋ ์ค์ ์ด ์๋ฃ๋๋ฉด Start Simulation์ ํด๋ฆญํฉ๋๋ค. CuPy Library๋ฅผ ์ด์ฉํด GPU ๊ณ์ฐ์ด ์์๋ฉ๋๋ค.
3. ๊ฒฐ๊ณผ ํ์ธ ๋ฐ ์ข
๋ฃ
- ๊ณ์ฐ์ด ๋๋๋ฉด Three.js๋ก ๋ ๋๋ง๋ 3D ์๊ธฐ์ฅ ๋ฒกํฐ๊ฐ ํ์๋ฉ๋๋ค.
- Download as .csv ๋ฒํผ์ ๋๋ฌ ๋ฐ์ดํฐ๋ฅผ
.csv ํ์ผ๋ก ์ ์ฅํ ์ ์์ต๋๋ค.
- Simulation Turn Off ๋ฒํผ์ ๋๋ฌ ํ๋ก๊ทธ๋จ ์ข
๋ฃํ์ธ์. ์ด ๋ฒํผ์ ๋๋ฌ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค๋ฅผ ์์ ํ ์ข
๋ฃํ ์ ์์ต๋๋ค.
- Go back to Simulation settings ๋ฒํผ์ ๋๋ฌ ์๋ฎฌ๋ ์ด์
์ค์ ํ๋ฉด์ผ๋ก ๋์๊ฐ์ธ์. ์๋ฎฌ๋ ์ด์
๊ณต๊ฐ ์ ์์ ์ ๋ฅ ์ ๋ณด ์
๋ ฅ์ ์ฒ์๋ถํฐ ํ์ค ์ ์์ต๋๋ค.
๐ค ๋์์ด ํ์ํด์!
๋ณธ ํ๋ก์ ํธ๋ ํ์๋ค์ด ๋ฌด๋ฃ๋ก ์๊ธฐ์ฅ์ ์ฐ๊ตฌํ ํ๋ฌธ์ ๋๊ตฌ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ๊ฐ๋ฐ๋ 1์ธ ํ๋ก์ ํธ์
๋๋ค.
์๋ ์ด์๋ค์ ๋ํ ํผ๋๋ฐฑ๊ณผ ๋์์ ํ์ํฉ๋๋ค!
- ์๊ธฐ๋ ฅ์ ์๊ฐํ: ์ง์ ๋ถํ ํ์ดํ ๋์ ์๊ธฐ๋ ฅ์ ์ ๋งค๋๋ฌ์ด ์ (Streamlines)์ผ๋ก ์ฐ๊ฒฐํ๋ ๊ธฐ๋ฅ.
- ๋ฐฐํฌ ์ต์ ํ: PyInstaller ์ฌ์ฉ ์ CUDA DLL ์ธ์ ์ค๋ฅ ํด๊ฒฐ ๋ฐ ๋จ์ผ
.exe ํจํค์ง.
- ์๊ฐํ ์ฑ๋ฅ: ํน์ ์์ญ๋ง ์ ํ์ ์ผ๋ก ๋ ๋๋งํ์ฌ ๋ฒกํฐ ๊ฒน์นจ ํ์ ํด์.
- ์น ์๋ฒํ: ์ ์ฌ์ ๊ธฐ๊ธฐ์์๋ ์ ์ ๊ฐ๋ฅํ GPU ํด๋ผ์ฐ๋ ์๋ฒ ๊ตฌ์ถ. (ํ์ฌ Google Colab์ผ๋ก ์ผ๋ถ ํด๊ฒฐ๋จ)
- UI/UX ๊ฐ์ : ์๋ฎฌ๋ ์ด์
์๊ฐํ ํ์ด์ง์ ์ฐฝ ๋ซ๊ธฐ(
window.close())๊ฐ ์๋๋ ๋ฒ๊ทธ. (Chrome์ ๋ณด์ ๋ฐฉ์นจ ๋ณ๊ฒฝ์ผ๋ก ์๋ก์ด ๋ฐฉ๋ฒ ํ์)
- ๋์ ๋ฉ์ ํ ๋น: ์ฌ์ฉ์๊ฐ ๊ด์ฌ ์๋ ํน์ ์์ญ์ ๋ ์ธ๋ฐํ๊ฒ ์๋ฎฌ๋ ์ด์
ํ๋ ๊ธฐ๋ฅ.
๐ ๋ผ์ด์ ์ค (License)
๋ณธ ํ๋ก๊ทธ๋จ์ ๊ต์ก ๋ฐ ์ฐ๊ตฌ ๋ชฉ์ ์ผ๋ก ๋๊ตฌ๋ ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ณ๋์ ํ๊ฐ ์์ด ์์
์ด๋ ๊ฐ์ธ ๊ณต๋ถ์ ํ์ฉํด ๋ณด์ธ์! ๐
2์ฐจ ๋ฐฐํฌ๋ ๊ธ์ง๋ฉ๋๋ค.
๊ฐ๋ฐ์์๊ฒ ํผ๋๋ฐฑ์ ์ฃผ๊ณ ์ถ๊ฑฐ๋ ๋ฌธ์๊ฐ ์๋ค๋ฉด github ๋ฌธ์๋ ์ด๋ฉ์ผ(lcp020620@kaist.ac.kr)์ ๋จ๊ฒจ์ฃผ์ธ์.