단순히 방정식만 풀지 마세요: Python으로 실시간 원자로 시뮬레이터를 구축하는 방법
요약
원자로 물리학의 수학적 모델을 실제 작동하는 수치 소프트웨어로 변환하는 공학적 과정을 다룹니다. 미분 방정식을 유한 차분 근사를 통해 이산화하고, 이를 선형 대수 시스템으로 구축하여 Python으로 시뮬레이터를 구현하는 방법을 설명합니다.
핵심 포인트
- 연속적인 물리 법칙을 컴퓨터가 이해할 수 있는 수치 데이터로 변환하는 과정의 중요성
- 유한 차분 근사(Finite Difference Approximation)를 이용한 미분 방정식의 이산화
- 물리 방정식을 선형 시스템(AΦ=B)으로 재구성하여 수치적으로 해결하는 방법
만약 Lamarsh의 _Introduction to Nuclear Engineering_이나 Duderstadt & Hamilton의 _Nuclear Reactor Analysis_와 같은 고전적인 서적을 펼쳐본 적이 있다면, 원자로 물리학 (reactor physics)의 우아함에 감탄했을 것입니다.
여러분은 중성자 수송 방정식 (neutron transport equation)을 유도하고, 확산 이론 (diffusion theory)을 공부하며, 원자로 임계성 (reactor criticality)을 분석하고, 정교한 수학적 모델들을 다루게 될 것입니다.
하지만 VS Code, PyCharm, 또는 Jupyter Notebook을 열고 아주 간단한 원자로 시뮬레이터라도 구축하려고 시도하는 순간, 교과서에서는 거의 다루지 않는 문제에 직면하게 됩니다:
거대한 공학적 격차 (engineering gap).
이 격차는 물리학에 있는 것이 아닙니다.
수학적 모델을 신뢰할 수 있는 수치 소프트웨어 (numerical software)로 변환하는 과정에 있습니다.
실제 여정은 다음과 같습니다:
연속 물리학 (Continuous Physics)
↓
수치 이산화 (Numerical Discretization)
...
대부분의 고전적인 교과서들은 첫 번째 단계를 완벽히 다룹니다.
하지만 과학 소프트웨어는 마지막 네 단계에서 살아 움직입니다.
미분 방정식에서 수치 알고리즘으로
원자로 물리학에서 가장 근본적인 방정식 중 하나를 생각해 봅시다. 바로 외부 소스(external source)가 있는 1차원 정상 상태 중성자 확산 방정식 (one-dimensional steady-state neutron diffusion equation)입니다.
[
D\frac{d^2\phi}{dx^2}-\Sigma_a\phi+S=0
]
여기서
- D는 확산 계수 (diffusion coefficient)
- φ는 중성자 속 (neutron flux)
- Σa는 거시적 흡수 단면적 (macroscopic absorption cross section)
- S는 외부 중성자 소스 (external neutron source)
아름답습니다.
우아합니다.
하지만 컴퓨터가 직접 풀기에는 불가능합니다.
컴퓨터는 미분 (derivatives)을 이해하지 못합니다.
컴퓨터는 숫자 (numbers)를 이해합니다.
1단계 — 원자로 이산화하기
공간을 연속적인 것으로 취급하는 대신, 원자로를 동일한 간격의 노드 (nodes)로 나눕니다.
유한 차분 근사 (finite difference approximation)를 사용하면,
[
\frac{d^2\phi}{dx^2}
\approx
\frac{\phi_{i+1}-2\phi_i+\phi_{i-1}}{\Delta x^2}
]
지배 방정식 (governing equation)은 다음과 같이 변합니다.
[
D
\left(
\frac{\phi_{i+1}-2\phi_i+\phi_{i-1}}
{\Delta x^2}
\right)
\Sigma_a\phi_i
+
S_i
0
]
이제 미분 방정식은 대수 방정식 (algebraic equations)의 집합이 되었습니다.
2단계 — 선형 시스템 구축하기
항들을 재배열하면 다음과 같습니다.
[
\left(\frac{D}{\Delta x^2}\right)\phi_{i-1} - \left( \frac{2D}{\Delta x^2} +\Sigma_a \right)\phi_i + \left(\frac{D}{\Delta x^2}\right)\phi_{i+1} - S_i = 0
]
미적분학을 푸는 대신,
우리는 다음을 풉니다.
[
A\Phi=B ]
여기서
- A는 중성자 누설 (neutron leakage)과 흡수 (absorption)를 나타내는 삼중 대각 행렬 (tridiagonal matrix)이며,
- Φ는 미지수인 중성자 속 (neutron flux) 벡터이고,
- B는 외부 소스 (external source)를 포함합니다.
이 지점에서 원자로 물리학은 수치 선형 대수학 (numerical linear algebra)이 됩니다.
3단계 — Python으로 시스템 풀기
수학적 모델이 행렬 형태 (matrix form)로 변환되면, 솔버 (solver)를 구현하는 것은 매우 간단해집니다.
import numpy as np
def solve_1d_reactor_flux(core_length,
...
중요한 점 하나를 주목하세요.
우리는 행렬 역행렬 (matrix inversion)을 수행하지 않습니다.
numpy.linalg.solve()는 최적화된 LAPACK 루틴을 사용하여 선형 시스템을 직접 해결하며, 이는 역행렬을 명시적으로 계산하는 것보다 더 빠르고 수치적으로 더 안정적입니다.
과학 계산 (scientific computing)에서는 이러한 차이가 매우 중요합니다.
고전 교과서와 과학 소프트웨어가 만나는 지점
오늘날의 학습 리소스는 보통 다음 두 가지 범주 중 하나에 속합니다.
고전적인 원자로 물리학 교과서
Lamarsh, Duderstadt & Hamilton, 그리고 Stacey의 저서들은 확산 이론 (diffusion theory), 중성자 수송 (neutron transport), 원자로 동특성 (reactor kinetics), 그리고 핵공학 (nuclear engineering)을 이해하는 데 필요한 이론적 토대를 제공합니다.
이 책들은 방정식이 왜 작동하는지를 설명합니다.
상용 시뮬레이션 코드
OpenMC, Serpent, MCNP와 같은 프로젝트들은 매우 정교한 중성자 수송 문제를 해결할 수 있는 산업 수준의 과학 코드입니다.
이들은 전문가들이 원자로를 어떻게 시뮬레이션하는지를 보여줍니다.
하지만 많은 학생과 소프트웨어 엔지니어들에게는 여전히 빠져 있는 중간 단계가 있습니다.
시뮬레이터를 직접 구축하려면 어떻게 해야 할까요?
방정식을 유지보수 가능한 Python 코드로 어떻게 변환할까요?
수치 알고리즘을 소프트웨어 아키텍처 (software architecture)로 어떻게 구성할까요?
그 가교(bridge)에 대해서는 논의되는 경우가 드뭅니다.
다른 학습 관점
수치 프로그래밍 (numerical programming)은 고전적인 원자로 물리학 서적을 대체하는 것이 아니라, 이를 보완합니다.
| 리소스 | 주요 초점 |
|---|---|
| Lamarsh | 원자로 물리학 기초 |
| ... | |
| 이것들은 서로 경쟁하는 접근 방식이 아닙니다. |
이들은 동일한 학문의 서로 다른 계층 (layers)입니다.
물리학 (Physics)은 모델을 설명합니다.
수치 해석 (Numerical analysis)은 모델을 변환합니다.
소프트웨어 공학 (Software engineering)은 수치 방법 (numerical method)을 유지보수 가능한 시뮬레이터 (simulator)로 바꿉니다.
마치며
코드를 작성하는 것은 방정식 안에 숨겨진 모든 가정을 직면하게 만듭니다.
경계 조건 (Boundary conditions).
격자 간격 (Grid spacing).
행렬 조립 (Matrix assembly).
수치적 안정성 (Numerical stability).
데이터 구조 (Data structures).
알고리즘 복잡도 (Algorithmic complexity).
이것이 바로 물리 모델을 구현하는 것이 종종 그 모델을 이해하는 가장 깊은 형태가 되는 이유입니다.
방정식은 현실을 묘사합니다.
알고리즘은 그것을 계산 가능하게 (computable) 만듭니다.
소프트웨어는 그것을 유용하게 만듭니다.
원자로 물리학과 실용적인 과학 프로그래밍 (scientific programming) 사이의 이 가교를 탐구하는 데 관심이 있다면, 저는 Python과 NumPy를 사용하여 처음부터 원자로 시뮬레이터를 구축하는 데 초점을 맞춘 Leanpub 도서를 통해 저만의 접근 방식을 기록해 왔습니다.
종이 위의 방정식에서 작동하는 시뮬레이션 소프트웨어로 넘어가는 과정이 조금이라도 덜 두렵게 느껴지도록 이 책이 도움이 되기를 바랍니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기