화성 유인 탐사 시간을 화학 로켓의 절반(3~4개월)으로 단축시키는 핵심 우주 추진 기관인 핵열추진(Nuclear Thermal Propulsion, NTP) 시스템은 고농축 우라늄(HALEU) 원자로 노심에서 액체 수소를 3,000K($\sim 2,700^\circ\text{C}$)까지 가열하여 900초 이상의 경이적인 비추력($I_{sp}$)을 창출합니다. 초고온 수소 기류 하에서 초내화 세라믹 지르코늄 카바이드(ZrC) 피복재의 화학적 침식 및 탄소 확산 탈락 메커니즘을 규명하고, 노심 반응도 제어 드럼과 수소 유량을 1,000Hz 주기로 0-Alloc C# 제어하는 실시간 추진체 디지털 트윈 엔진을 공개합니다.

1. 2022 개정 교육과정 교과 연계 분석

  • 물리학 (로켓 방정식, 압축성 노즐 유동 및 비추력 공식): 치올콥스키 로켓 방정식 $\Delta v = I_{sp} g_0 \ln(m_0 / m_f)$, 드 라발 노즐 초음속 팽창 이론 $I_{sp} \propto \sqrt{T_0 / M}$, 분자량이 가장 작은 수소($M = 2.016\,\text{g/mol}$) 추진제의 효율 극대화 원리.
  • 화학/재료공학 (내화 세라믹 열역학 평형 및 고온 수소 침식 반응): 녹는점이 3,530°C인 탄화지르코늄(ZrC)의 탄소 고체 확산 및 수소 기체와의 메탄 생성 기화 반응 $\text{ZrC}_{1-x} + 2\text{H}_2 \to \text{Zr} + \text{CH}_4$, 질량 감소율 아레니우스 동역학.
  • 수학 (등엔트로피 노즐 면적비 초월방정식 및 열수력 연립 적분): 마하수-면적비 대수방정식 $A/A^* = f(M)$ 및 노심 채널 1차원 연속·운동량·에너지 보존 편미분 유한차분 해석.
  • 정보 (초저지연 1,000Hz 0-Alloc 노심 임계 반응도 및 수소 터보펌프 서보 코어): 1ms 루프 내에서 가비지 컬렉터 부하 없이 스택 메모리(`ref struct`)로 중성자선 선속과 노심 핫스팟 온도를 모니터링하여 중성자 흡수 제어 드럼을 구동하는 알고리즘.

2. 핵열추진(NTP) 초고온 가스역학 및 수소 침식 수식 모델

드 라발 노즐을 통해 진공으로 분사되는 핵열추진 로켓의 이론 비추력 $I_{sp}$는 챔버 정체 온도 $T_0$와 추진제 분자량 $M$에 의해 다음과 같이 정량화됩니다:

$$I_{sp} = \frac{1}{g_0} \sqrt{\frac{2\gamma}{\gamma - 1} \frac{R_u T_0}{M} \left[ 1 - \left( \frac{P_e}{P_0} \right)^{\frac{\gamma - 1}{\gamma}} \right]}$$

수소 가스($\gamma = 1.4, M = 2.016 \times 10^{-3}\,\text{kg/mol}$)를 사용할 때 $T_0 = 2,900\,\text{K}$에서 $I_{sp} \approx 920\,\text{s}$에 도달하여 화학 로켓($I_{sp} \approx 450\,\text{s}$) 대비 2배 이상의 추진 효율을 발휘합니다.

노심 내 ZrC 코팅 표면의 수소 부식에 의한 침식 속도 $\dot{m}_{erosion}$은 표면 온도 $T_w$와 국소 압력 $P$에 지수 함수적으로 의존합니다:

$$\dot{m}_{erosion} = A_{corr} P^{0.5} \exp\left( -\frac{E_a}{R_u T_w} \right) \quad [\text{kg}/(\text{m}^2\cdot\text{s})]$$

코팅 두께 $d_{ZrC}$가 허용 한계 이하로 마모되면 우라늄-탄소(U-C) 연료 매트릭스가 직접 노출되어 핵분열 생성물이 냉각재로 누출되므로, 노심 온도 구배를 $\pm 20\,\text{K}$ 이내로 실시간 억제해야 합니다.

3. 1,000Hz 0-Alloc C# 우주 핵열추진 제어 엔진

다음은 1ms 제어 주기 내에서 가비지 컬렉터 없이 스택 메모리를 사용하여 노심 온도, 수소 질량 유량, 비추력 및 ZrC 피복재 마모율을 연산하는 C# 엔진입니다.

NuclearPropulsionEngine.cs (Zero-Allocation C# NTP Core)
using System;
using System.Runtime.CompilerServices;

namespace ZeliDesk.Stem.NuclearPropulsion;

public readonly ref struct NtpEngineState
{
    public readonly double CoreChamberTempK;
    public readonly double SpecificImpulseSec;
    public readonly double ThrustKiloNewtons;
    public readonly double ZrcErosionRateMicronsPerHour;
    public readonly bool IsThermalLimitExceeded;

    [MethodImpl(MethodImplOptions.AggressiveInlining)]
    public NtpEngineState(double tempK, double isp, double thrustKn, double erosionUmH, bool exceeded)
    {
        CoreChamberTempK = tempK;
        SpecificImpulseSec = isp;
        ThrustKiloNewtons = thrustKn;
        ZrcErosionRateMicronsPerHour = erosionUmH;
        IsThermalLimitExceeded = exceeded;
    }
}

public ref struct NtpEngineSimulator
{
    private const double GasConstantRu = 8314.46; // J/(kmol*K)
    private const double MolWeightH2 = 2.016; // kg/kmol
    private const double GammaH2 = 1.4;
    private const double GravityG0 = 9.80665;
    private const double MaxAllowableTempK = 3100.0;

    private double _coreTemperatureK;
    private double _controlDrumAngleDeg;

    [MethodImpl(MethodImplOptions.AggressiveInlining)]
    public NtpEngineSimulator(double initialTempK = 2700.0, double initialDrumDeg = 45.0)
    {
        _coreTemperatureK = initialTempK;
        _controlDrumAngleDeg = initialDrumDeg;
    }

    [MethodImpl(MethodImplOptions.AggressiveInlining)]
    public NtpEngineState Step(double hydrogenFlowRateKgS, double targetThrustKn, double dtSeconds = 0.001)
    {
        // 1. 노심 중성자 반응도 및 핵분열 발열량 계산
        // 제어 드럼 각도 (0도 = 완전 흡수 베릴륨 반사체 차단, 180도 = 완전 반사)
        double drumReactivityDollar = (_controlDrumAngleDeg - 45.0) * 0.02;
        double nuclearPowerMw = 500.0 * (1.0 + drumReactivityDollar);

        // 2. 액체 수소 흡열 냉각 및 노심 온도 미분
        double specificHeatH2 = 14500.0; // J/(kg*K)
        double coolantRemovalMw = (hydrogenFlowRateKgS * specificHeatH2 * (_coreTemperatureK - 100.0)) * 1e-6;
        double netHeatMw = nuclearPowerMw - coolantRemovalMw;

        double thermalMassMjK = 2.5; // 노심 열용량
        _coreTemperatureK += (netHeatMw / thermalMassMjK) * dtSeconds * 1000.0;

        // 3. 초음속 노즐 비추력(Isp) 및 추력 산출
        double pressureRatioTerm = 1.0 - Math.Pow(0.0001, (GammaH2 - 1.0) / GammaH2); // 진공 팽창
        double cStar = Math.Sqrt((2.0 * GammaH2 / (GammaH2 - 1.0)) * (GasConstantRu * _coreTemperatureK / MolWeightH2) * pressureRatioTerm);
        double specificImpulseSec = (cStar * 0.96) / GravityG0; // 노즐 효율 96%
        double thrustKn = (hydrogenFlowRateKgS * specificImpulseSec * GravityG0) * 1e-3;

        // 4. ZrC 피복재 수소 부식 속도 (아레니우스 반응식, um/hour)
        double activationEnergy = 220000.0; // J/mol
        double erosionRateKgM2S = 1.5e3 * Math.Exp(-activationEnergy / (8.314 * _coreTemperatureK));
        double zrcDensity = 6730.0; // kg/m^3
        double erosionRateUmH = (erosionRateKgM2S / zrcDensity) * 1e6 * 3600.0;

        // 5. 제어 드럼 서보 PID 제어 (목표 온도 2,900K 유지)
        double tempError = 2900.0 - _coreTemperatureK;
        _controlDrumAngleDeg += tempError * 0.002 * dtSeconds * 1000.0;
        if (_controlDrumAngleDeg < 0.0) _controlDrumAngleDeg = 0.0;
        if (_controlDrumAngleDeg > 180.0) _controlDrumAngleDeg = 180.0;

        bool thermalExceeded = _coreTemperatureK > MaxAllowableTempK;

        return new NtpEngineState(_coreTemperatureK, specificImpulseSec, thrustKn, erosionRateUmH, thermalExceeded);
    }
}

4. 우주항공 방위산업 및 심우주 유인탐사 실무 가이드

  • 한국항공우주연구원(KARI) 및 우주항공청(KASA): 달 기지 수송선 및 심우주 화성 탐사용 차세대 원자력 열추진(NTP) 엔진 열설계 및 비추력 해석 교구.
  • 방통대 우호성 교수 랩실: 2022 개정 물리학Ⅰ 운동량 보존 법칙과 열역학 법칙 단원을 결합한 최첨단 우주 추진 시스템 직무연수 프로그램.
  • 한국원자력연구원(KAERI) 및 초고온소재 연구팀: 초고온 ZrC 복합 핵연료 펠릿 표면 수소 부식 저항성 검증 및 1,000Hz 0-Alloc C# 온디바이스 원자로 제어 모듈 구축.