1. MHD ํํ
1. MHD ํํ¶
ํ์ต ๋ชฉํ¶
- ์ด์ MHD ์ด๋๋ ๋ฐฉ์ ์์ผ๋ก๋ถํฐ MHD ํ ๊ท ํ ๋ฐฉ์ ์ ์ ๋
- ํ ๊ท ํ์ ๊ฒฐ๊ณผ ์ดํด: ํ๋ญ์ค ํ๋ฉด ์์์ ์๋ ฅ ์ผ์
- 1์ฐจ์ ํํ ๋ถ์: ฮธ-pinch, Z-pinch, screw pinch ๊ตฌ์ฑ
- ์ถ๋์นญ ํํ์ ๋ํ Grad-Shafranov ๋ฐฉ์ ์ ์์ํ ๋ฐ ํ์ด
- ์์ ์ธ์ q ๊ณ์ฐ ๋ฐ ์์ ์ฑ์ ๋ํ ์๋ฏธ ์ดํด
- ํ๋ผ์ฆ๋ง ๋ฒ ํ ๊ณ์ฐ ๋ฐ ์ด์ ํ๊ณ ์ดํด
- ๊ฐ๋จํ ํํ ๊ตฌ์ฑ์ ๋ํ ์์น ํด ๊ตฌํ
1. MHD ํํ ์๊ฐ¶
์๊ธฐ์ ์ฒด์ญํ ํํ์ ๋ชจ๋ ํ์ด ๊ท ํ์ ์ด๋ฃจ๊ณ ์์ง ๊ฐ์๋๊ฐ ์๋ ์ํ ํ๋ผ์ฆ๋ง์ ์ ์ ์ํ ๊ตฌ์ฑ์ ์ค๋ช ํฉ๋๋ค. ํํ์ ์ดํดํ๋ ๊ฒ์ ํต์ตํฉ ์๋์ง ์ฐ๊ตฌ, ์ฒ์ฒด๋ฌผ๋ฆฌํ ํ๋ผ์ฆ๋ง ๋ฌผ๋ฆฌํ, ๊ทธ๋ฆฌ๊ณ ๊ฐํ ํ๋ผ์ฆ๋ง์ ๊ด๋ จ๋ ๋ชจ๋ ์์ฉ์ ๊ธฐ๋ณธ์ ์ ๋๋ค.
MHD ํํ์ ๋ค์์ ๋ง์กฑํฉ๋๋ค:
โ/โt = 0 (์๊ฐ ๋
๋ฆฝ)
v = 0 (์ ์ง ํ๋ผ์ฆ๋ง)
ํํ ์ํ๋ ๋ค์ ์ฌ์ด์ ๊ท ํ์ ์ํด ์ง๋ฐฐ๋ฉ๋๋ค: - ํ๋ผ์ฆ๋ง ์๋ ฅ ๊ตฌ๋ฐฐ ํ: โp (์ธ๋ถ๋ก ๋ฐ์ด๋) - ์๊ธฐ ์ฅ๋ ฅ: (Bยทโ)B/ฮผโ (์๊ธฐ์ฅ์ ์ ๋ฐ๋ผ ๋น๊น) - ์๊ธฐ ์๋ ฅ ๊ตฌ๋ฐฐ: -โ(Bยฒ/2ฮผโ) (๋์ ์ฅ์์ ๋ฎ์ ์ฅ์ผ๋ก ๋ฐ์ด๋)
ํ ๊ท ํ ๋ฐฉ์ ์์ ๋ชจ๋ ํํ ๊ณ์ฐ์ ๊ธฐ์ด์ ๋๋ค.
2. ํ ๊ท ํ ๋ฐฉ์ ์ ์ ๋¶
2.1 ์ด์ MHD ์ด๋๋ ๋ฐฉ์ ์์์ ์์¶
์ด์ MHD ์ด๋๋ ๋ฐฉ์ ์์:
$$ \rho\frac{D\mathbf{v}}{Dt} = -\nabla p + \mathbf{J}\times\mathbf{B} $$
ํํ์์ ์ข๋ณ์ ์ฌ๋ผ์ง๋๋ค (๊ฐ์๋ ์์, ์ ์ง ํ๋ผ์ฆ๋ง):
$$ \nabla p = \mathbf{J}\times\mathbf{B} $$
์ด๊ฒ์ด ๊ธฐ๋ณธ MHD ํํ ๋ฐฉ์ ์์ ๋๋ค.
2.2 ์๊ธฐ์ฅ์ผ๋ก ํํ¶
์ํ๋ฅด ๋ฒ์น ์ฌ์ฉ (๋ณ์ ์ ๋ฅ ๋ฌด์):
$$ \mathbf{J} = \frac{1}{\mu_0}\nabla\times\mathbf{B} $$
ํ ๊ท ํ์ ๋ค์๊ณผ ๊ฐ์ด ๋ฉ๋๋ค:
$$ \nabla p = \frac{1}{\mu_0}(\nabla\times\mathbf{B})\times\mathbf{B} $$
๋ฒกํฐ ํญ๋ฑ์ ์ฌ์ฉ:
$$ (\nabla\times\mathbf{B})\times\mathbf{B} = (\mathbf{B}\cdot\nabla)\mathbf{B} - \nabla\left(\frac{B^2}{2}\right) $$
๋ค์์ ์ป์ต๋๋ค:
$$ \nabla p = \frac{1}{\mu_0}\left[(\mathbf{B}\cdot\nabla)\mathbf{B} - \nabla\left(\frac{B^2}{2}\right)\right] $$
์ฌ๋ฐฐ์ด:
$$ \nabla\left(p + \frac{B^2}{2\mu_0}\right) = \frac{1}{\mu_0}(\mathbf{B}\cdot\nabla)\mathbf{B} $$
์ข๋ณ์ ์ ์ฒด ์๋ ฅ (์ด๋ + ์๊ธฐ)์ ๊ตฌ๋ฐฐ์ ๋๋ค:
$$ p_{total} = p + \frac{B^2}{2\mu_0} $$
์ฐ๋ณ์ ์๊ธฐ์ฅ์ ์ ๋ฐ๋ฅธ ์๊ธฐ ์ฅ๋ ฅ์ ๋ํ๋ ๋๋ค.
2.3 ๋ฌผ๋ฆฌ์ ํด์¶
ํ ๊ท ํ ์ฑ๋ถ:
=======================
1. ์๋ ฅ ๊ตฌ๋ฐฐ: โp
- ๋์ ์๋ ฅ์์ ๋ฎ์ ์๋ ฅ์ผ๋ก ๋ฐ์ด๋
- ๋ฑ๋ฐฉ์ฑ ํ
2. ์๊ธฐ ์๋ ฅ: -โ(Bยฒ/2ฮผโ)
- ๋์ ์ฅ์์ ๋ฎ์ ์ฅ์ผ๋ก ๋ฐ์ด๋
- B์ ์์ง์ผ๋ก ์์ฉ
3. ์๊ธฐ ์ฅ๋ ฅ: (Bยทโ)B/ฮผโ
- ๊ตฝ์ ์๊ธฐ์ฅ์ ์ ๋ฐ๋ผ ๋น๊น
- ๋์ด๋ ๊ณ ๋ฌด์ค์ฒ๋ผ
์์ง ํ: โp + โ(Bยฒ/2ฮผโ) - (Bยทโ)B/ฮผโ = 0
3. ํ ๊ท ํ์ ๊ฒฐ๊ณผ¶
3.1 ํ๋ญ์ค ํ๋ฉด ์์์ ์๋ ฅ ์ผ์ ¶
ํ ๊ท ํ ๋ฐฉ์ ์์ B์ ๋ด์ ํ๋ฉด:
$$ \mathbf{B}\cdot\nabla p = \mathbf{B}\cdot(\mathbf{J}\times\mathbf{B}) = 0 $$
์ด๋ ๋ค์์ ์๋ฏธํฉ๋๋ค:
$$ \mathbf{B}\cdot\nabla p = 0 $$
๊ฒฐ๊ณผ: ์๋ ฅ์ ์๊ธฐ์ฅ์ ์ ๋ฐ๋ผ ์ผ์ ํฉ๋๋ค. ํ ๋ก์ด๋ฌ ๊ตฌ์ฑ์์ ์๊ธฐ์ฅ์ ์ ์ค์ฒฉ๋ ํ๋ญ์ค ํ๋ฉด ์์ ๋์ฌ์์ผ๋ฏ๋ก ์๋ ฅ์ ๊ฐ ํ๋ญ์ค ํ๋ฉด์์ ์ผ์ ํฉ๋๋ค.
3.2 ์๋ ฅ ๊ตฌ๋ฐฐ์ ์์ง์ธ ์ ๋ฅ¶
ํ ๊ท ํ ๋ฐฉ์ ์์ J์ ๋ด์ ํ๋ฉด:
$$ \mathbf{J}\cdot\nabla p = \mathbf{J}\cdot(\mathbf{J}\times\mathbf{B}) = 0 $$
์ด๋ ๋ค์์ ์๋ฏธํฉ๋๋ค:
$$ \mathbf{J}\cdot\nabla p = 0 $$
๊ฒฐ๊ณผ: ์ ๋ฅ๋ ์๋ ฅ ๊ตฌ๋ฐฐ์ ์์ง์ผ๋ก ํ๋ฅด๋ฏ๋ก, ์ ๋ฅ๋ ํ๋ญ์ค ํ๋ฉด ์์ ๋์ ๋๋ค.
3.3 ํ๋ญ์ค ํ๋ฉด ์ขํ๊ณ¶
์์ ๋ ๊ฒฐ๊ณผ๋ B์ J ๋ชจ๋ ์ผ์ ํ ์๋ ฅ์ ํ๋ฉด ์์ ๋์ธ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด ํ๋ฉด๋ค์ ์๊ธฐ ํ๋ญ์ค ํ๋ฉด์ด๋ผ๊ณ ํฉ๋๋ค. ์ด๊ฒ์ด ํ ์นด๋ง ํํ ๊ณ์ฐ์ ์ฌ์ฉ๋๋ ํ๋ญ์ค ํ๋ฉด ์ขํ๊ณ์ ๊ธฐ์ด์ ๋๋ค.
ํ๋ญ์ค ํ๋ฉด ๊ตฌ์กฐ:
======================
โโโโโโโโโโโโโโโ
โ โ ์ธ๋ถ ํ๋ญ์ค ํ๋ฉด (๋ฎ์ p)
โ โโโโโโโโโ โ
โ โ โ โ ์ค๊ฐ ํ๋ญ์ค ํ๋ฉด
โ โ โโโ โ โ
โ โ โยทโ โ โ ์๊ธฐ ์ถ (์ต๊ณ p)
โ โ โโโ โ โ
โ โ โ โ
โ โโโโโโโโโ โ
โ โ
โโโโโโโโโโโโโโโ
ํน์ฑ:
- p = p(ฯ) ์ฌ๊ธฐ์ ฯ๋ ํ๋ญ์ค ํ๋ฉด ๋ ์ด๋ธ
- B๋ ํ๋ญ์ค ํ๋ฉด ๋ด์ ๋์
- J๋ ํ๋ญ์ค ํ๋ฉด ๋ด์ ๋์
4. 1์ฐจ์ ํํ¶
4.1 ฮธ-Pinch (์ข ๋ฐฉํฅ ์๊ธฐ์ฅ)¶
ฮธ-pinch๋ ์์ ์ข ๋ฐฉํฅ (์ถ) ์๊ธฐ์ฅ์ ์ฌ์ฉํ์ฌ ํ๋ผ์ฆ๋ง๋ฅผ ๋ฐฉ์ฌ์์ผ๋ก ๊ฐ๋ก๋๋ค.
๊ตฌ์ฑ: - ์ํต ๊ธฐํํ (r, ฮธ, z) - $B_z(r)$, $p(r)$ - $B_r = B_ฮธ = 0$ - ํ๋ผ์ฆ๋ง์ ์ ๋ฅ ์์: $J_z = 0$
ํ ๊ท ํ:
์ํต ์ขํ๊ณ์์:
$$ \frac{dp}{dr} = -\frac{1}{\mu_0}\frac{d}{dr}\left(\frac{B_z^2}{2}\right) $$
$r$์์ $r=a$์ ํ๋ผ์ฆ๋ง ๊ฒฝ๊ณ๊น์ง ์ ๋ถ (์ฌ๊ธฐ์ $p(a)=0$):
$$ p(r) = \frac{B_z^2(a) - B_z^2(r)}{2\mu_0} $$
๋ฌผ๋ฆฌ์ ๊ทธ๋ฆผ: - ํ๋ผ์ฆ๋ง ์๋ ฅ์ ์๊ธฐ ์๋ ฅ์ ์ํด ๊ท ํ - ์๊ธฐ ์ฅ๋ ฅ ์์ (์ง์ ์๊ธฐ์ฅ์ ) - ์์ ๋ฐฉ์ฌ์ ๊ฐ๋
Bennett ๊ด๊ณ (์ ์ฒด ์๋ ฅ ๊ท ํ):
๋จ๋ฉด์ ๋ํด ์ ๋ถ:
$$ \int_0^a 2\pi r\, p(r)\, dr = \frac{\pi a^2 B_{ext}^2}{2\mu_0} $$
์ฌ๊ธฐ์ $B_{ext}$๋ ์ธ๋ถ ์ฅ์ ๋๋ค.
4.2 Z-Pinch (๋ฐฉ์๊ฐ ์๊ธฐ์ฅ)¶
Z-pinch๋ ์ถ๋ฐฉํฅ ์ ๋ฅ๋ก๋ถํฐ ์์ฒด ์์ฑ๋ ๋ฐฉ์๊ฐ ์๊ธฐ์ฅ์ ์ฌ์ฉํฉ๋๋ค.
๊ตฌ์ฑ: - $B_ฮธ(r)$, $p(r)$ - $J_z(r)$ (์ถ๋ฐฉํฅ ์ ๋ฅ) - $B_r = B_z = 0$
์ํ๋ฅด ๋ฒ์น:
$$ B_ฮธ(r) = \frac{\mu_0}{2\pi r}\int_0^r J_z(r')2\pi r'\, dr' = \frac{\mu_0 I(r)}{2\pi r} $$
์ฌ๊ธฐ์ $I(r)$์ ๋ฐ์ง๋ฆ $r$ ๋ด์ ๋๋ฌ์ธ์ธ ์ ๋ฅ์ ๋๋ค.
ํ ๊ท ํ:
$$ \frac{dp}{dr} = -\frac{1}{\mu_0}\frac{d}{dr}\left(\frac{B_ฮธ^2}{2}\right) = -\frac{B_ฮธ}{\mu_0 r} $$
$B_ฮธ = \mu_0 I/(2\pi r)$ ์ฌ์ฉ:
$$ \frac{dp}{dr} = -\frac{J_z B_ฮธ}{\mu_0} $$
Bennett ๊ด๊ณ (์ฐจ์ ๋ถ์):
๊ท ์ผํ ์ ๋ฅ ๋ฐ๋ $J_z = I/(\pi a^2)$์ ๋ํด:
$$ I^2 = \frac{8\pi}{\mu_0}NkT $$
์ฌ๊ธฐ์ $N$์ ์ด ์ ์ ์์ด๊ณ $T$๋ ์จ๋์ ๋๋ค.
๋ฌผ๋ฆฌ์ ๊ทธ๋ฆผ: - ์ ๋ฅ๊ฐ ๋ฐฉ์๊ฐ ์ฅ ์์ฑ - ์๊ธฐ ์๋ ฅ์ด ํ๋ผ์ฆ๋ง๋ฅผ ์์ชฝ์ผ๋ก ์กฐ์ - ํ๋ผ์ฆ๋ง ์๋ ฅ์ด ๋ฐ๊นฅ์ชฝ์ผ๋ก ๋ฐ์ด๋ - ๋งค์ฐ ๋ถ์์ (kink, sausage ๋ถ์์ ์ฑ)
4.3 Screw Pinch (๊ฒฐํฉ ์ฅ)¶
Screw pinch๋ ๊ฐ์ ๋ ์์ ์ฑ์ ์ํด ์ถ๋ฐฉํฅ๊ณผ ๋ฐฉ์๊ฐ ์ฅ์ ๊ฒฐํฉํฉ๋๋ค.
๊ตฌ์ฑ: - $B_z(r)$, $B_ฮธ(r)$, $p(r)$ - $J_z(r)$, $J_ฮธ(r)$
ํ ๊ท ํ:
$$ \frac{dp}{dr} = -\frac{1}{\mu_0}\frac{d}{dr}\left(\frac{B_z^2 + B_ฮธ^2}{2}\right) $$
์์ ์ธ์ (์๊ธฐ์ฅ์ ์ ํผ์น):
$$ q(r) = \frac{rB_z}{RB_ฮธ} $$
์ฌ๊ธฐ์ $R$์ ์ฃผ์ ๋ฐ์ง๋ฆ (ํ ๋ก์ด๋ฌ ์์คํ ) ๋๋ ํน์ฑ ๊ธธ์ด์ ๋๋ค.
๋ฌผ๋ฆฌ์ ๊ทธ๋ฆผ: - $B_z$๋ kink ๋ชจ๋์ ๋ํ ์์ ์ฑ ์ ๊ณต - $B_ฮธ$๋ ๊ฐ๋ ์ ๊ณต - $q(r)$์ ์ ๋จ์ด ์งง์ ํ์ฅ ๋ชจ๋ ์์ ํ - ํ ์นด๋ง ๊ฐ๋ ์ ๊ธฐ์ด
Screw Pinch ์๊ธฐ์ฅ์ :
======================
z ^
| /
| / โ ์๊ธฐ์ฅ์ ๋์
| /
| /
|/________> ฮธ
q = ฮz / (2ฯR) ํด๋ก์ด๋ฌ ํ์ ๋น
5. Grad-Shafranov ๋ฐฉ์ ์¶
5.1 ์ถ๋์นญ ํํ¶
์ถ๋์นญ ํ ๋ก์ด๋ฌ ์์คํ (ํ ์นด๋ง, ๋จ์ํ๋ ํํ์ stellarator)์ ๋ํด, ํํ์ ๋จ์ผ ์ค์นผ๋ผ ํจ์๋ก ์ค๋ช ๋ ์ ์์ต๋๋ค: ํด๋ก์ด๋ฌ ํ๋ญ์ค ํจ์ $\psi(R,Z)$.
์ํต ์ขํ๊ณ: $(R, \phi, Z)$ ์ฌ๊ธฐ์ $\phi$๋ ํ ๋ก์ด๋ฌ ๊ฐ์ ๋๋ค.
์๊ธฐ์ฅ ํํ:
$$ \mathbf{B} = F(R,Z)\nabla\phi + \nabla\phi\times\nabla\psi $$
์ฌ๊ธฐ์: - $F(R,Z) = RB_\phi$ (ํ ๋ก์ด๋ฌ ์ฅ ํจ์) - $\psi$๋ ํด๋ก์ด๋ฌ ํ๋ญ์ค ํจ์
์ฑ๋ถ ํํ๋ก:
$$ B_R = \frac{1}{R}\frac{\partial\psi}{\partial Z}, \quad B_Z = -\frac{1}{R}\frac{\partial\psi}{\partial R}, \quad B_\phi = \frac{F}{R} $$
5.2 Grad-Shafranov ๋ฐฉ์ ์ ์ ๋¶
ํ ๊ท ํ์์ ์์:
$$ \nabla p = \mathbf{J}\times\mathbf{B} $$
๊ทธ๋ฆฌ๊ณ $\mathbf{J} = \nabla\times\mathbf{B}/\mu_0$ ์ฌ์ฉ, ํ ๋ก์ด๋ฌ ์ฑ๋ถ์:
$$ \frac{dp}{d\psi} = -\frac{1}{\mu_0 R^2}\frac{dF}{d\psi}F $$
ํด๋ก์ด๋ฌ ์ฑ๋ถ์ Grad-Shafranov ๋ฐฉ์ ์์ ์ ๊ณตํฉ๋๋ค:
$$ \Delta^*\psi \equiv R\frac{\partial}{\partial R}\left(\frac{1}{R}\frac{\partial\psi}{\partial R}\right) + \frac{\partial^2\psi}{\partial Z^2} = -\mu_0 R^2\frac{dp}{d\psi} - F\frac{dF}{d\psi} $$
์ด๊ฒ์ $\psi(R,Z)$์ ๋ํ ํ์ํ ํธ๋ฏธ๋ถ ๋ฐฉ์ ์์ ๋๋ค.
5.3 ์์ ํจ์¶
Grad-Shafranov ๋ฐฉ์ ์์ ๋ ๊ฐ์ ์์ ํจ์ ์ง์ ์ ํ์๋ก ํฉ๋๋ค:
- ์๋ ฅ ํ๋กํ์ผ: $p(\psi)$
- ํ ๋ก์ด๋ฌ ์ฅ ํจ์: $F(\psi)$ (๋๋ ๋๋ฑํ๊ฒ $F^2(\psi)$)
์ด ํจ์๋ค์ ๋ค์์ ์ํด ๊ฒฐ์ ๋ฉ๋๋ค: - ํ๋ผ์ฆ๋ง ๊ฐ์ด ๋ฐ ์ ๋ฅ ๊ตฌ๋ - ๊ฒฝ๊ณ ์กฐ๊ฑด (์ ๋ ๋ฒฝ, ์ธ๋ถ ์ฝ์ผ) - ์์ก ๊ณผ์ (MHD๋ฅผ ๋์ด์)
ํด์์ ํด์ ๋ํ ์ผ๋ฐ์ ์ธ ์ ํ: - $p(\psi) = p_0(1 - \psi/\psi_0)^\alpha$ - $F^2(\psi) = F_0^2 + \beta(\psi - \psi_0)$
5.4 Solovev ํํ (ํด์์ ํด)¶
์์ ํจ์์ ๋ํด:
$$ p(\psi) = 0, \quad F^2(\psi) = F_0^2 + c\psi $$
Grad-Shafranov ๋ฐฉ์ ์์ ์ ํ์ด ๋ฉ๋๋ค:
$$ \Delta^*\psi = -\mu_0 c R^2 $$
Solovev ํด (์ํ ๋จ๋ฉด์ ๋ํด):
$$ \psi(R,Z) = \frac{1}{8}c\mu_0\left[(R^2 - R_0^2)^2 + Z^2\right] + \psi_0 $$
์ด๊ฒ์ Shafranov ์ด๋๋งํผ ๋ฐ๊นฅ์ชฝ์ผ๋ก ์ด๋ํ ์ํ ํ๋ญ์ค ํ๋ฉด์ ๋ํ๋ ๋๋ค.
5.5 ์์น ํด๋ฒ¶
์ผ๋ฐ์ ์ธ $p(\psi)$์ $F(\psi)$์ ๋ํด, Grad-Shafranov ๋ฐฉ์ ์์ ์์น์ ์ผ๋ก ํ์ด์ผ ํฉ๋๋ค:
๋ฐ๋ณต ์คํด: 1. ์ด๊ธฐ $\psi^{(0)}(R,Z)$ ์ถ์ 2. $p(\psi^{(n)})$๊ณผ $F(\psi^{(n)})$ ๊ณ์ฐ 3. ์ ํ ํ์ ๋ฐฉ์ ์ ํ์ด: $$ \Delta^*\psi^{(n+1)} = -\mu_0 R^2\frac{dp}{d\psi}\Big|_{\psi^{(n)}} - F\frac{dF}{d\psi}\Big|_{\psi^{(n)}} $$ 4. ์๋ ดํ ๋๊น์ง ๋ฐ๋ณต: $|\psi^{(n+1)} - \psi^{(n)}| < \epsilon$
์ด์ฐํ: $(R,Z)$ ๊ทธ๋ฆฌ๋์์ ์ ํ ์ฐจ๋ถ ๋๋ ์ ํ ์์ ๋ฐฉ๋ฒ.
6. ์์ ์ธ์¶
6.1 ์ ์¶
์์ ์ธ์ $q(\psi)$๋ ํ๋ญ์ค ํ๋ฉด์์ ์๊ธฐ์ฅ์ ์ ํผ์น๋ฅผ ์ธก์ ํฉ๋๋ค:
$$ q = \frac{1}{2\pi}\oint\frac{d\ell_\parallel}{Rd\phi} $$
์ฌ๊ธฐ์ ์ ๋ถ์ ํ ํด๋ก์ด๋ฌ ํ์ ์ ๋ํ ๊ฒ์ ๋๋ค.
๋ฌผ๋ฆฌ์ ํด์: - $q$๋ ์๊ธฐ์ฅ์ ์ด ํด๋ก์ด๋ฌ ํ์ ๋น ๋ง๋๋ ํ ๋ก์ด๋ฌ ํ์ ์ - ์ ๋ฆฌ์ ๊ฐ ($q = m/n$)์ ์ญ๋์ด ๊ณต๋ช ํ ์ ์๋ ๊ณต๋ช ํ๋ฉด์ ์ ์
6.2 ์ํต ๊ทผ์ฌ¶
ํฐ ์ข ํก๋น ํ ์นด๋ง ($R \approx R_0 + r\cos\theta$)์ ๋ํด:
$$ q(r) \approx \frac{rB_z}{R_0 B_ฮธ} $$
$B_ฮธ = \mu_0 I(r)/(2\pi r)$ ์ฌ์ฉ:
$$ q(r) = \frac{2\pi r^2 B_z}{\mu_0 R_0 I(r)} $$
6.3 ์ ๋ฅ ๋ฐ๋์์ ๊ด๊ณ¶
๋ฏธ๋ถ:
$$ \frac{dq}{dr} = \frac{2\pi r B_z}{\mu_0 R_0}\left(\frac{2}{I} - \frac{r J_z}{I}\right) $$
์๊ธฐ ์ ๋จ:
$$ s = \frac{r}{q}\frac{dq}{dr} $$
์์ ์ ๋จ ($dq/dr > 0$)์ ์ผ๋ฐ์ ์ผ๋ก ์์ ํ์ ๋๋ค.
6.4 ์์ ์ฑ์ ๋ํ ์๋ฏธ¶
- Kruskal-Shafranov ๊ธฐ์ค: ์ธ๋ถ kink ๋ชจ๋๋ $q(a) > m/n$ ํ์
- $m=1, n=1$์ ๋ํด: $q(a) > 1$์ด ํ์ (์ถฉ๋ถํ์ง ์์)
- ๋ด๋ถ kink (sawtooth ์ง๋): $q(0) < 1$
- ์ ๋ฆฌ์ ํ๋ฉด $q = m/n$: tearing ๋ชจ๋์ ์์น
ํ ์นด๋ง์ ์ผ๋ฐ์ ์ธ q-ํ๋กํ์ผ:
============================
q | ___________________ q(a) > 2
| /
| / โ ๋จ์กฐ (์์ ์ ๋จ)
| /
| / q(0) ~ 1
|/________________________ r
0 a
ํน์ง:
- q(0) ~ 1 (์ถ ์)
- q(a) > 2-3 (๊ฐ์ฅ์๋ฆฌ, ์์ ์ฑ ์ํด)
- ์ญ์ ๋จ: ์ค์ฌ๋ถ์์ dq/dr < 0 (๊ณ ๊ธ ์๋๋ฆฌ์ค)
7. ํ๋ญ์ค ํ๋ฉด๊ณผ Shafranov ์ด๋¶
7.1 ์ค์ฒฉ ํ๋ญ์ค ํ๋ฉด¶
์ ๊ฐํ ํ๋ผ์ฆ๋ง์์ ํ๋ญ์ค ํ๋ฉด์ ์ค์ฒฉ๋ ์์ํ์ ํ ๋ฌ์ค์ ๋๋ค. ์๊ธฐ ์ถ (๊ฐ์ฅ ์์ชฝ ํ๋ฉด)์ ๋ค์์ ๊ฐ์ง ํ๋ฉด์ ๋๋ค: - ์ต๊ณ ์๋ ฅ - $q(\psi_{axis})$ ์ต์ - $|\nabla\psi| = 0$
7.2 Shafranov ์ด๋¶
ํ ๋ก์ด๋ฌ ํจ๊ณผ๋ก ์ธํด, ์๊ธฐ ์ถ์ ๊ธฐํํ์ ์ค์ฌ์ ๋ํด ๋ฐ๊นฅ์ชฝ (๋ ํฐ $R$)์ผ๋ก ์ด๋ํฉ๋๋ค.
๋ฌผ๋ฆฌ์ ๊ธฐ์: - ์์ชฝ์์ ๋ ๋์ ์ฅ โ ๋ ๋์ ์๊ธฐ ์๋ ฅ - ํ๋ผ์ฆ๋ง ์๋ ฅ ๊ตฌ๋ฐฐ๊ฐ ๊ท ํ์ ์ํ ๋ฐ๊นฅ์ชฝ ์ด๋ ์์ฑ
๊ทผ์ฌ ๊ณต์:
$$ \Delta_{Shafranov} \approx \frac{a^2\beta_p}{2R_0} $$
์ฌ๊ธฐ์ $\beta_p = 2\mu_0\langle p\rangle/B_p^2$๋ ํด๋ก์ด๋ฌ ๋ฒ ํ์ ๋๋ค.
7.3 ํ๋ญ์ค ํ๋ฉด ์ฑํ¶
ํ๋ ํ ์นด๋ง์ ๋น์ํ ๋จ๋ฉด์ ์ฌ์ฉํฉ๋๋ค: - ๋๋ฆผ $\kappa = b/a$ (์์ง ๋๋ฆผ): ์์ ์ฑ๊ณผ ๊ฐ๋ ๊ฐ์ - ์ผ๊ฐํ์ฑ $\delta$: ์์ชฝ ๋ค์ฌ์ฐ๊ธฐ, ballooning ๋ชจ๋ ์์ ํ
8. ํ๋ผ์ฆ๋ง ๋ฒ ํ¶
8.1 ์ ์¶
ํ๋ผ์ฆ๋ง ๋ฒ ํ๋ ํ๋ผ์ฆ๋ง ์๋ ฅ ๋ ์๊ธฐ ์๋ ฅ์ ๋น์จ์ ๋๋ค:
$$ \beta = \frac{2\mu_0 p}{B^2} $$
์ฒด์ ํ๊ท ๋ฒ ํ:
$$ \langle\beta\rangle = \frac{2\mu_0\langle p\rangle}{\langle B^2\rangle} $$
ํด๋ก์ด๋ฌ ๋ฒ ํ:
$$ \beta_p = \frac{2\mu_0\langle p\rangle}{B_p^2} $$
ํ ๋ก์ด๋ฌ ๋ฒ ํ:
$$ \beta_t = \frac{2\mu_0\langle p\rangle}{B_t^2} $$
8.2 ๋ฒ ํ๋ค ์ฌ์ด์ ๊ด๊ณ¶
ํฐ ์ข ํก๋น ํ ์นด๋ง์ ๋ํด:
$$ \beta_t \approx \beta_p\left(\frac{B_p}{B_t}\right)^2 \approx \beta_p\left(\frac{a}{R_0}\right)^2\frac{1}{q^2} $$
8.3 ๋ฒ ํ ํ๊ณ¶
๋์ ๋ฒ ํ๋ ํต์ตํฉ ๋ก์ ๋ฐ๋์งํ์ง๋ง (๋ ๋ง์ ํต์ตํฉ ์ถ๋ ฅ), MHD ์์ ์ฑ์ด $\beta$๋ฅผ ์ ํํฉ๋๋ค:
Troyon ํ๊ณ (๊ฒฝํ์ ์ค์ผ์ผ๋ง):
$$ \beta_N \equiv \frac{\beta_t(\%)}{I_p/(aB_t)} \lesssim 2.8 - 3.5 $$
์ฌ๊ธฐ์ $I_p$๋ ํ๋ผ์ฆ๋ง ์ ๋ฅ (MA), $a$๋ ๋ฏธํฐ, $B_t$๋ Tesla์ ๋๋ค.
๋ฌผ๋ฆฌ์ ๊ธฐ์: - ๋์ $\beta$ โ ๊ฐํ ์๋ ฅ ๊ตฌ๋ฐฐ โ ์๋ ฅ ๊ตฌ๋ ๋ถ์์ ์ฑ - ์ธ๋ถ kink ๋ชจ๋๊ฐ ๊ณ ์ ๋ $q(a)$์์ $\beta$ ์ ํ
8.4 ๋ฒ ํ ์ต์ ํ¶
๋ฒ ํ ํ๊ณ๋ฅผ ๋์ด๋ ์ ๋ต: - ๋์ ๋๋ฆผ $\kappa$ - ๋์ ์ผ๊ฐํ์ฑ $\delta$ - ์ ๋ ๋ฒฝ ์์ ํ - ํ๋ผ์ฆ๋ง ํ์ - ๊ณ ๊ธ ํ ์นด๋ง ์๋๋ฆฌ์ค (์ญ์ ๋จ, ์์ก ์ฅ๋ฒฝ)
9. Python ๊ตฌํ: Grad-Shafranov ์๋ฒ¶
9.1 ๊ฐ๋จํ Solovev ํํ¶
import numpy as np
import matplotlib.pyplot as plt
from scipy.linalg import solve
# Solovev equilibrium solver
class SolovevEquilibrium:
def __init__(self, R0, a, kappa, delta, Bt0, Ip):
"""
R0: major radius [m]
a: minor radius [m]
kappa: elongation
delta: triangularity
Bt0: toroidal field on axis [T]
Ip: plasma current [A]
"""
self.R0 = R0
self.a = a
self.kappa = kappa
self.delta = delta
self.Bt0 = Bt0
self.Ip = Ip
# Physical constants
self.mu0 = 4*np.pi*1e-7
def compute_psi(self, R, Z):
"""Compute poloidal flux function (Solovev solution)"""
# Simplified Solovev: circular, low beta
c = -2 * self.mu0 * self.Ip / (np.pi * self.a**2)
# Normalized coordinates
r_norm = np.sqrt((R - self.R0)**2 + (Z/self.kappa)**2) / self.a
# Flux function (normalized)
psi = -c * self.R0**2 * self.a**2 * r_norm**2 / 8
return psi
def compute_B(self, R, Z):
"""Compute magnetic field components"""
# Numerical derivatives
dR = 0.001
dZ = 0.001
dpsi_dR = (self.compute_psi(R+dR, Z) - self.compute_psi(R-dR, Z)) / (2*dR)
dpsi_dZ = (self.compute_psi(R, Z+dZ) - self.compute_psi(R, Z-dZ)) / (2*dZ)
BR = -1/R * dpsi_dZ
BZ = 1/R * dpsi_dR
Bphi = self.Bt0 * self.R0 / R
return BR, BZ, Bphi
def compute_q(self, psi_vals):
"""Compute safety factor profile"""
# Simplified q-profile for circular equilibrium
psi_edge = self.compute_psi(self.R0 + self.a, 0)
psi_norm = psi_vals / psi_edge
# Parabolic q-profile
q0 = 1.0 # On-axis q
qa = 3.0 # Edge q
q = q0 + (qa - q0) * psi_norm**2
return q
def plot_flux_surfaces(self, nr=50, nz=50):
"""Plot flux surfaces"""
R_grid = np.linspace(self.R0 - 1.2*self.a, self.R0 + 1.2*self.a, nr)
Z_grid = np.linspace(-1.2*self.kappa*self.a, 1.2*self.kappa*self.a, nz)
R_mesh, Z_mesh = np.meshgrid(R_grid, Z_grid)
psi_mesh = self.compute_psi(R_mesh, Z_mesh)
fig, ax = plt.subplots(figsize=(8, 10))
# Contour plot of flux surfaces
levels = 20
CS = ax.contour(R_mesh, Z_mesh, psi_mesh, levels=levels, colors='blue')
ax.clabel(CS, inline=True, fontsize=8)
# Mark magnetic axis
ax.plot(self.R0, 0, 'r*', markersize=15, label='Magnetic axis')
# Mark last closed flux surface
theta = np.linspace(0, 2*np.pi, 100)
R_lcfs = self.R0 + self.a*np.cos(theta + self.delta*np.sin(theta))
Z_lcfs = self.kappa*self.a*np.sin(theta)
ax.plot(R_lcfs, Z_lcfs, 'r--', linewidth=2, label='LCFS')
ax.set_xlabel('R [m]', fontsize=12)
ax.set_ylabel('Z [m]', fontsize=12)
ax.set_title('Flux Surfaces (Solovev Equilibrium)', fontsize=14)
ax.set_aspect('equal')
ax.grid(True, alpha=0.3)
ax.legend()
plt.tight_layout()
return fig
def plot_q_profile(self):
"""Plot safety factor profile"""
# Radial coordinate (minor radius)
r = np.linspace(0, self.a, 100)
R_vals = self.R0 + r
Z_vals = np.zeros_like(r)
# Compute psi along midplane
psi_vals = np.array([self.compute_psi(R, 0) for R in R_vals])
# Compute q
q_vals = self.compute_q(psi_vals)
fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(r/self.a, q_vals, 'b-', linewidth=2)
ax.axhline(y=1, color='r', linestyle='--', label='q = 1 (sawtooth)')
ax.axhline(y=2, color='g', linestyle='--', label='q = 2 (m=2 resonance)')
ax.set_xlabel('r/a (normalized radius)', fontsize=12)
ax.set_ylabel('q (safety factor)', fontsize=12)
ax.set_title('Safety Factor Profile', fontsize=14)
ax.grid(True, alpha=0.3)
ax.legend()
plt.tight_layout()
return fig
def plot_pressure_profile(self):
"""Plot pressure and current density profiles"""
r = np.linspace(0, self.a, 100)
# Parabolic pressure profile
p0 = 1e5 # Central pressure [Pa]
p = p0 * (1 - (r/self.a)**2)**2
# Current density (from force balance)
# J_phi ~ dp/dr (simplified)
dp_dr = np.gradient(p, r)
j_phi = -dp_dr / (self.Bt0 * self.R0) * 1e-6 # Normalized
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 10))
# Pressure
ax1.plot(r/self.a, p/1e3, 'b-', linewidth=2)
ax1.set_xlabel('r/a', fontsize=12)
ax1.set_ylabel('Pressure [kPa]', fontsize=12)
ax1.set_title('Pressure Profile', fontsize=14)
ax1.grid(True, alpha=0.3)
# Current density
ax2.plot(r/self.a, j_phi, 'r-', linewidth=2)
ax2.set_xlabel('r/a', fontsize=12)
ax2.set_ylabel('Current Density (normalized)', fontsize=12)
ax2.set_title('Toroidal Current Density Profile', fontsize=14)
ax2.grid(True, alpha=0.3)
plt.tight_layout()
return fig
# Example usage
def example_tokamak_equilibrium():
"""ITER-like parameters"""
R0 = 6.2 # Major radius [m]
a = 2.0 # Minor radius [m]
kappa = 1.7 # Elongation
delta = 0.33# Triangularity
Bt0 = 5.3 # Toroidal field [T]
Ip = 15e6 # Plasma current [A]
eq = SolovevEquilibrium(R0, a, kappa, delta, Bt0, Ip)
print("=== ITER-like Tokamak Equilibrium ===")
print(f"Major radius R0 = {R0} m")
print(f"Minor radius a = {a} m")
print(f"Aspect ratio A = {R0/a:.2f}")
print(f"Elongation ฮบ = {kappa}")
print(f"Triangularity ฮด = {delta}")
print(f"Toroidal field Bt0 = {Bt0} T")
print(f"Plasma current Ip = {Ip/1e6:.1f} MA")
# Compute some equilibrium quantities
psi_axis = eq.compute_psi(R0, 0)
psi_edge = eq.compute_psi(R0 + a, 0)
print(f"\nFlux at axis: {psi_axis:.3e} Wb")
print(f"Flux at edge: {psi_edge:.3e} Wb")
# Safety factor
q_axis = eq.compute_q(np.array([psi_axis]))[0]
q_edge = eq.compute_q(np.array([psi_edge]))[0]
print(f"\nSafety factor q(0) = {q_axis:.2f}")
print(f"Safety factor q(a) = {q_edge:.2f}")
# Plot results
fig1 = eq.plot_flux_surfaces()
plt.savefig('/tmp/flux_surfaces.png', dpi=150)
print("\nFlux surfaces plot saved to /tmp/flux_surfaces.png")
fig2 = eq.plot_q_profile()
plt.savefig('/tmp/q_profile.png', dpi=150)
print("q-profile plot saved to /tmp/q_profile.png")
fig3 = eq.plot_pressure_profile()
plt.savefig('/tmp/pressure_profile.png', dpi=150)
print("Pressure profile plot saved to /tmp/pressure_profile.png")
plt.close('all')
if __name__ == "__main__":
example_tokamak_equilibrium()
9.2 ์์น์ Grad-Shafranov ์๋ฒ¶
import numpy as np
import matplotlib.pyplot as plt
from scipy.sparse import diags, csr_matrix
from scipy.sparse.linalg import spsolve
class GradShafranovSolver:
"""Numerical solver for Grad-Shafranov equation"""
def __init__(self, R_min, R_max, Z_min, Z_max, nR, nZ):
"""
Set up computational domain
"""
self.R_min = R_min
self.R_max = R_max
self.Z_min = Z_min
self.Z_max = Z_max
self.nR = nR
self.nZ = nZ
# Grid spacing
self.dR = (R_max - R_min) / (nR - 1)
self.dZ = (Z_max - Z_min) / (nZ - 1)
# Create grid
self.R = np.linspace(R_min, R_max, nR)
self.Z = np.linspace(Z_min, Z_max, nZ)
self.R_grid, self.Z_grid = np.meshgrid(self.R, self.Z)
# Initialize flux
self.psi = np.zeros((nZ, nR))
# Constants
self.mu0 = 4*np.pi*1e-7
def set_free_functions(self, p_func, F_func):
"""
Set pressure and toroidal field functions
p_func: p(psi) callable
F_func: F(psi) callable where F = R*B_phi
"""
self.p_func = p_func
self.F_func = F_func
def build_operator_matrix(self):
"""
Build discrete Grad-Shafranov operator matrix
ฮ* ฯ = R โ/โR(1/R โฯ/โR) + โยฒฯ/โZยฒ
"""
nR = self.nR
nZ = self.nZ
N = nR * nZ
# Flatten index: (i,j) -> i*nR + j
def idx(i, j):
return i * nR + j
# Build sparse matrix
row = []
col = []
data = []
for i in range(nZ):
for j in range(nR):
n = idx(i, j)
R = self.R[j]
# Interior points
if 0 < i < nZ-1 and 0 < j < nR-1:
# R derivatives: R โ/โR(1/R โฯ/โR)
# = โยฒฯ/โRยฒ + (1/R)โฯ/โR - (ฯ/Rยฒ)
# Discretize: centered differences
# โยฒฯ/โRยฒ
coef_R_pp = 1 / self.dR**2
coef_R_0 = -2 / self.dR**2
coef_R_mm = 1 / self.dR**2
# (1/R)โฯ/โR
coef_R_p_1st = 1 / (2*R*self.dR)
coef_R_m_1st = -1 / (2*R*self.dR)
# Z derivatives: โยฒฯ/โZยฒ
coef_Z_pp = 1 / self.dZ**2
coef_Z_0 = -2 / self.dZ**2
coef_Z_mm = 1 / self.dZ**2
# Combine
# Center
row.append(n)
col.append(n)
data.append(coef_R_0 + coef_Z_0)
# R+1
row.append(n)
col.append(idx(i, j+1))
data.append(coef_R_pp + coef_R_p_1st)
# R-1
row.append(n)
col.append(idx(i, j-1))
data.append(coef_R_mm + coef_R_m_1st)
# Z+1
row.append(n)
col.append(idx(i+1, j))
data.append(coef_Z_pp)
# Z-1
row.append(n)
col.append(idx(i-1, j))
data.append(coef_Z_mm)
else:
# Boundary: ฯ = 0
row.append(n)
col.append(n)
data.append(1.0)
matrix = csr_matrix((data, (row, col)), shape=(N, N))
return matrix
def solve_fixed_boundary(self, psi_boundary=0, max_iter=100, tol=1e-6):
"""
Solve Grad-Shafranov with fixed boundary using Picard iteration
"""
nR = self.nR
nZ = self.nZ
N = nR * nZ
# Build operator matrix (constant for linear problem)
A = self.build_operator_matrix()
# Picard iteration
for iteration in range(max_iter):
psi_old = self.psi.copy()
# Compute RHS: -ฮผโ Rยฒ dp/dฯ - F dF/dฯ
rhs = np.zeros((nZ, nR))
for i in range(nZ):
for j in range(nR):
R = self.R[j]
psi_val = self.psi[i, j]
# Numerical derivatives of p and F
dpsi = 1e-6
dpdpsi = (self.p_func(psi_val + dpsi) - self.p_func(psi_val - dpsi)) / (2*dpsi)
F_val = self.F_func(psi_val)
dFdpsi = (self.F_func(psi_val + dpsi) - self.F_func(psi_val - dpsi)) / (2*dpsi)
rhs[i, j] = -self.mu0 * R**2 * dpdpsi - F_val * dFdpsi
# Apply boundary conditions
rhs[0, :] = psi_boundary
rhs[-1, :] = psi_boundary
rhs[:, 0] = psi_boundary
rhs[:, -1] = psi_boundary
# Solve linear system
rhs_flat = rhs.flatten()
psi_flat = spsolve(A, rhs_flat)
self.psi = psi_flat.reshape((nZ, nR))
# Check convergence
error = np.max(np.abs(self.psi - psi_old))
if iteration % 10 == 0:
print(f"Iteration {iteration}: max error = {error:.3e}")
if error < tol:
print(f"Converged in {iteration+1} iterations")
break
return self.psi
def plot_solution(self):
"""Plot the computed equilibrium"""
fig, axes = plt.subplots(1, 2, figsize=(16, 6))
# Flux surfaces
ax = axes[0]
levels = 30
CS = ax.contour(self.R_grid, self.Z_grid, self.psi, levels=levels, colors='blue')
ax.clabel(CS, inline=True, fontsize=8)
ax.set_xlabel('R [m]', fontsize=12)
ax.set_ylabel('Z [m]', fontsize=12)
ax.set_title('Poloidal Flux Surfaces', fontsize=14)
ax.set_aspect('equal')
ax.grid(True, alpha=0.3)
# Pressure profile
ax = axes[1]
psi_flat = self.psi.flatten()
psi_min = np.min(psi_flat)
psi_max = np.max(psi_flat)
psi_range = np.linspace(psi_min, psi_max, 100)
p_range = np.array([self.p_func(psi) for psi in psi_range])
ax.plot(psi_range, p_range/1e3, 'r-', linewidth=2)
ax.set_xlabel('ฯ [Wb]', fontsize=12)
ax.set_ylabel('Pressure [kPa]', fontsize=12)
ax.set_title('Pressure Profile p(ฯ)', fontsize=14)
ax.grid(True, alpha=0.3)
plt.tight_layout()
return fig
# Example: solve simple equilibrium
def example_gs_solver():
"""Example Grad-Shafranov solution"""
# Domain: tokamak-like geometry
R0 = 1.0 # Major radius
a = 0.3 # Minor radius
R_min = R0 - 1.5*a
R_max = R0 + 1.5*a
Z_min = -1.5*a
Z_max = 1.5*a
nR = 80
nZ = 80
solver = GradShafranovSolver(R_min, R_max, Z_min, Z_max, nR, nZ)
# Define free functions
# Simple parabolic pressure
p0 = 1e5 # 100 kPa
psi0 = -0.1
def p_func(psi):
if psi > psi0:
return 0.0
else:
return p0 * (1 - psi/psi0)**2
# Constant F (uniform toroidal field)
Bt0 = 2.0 # Tesla
F0 = Bt0 * R0
def F_func(psi):
return F0
solver.set_free_functions(p_func, F_func)
print("=== Grad-Shafranov Solver ===")
print(f"Grid: {nR} x {nZ}")
print(f"Domain: R โ [{R_min}, {R_max}], Z โ [{Z_min}, {Z_max}]")
print(f"Central pressure: {p0/1e3} kPa")
print(f"Toroidal field: {Bt0} T")
# Solve
psi = solver.solve_fixed_boundary(max_iter=100, tol=1e-6)
# Plot
fig = solver.plot_solution()
plt.savefig('/tmp/gs_solution.png', dpi=150)
print("\nSolution plot saved to /tmp/gs_solution.png")
plt.close()
if __name__ == "__main__":
example_gs_solver()
10. ๋ฒ ํ ๊ณ์ฐ¶
import numpy as np
import matplotlib.pyplot as plt
def compute_beta(R0, a, p_profile, B_profiles, nr=100):
"""
Compute various beta values for a tokamak equilibrium
Parameters:
-----------
R0: major radius [m]
a: minor radius [m]
p_profile: function p(r) giving pressure profile
B_profiles: dict with 'Bt', 'Bp' functions of r
nr: number of radial points
Returns:
--------
dict with beta_p, beta_t, beta_N
"""
r = np.linspace(0, a, nr)
dr = r[1] - r[0]
# Volume element in torus: dV = 2ฯ Rโ ยท 2ฯr dr
def volume_element(r_val):
return 4 * np.pi**2 * R0 * r_val * dr
# Compute volume-averaged quantities
p_vals = np.array([p_profile(r_val) for r_val in r])
Bt_vals = np.array([B_profiles['Bt'](r_val) for r_val in r])
Bp_vals = np.array([B_profiles['Bp'](r_val) for r_val in r])
# Volume integrals
V_total = np.sum([volume_element(r[i]) for i in range(nr)])
p_avg = np.sum([p_vals[i] * volume_element(r[i]) for i in range(nr)]) / V_total
Bt2_avg = np.sum([Bt_vals[i]**2 * volume_element(r[i]) for i in range(nr)]) / V_total
Bp2_avg = np.sum([Bp_vals[i]**2 * volume_element(r[i]) for i in range(nr)]) / V_total
mu0 = 4*np.pi*1e-7
# Poloidal beta
beta_p = 2 * mu0 * p_avg / Bp2_avg
# Toroidal beta
beta_t = 2 * mu0 * p_avg / Bt2_avg
# For beta_N, need plasma current
# I_p = โฎ Jยทdl ~ B_p * circumference / ฮผโ
Bp_edge = Bp_vals[-1]
Ip = 2 * np.pi * a * Bp_edge / mu0
# Troyon normalized beta
Bt_axis = Bt_vals[0]
beta_N = beta_t * 100 / (Ip / (a * Bt_axis)) # percentage
results = {
'beta_p': beta_p,
'beta_t': beta_t,
'beta_N': beta_N,
'p_avg': p_avg,
'Ip': Ip
}
return results
def example_beta_calculation():
"""Example beta calculation for tokamak"""
# ITER-like parameters
R0 = 6.2
a = 2.0
# Parabolic pressure profile
p0 = 5e5 # 500 kPa
def p_profile(r):
return p0 * (1 - (r/a)**2)**2
# Magnetic field profiles
Bt0 = 5.3 # On-axis toroidal field
Ip = 15e6 # Plasma current
def Bt_profile(r):
return Bt0 * R0 / (R0 + r) # 1/R dependence
def Bp_profile(r):
mu0 = 4*np.pi*1e-7
# From Ampere's law, current ~ rยฒ profile
I_enclosed = Ip * (r/a)**2
return mu0 * I_enclosed / (2 * np.pi * r) if r > 0 else 0
B_profiles = {
'Bt': Bt_profile,
'Bp': Bp_profile
}
# Compute betas
results = compute_beta(R0, a, p_profile, B_profiles)
print("=== Beta Calculation ===")
print(f"Major radius R0 = {R0} m")
print(f"Minor radius a = {a} m")
print(f"Central pressure p0 = {p0/1e3} kPa")
print(f"Toroidal field Bt0 = {Bt0} T")
print(f"Plasma current Ip = {results['Ip']/1e6:.1f} MA")
print(f"\nAverage pressure <p> = {results['p_avg']/1e3:.1f} kPa")
print(f"Poloidal beta ฮฒ_p = {results['beta_p']:.3f}")
print(f"Toroidal beta ฮฒ_t = {results['beta_t']*100:.2f} %")
print(f"Normalized beta ฮฒ_N = {results['beta_N']:.2f}")
# Troyon limit check
beta_N_limit = 3.5
print(f"\nTroyon limit ฮฒ_N < {beta_N_limit}")
if results['beta_N'] < beta_N_limit:
print("โ Within stability limit")
else:
print("โ Exceeds stability limit!")
# Plot profiles
r = np.linspace(0.01, a, 100)
p = np.array([p_profile(ri) for ri in r])
Bt = np.array([Bt_profile(ri) for ri in r])
Bp = np.array([Bp_profile(ri) for ri in r])
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
# Pressure
axes[0,0].plot(r/a, p/1e3, 'b-', linewidth=2)
axes[0,0].set_xlabel('r/a')
axes[0,0].set_ylabel('Pressure [kPa]')
axes[0,0].set_title('Pressure Profile')
axes[0,0].grid(True, alpha=0.3)
# Toroidal field
axes[0,1].plot(r/a, Bt, 'g-', linewidth=2)
axes[0,1].set_xlabel('r/a')
axes[0,1].set_ylabel('B_t [T]')
axes[0,1].set_title('Toroidal Field')
axes[0,1].grid(True, alpha=0.3)
# Poloidal field
axes[1,0].plot(r/a, Bp, 'r-', linewidth=2)
axes[1,0].set_xlabel('r/a')
axes[1,0].set_ylabel('B_p [T]')
axes[1,0].set_title('Poloidal Field')
axes[1,0].grid(True, alpha=0.3)
# Local beta
beta_local = 2 * (4*np.pi*1e-7) * p / (Bt**2 + Bp**2)
axes[1,1].plot(r/a, beta_local*100, 'm-', linewidth=2)
axes[1,1].set_xlabel('r/a')
axes[1,1].set_ylabel('ฮฒ [%]')
axes[1,1].set_title('Local Beta Profile')
axes[1,1].grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('/tmp/beta_profiles.png', dpi=150)
print("\nProfiles plot saved to /tmp/beta_profiles.png")
plt.close()
if __name__ == "__main__":
example_beta_calculation()
์์ฝ¶
์ด ๊ฐ์์์ MHD ํํ์ ๊ธฐ์ด๋ฅผ ๋ค๋ฃจ์์ต๋๋ค:
-
ํ ๊ท ํ: ๊ธฐ๋ณธ ๋ฐฉ์ ์ $\nabla p = \mathbf{J}\times\mathbf{B}$๊ฐ ํ๋ผ์ฆ๋ง ์๋ ฅ ๊ตฌ๋ฐฐ์ ์๊ธฐ๋ ฅ (์๋ ฅ + ์ฅ๋ ฅ)์ ๊ท ํ์ ๋ง์ถฅ๋๋ค.
-
๊ฒฐ๊ณผ: ์๋ ฅ๊ณผ ์ ๋ฅ๋ ์๊ธฐ ํ๋ญ์ค ํ๋ฉด ์์ ๋์ด๋ฉฐ, ํ๋ญ์ค ํ๋ฉด ์ขํ๊ณ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
-
1์ฐจ์ ํํ: ฮธ-pinch (์์ ์ถ๋ฐฉํฅ ์ฅ), Z-pinch (์์ฒด ์์ฑ ๋ฐฉ์๊ฐ ์ฅ, Bennett ๊ด๊ณ), screw pinch (์ ๋จ์ ๊ฐ์ง ๊ฒฐํฉ ์ฅ).
-
Grad-Shafranov ๋ฐฉ์ ์: ๋ ๊ฐ์ ์์ ํจ์ $p(\psi)$์ $F(\psi)$ ์ง์ ์ด ํ์ํ ์ถ๋์นญ ํ ๋ก์ด๋ฌ ํํ์ ์ง๋ฐฐํ๋ ํ์ํ PDE.
-
์์ ์ธ์: ์๊ธฐ์ฅ์ ํผ์น๋ฅผ ์ธก์ ํ๋ ๋งค๊ฐ๋ณ์ $q$, ์์ ์ฑ ๋ถ์์ ์ค์ (Kruskal-Shafranov ํ๊ณ, ์ ๋ฆฌ์ ํ๋ฉด).
-
ํ๋ญ์ค ํ๋ฉด: ์๋ ฅ์ด ์ผ์ ํ ์ค์ฒฉ๋ ํ ๋ก์ด๋ฌ ํ๋ฉด, ํ ๋ก์ด๋ฌ ํจ๊ณผ๋ก ์ธํ Shafranov ์ด๋.
-
ํ๋ผ์ฆ๋ง ๋ฒ ํ: ํ๋ผ์ฆ๋ง ๋ ์๊ธฐ ์๋ ฅ์ ๋น์จ, MHD ์์ ์ฑ์ด ์ค์ ํ ์ด์ ํ๊ณ (Troyon ํ๊ณ).
-
์์น์ ๋ฐฉ๋ฒ: ์ ํ ์ฐจ๋ถ๊ณผ ๋ฐ๋ณต ๊ธฐ๋ฒ์ ์ฌ์ฉํ ํํ ์๋ฒ ๊ตฌํ.
์ด๋ฌํ ํํ ๊ฐ๋ ์ ํ๋ผ์ฆ๋ง ์์ ์ฑ (๋ค์ ๊ฐ์), ์์ก, ๊ทธ๋ฆฌ๊ณ ํต์ตํฉ ์ฅ์น์ ๊ฐ๋ ์ ์ดํดํ๋ ๊ธฐ์ด๋ฅผ ํ์ฑํฉ๋๋ค.
์ฐ์ต ๋ฌธ์ ¶
๋ฌธ์ 1: ์ํตํ ํ๋ผ์ฆ๋ง์์์ ํ ๊ท ํ¶
์ํตํ ํ๋ผ์ฆ๋ง ๊ธฐ๋ฅ์ด ๋ค์ ํ๋กํ์ผ์ ๊ฐ์ง๋๋ค: - ์๋ ฅ: $p(r) = p_0(1 - r^2/a^2)$ for $r < a$, $p=0$ for $r \geq a$ - ์ถ๋ฐฉํฅ ์ฅ: $B_z = B_0 = \text{const}$ - ๋ฐฉ์๊ฐ ์ฅ: $B_ฮธ(r)$ ๊ฒฐ์ ํ์
(a) ๋ฐฉ์ฌ์ ํ ๊ท ํ ๋ฐฉ์ ์์ ์ฌ์ฉํ์ฌ $B_ฮธ(r)$์ ์ ๋ํ์ธ์.
(b) ์ด ํ๋ผ์ฆ๋ง ์ ๋ฅ $I_p$๋ฅผ ๊ณ์ฐํ์ธ์.
(c) ์ฃผ์ ๋ฐ์ง๋ฆ $R_0 = 5a$๋ฅผ ๊ฐ์ ํ๊ณ ์์ ์ธ์ $q(r)$์ ๊ณ์ฐํ์ธ์.
(d) ์๊ธฐ ์ถ ($r=0$)์์ $q$๋ ๋ฌด์์ ๋๊น?
ํํธ: ์ํต ์ขํ๊ณ์์ $\nabla p = \mathbf{J}\times\mathbf{B}$๋ฅผ ์ฌ์ฉํ์ธ์.
๋ฌธ์ 2: Z-Pinch์ ๋ํ Bennett ๊ด๊ณ¶
Z-pinch๊ฐ ๊ท ์ผํ ๋ฐ๋ $n = 10^{20}$ m$^{-3}$, ์จ๋ $T = 10$ keV, ๊ธธ์ด $L = 1$ m, ๋ฐ์ง๋ฆ $a = 1$ cm๋ฅผ ๊ฐ์ง๋๋ค.
(a) ์ด ์ ์ ์ $N = n \pi a^2 L$์ ๊ณ์ฐํ์ธ์.
(b) Bennett ๊ด๊ณ $I^2 = (8\pi/\mu_0)NkT$๋ฅผ ์ฌ์ฉํ์ฌ ํ์ํ ์ ๋ฅ $I_p$๋ฅผ ๊ณ์ฐํ์ธ์.
(c) ํ๋ฉด์์ ์๊ธฐ์ฅ $B_ฮธ(a) = \mu_0 I_p/(2\pi a)$๋ฅผ ์ถ์ ํ์ธ์.
(d) ์๊ธฐ ์๋ ฅ $B_ฮธ^2/(2\mu_0)$๋ฅผ ๊ณ์ฐํ๊ณ ํ๋ผ์ฆ๋ง ์๋ ฅ $p = nkT$์ ๋น๊ตํ์ธ์.
(e) ์ด ๊ตฌ์ฑ์ ์์ ์ฑ ํจ์๋ฅผ ๋ ผ์ํ์ธ์.
๋ฌธ์ 3: ์ผ์ ์๋ ฅ์ ๊ฐ์ง Grad-Shafranov¶
๋ค์์ ๊ฐ์ง Grad-Shafranov ๋ฐฉ์ ์์ ๊ณ ๋ คํ์ธ์: - $p(\psi) = p_0 = \text{const}$ - $F(\psi) = F_0 = \text{const}$
(a) ๋ฐฉ์ ์์ด ๋ค์์ผ๋ก ์ถ์ฝ๋จ์ ๋ณด์ด์ธ์: $$ \Delta^*\psi = -\mu_0 p_0 R^2 $$
(b) ํฐ ์ข ํก๋น ์ํ ํ ์นด๋ง ($R \approx R_0$)์ ๋ํด ๋ค์๊ณผ ๊ฐ์ด ๊ทผ์ฌํ์ธ์: $$ \frac{1}{r}\frac{d}{dr}\left(r\frac{d\psi}{dr}\right) + \frac{d^2\psi}{dz^2} \approx -\mu_0 p_0 R_0^2 $$
(c) ๋ถ๋ฆฌ ๊ฐ๋ฅํ ํด $\psi(r,z) = R_r(r)Z_z(z)$๋ฅผ ์ ์ํ๊ณ $R_r$๊ณผ $Z_z$์ ๋ํ ODE๋ฅผ ์ ๋ํ์ธ์.
(d) ์ํ ํ๋ญ์ค ํ๋ฉด $\psi \propto r^2 + \kappa^2 z^2$์ ๋ํด ํ๊ณ $\kappa$ (๋๋ฆผ)๋ฅผ ๊ฒฐ์ ํ์ธ์.
๋ฌธ์ 4: ์์ ์ธ์์ ์ ๋ฅ ํ๋กํ์ผ¶
ํ ์นด๋ง์ด ์ฃผ์ ๋ฐ์ง๋ฆ $R_0 = 3$ m, ์๋ฐ์ง๋ฆ $a = 1$ m, ํ ๋ก์ด๋ฌ ์ฅ $B_t = 5$ T (๊ฑฐ์ ์ผ์ )๋ฅผ ๊ฐ์ง๋๋ค. ์ ๋ฅ ๋ฐ๋ ํ๋กํ์ผ์:
$$ J_z(r) = J_0\left(1 - \frac{r^2}{a^2}\right) $$
(a) ๋๋ฌ์ธ์ธ ์ ๋ฅ $I(r) = \int_0^r J_z(r') 2\pi r' dr'$๋ฅผ ๊ณ์ฐํ์ธ์.
(b) ์ํ๋ฅด ๋ฒ์น์ ์ฌ์ฉํ์ฌ $B_ฮธ(r) = \mu_0 I(r)/(2\pi r)$๋ฅผ ๊ตฌํ์ธ์.
(c) ์์ ์ธ์ ํ๋กํ์ผ $q(r) = rB_t/(R_0 B_ฮธ(r))$๋ฅผ ๊ณ์ฐํ์ธ์.
(d) $q(0)$ (์ถ ์)๊ณผ $q(a)$ (๊ฐ์ฅ์๋ฆฌ)๋ฅผ ๊ฒฐ์ ํ์ธ์.
(e) $q(r_s) = 2$ ($m=2$ ์ ๋ฆฌ์ ํ๋ฉด)์ธ ๋ฐ์ง๋ฆ $r_s$๋ฅผ ๊ตฌํ์ธ์.
(f) $q(r)$์ ํ๋กฏํ๊ณ ์์ ์ฑ ๊ด๋ จ ํน์ง์ ์๋ณํ์ธ์.
๋ฌธ์ 5: ๋ฒ ํ ํ๊ณ¶
์คํ ํ ์นด๋ง์ด ๋ค์์ผ๋ก ์๋ํฉ๋๋ค: - ์๋ฐ์ง๋ฆ $a = 0.5$ m - ํ ๋ก์ด๋ฌ ์ฅ $B_t = 3$ T - ํ๋ผ์ฆ๋ง ์ ๋ฅ $I_p = 1$ MA - ์ค์ฌ ์๋ ฅ $p_0 = 10^5$ Pa - ์๋ ฅ ํ๋กํ์ผ $p(r) = p_0(1 - r^2/a^2)^2$
(a) ์ฒด์ ํ๊ท ์๋ ฅ $\langle p\rangle$์ ๊ณ์ฐํ์ธ์.
(b) ํ ๋ก์ด๋ฌ ๋ฒ ํ $\beta_t = 2\mu_0\langle p\rangle/B_t^2$๋ฅผ ๊ณ์ฐํ์ธ์.
(c) ์ ๊ทํ๋ ๋ฒ ํ $\beta_N = \beta_t(\%)/(I_p[MA]/(a[m]B_t[T]))$๋ฅผ ๊ณ์ฐํ์ธ์.
(d) $\beta_N$์ Troyon ํ๊ณ $\beta_N < 3.5$์ ๋น๊ตํ์ธ์.
(e) ์คํ์ด ์๋ ฅ์ ๋ ๋ฐฐ๋ก ํ๋ ค๋ฉด ์์ ์ฑ์ ์ ์งํ๊ธฐ ์ํด $I_p$ ๋๋ $B_t$์ ์ด๋ค ์กฐ์ ์ด ํ์ํฉ๋๊น?
ํํธ: ์ํต์์ ์ฒด์ ํ๊ท : $\langle p\rangle = \frac{\int_0^a p(r) 2\pi r dr}{\pi a^2}$.
์ด์ : Overview | ๋ค์: Linear Stability