1. 극한 열역학 환경: 고체 로켓 노즐 목의 열화학적 삭마(Erosion)

극초음속 미사일의 고체 로켓 부스터는 연소실 압력 $15\sim 20\,\text{MPa}$, 연소 가스 온도 $3,500\,\text{K}$ 이상의 가혹한 조건에서 수십 초간 거대한 추력을 뿜어냅니다.

추진제 가스가 음속($M=1$)을 돌파하는 가장 좁은 지점인 **노즐 목(Nozzle Throat)**은 단위 면적당 수백 $\text{MW/m}^2$의 극단적인 열유속과 초음속 가스 전단력, 그리고 산화 가스($H_2O, CO_2$)와의 화학적 반응에 노출됩니다.

내열재로 사용되는 3차원 탄소-탄소(C/C) 또는 탄소-페놀(Carbon-Phenolic) 인서트는 연소 진행에 따라 초당 수 밀리미터($1\sim 3\,\text{mm/s}$) 비율로 깎여나가는 **열화학적 삭마(Thermochemical Throat Erosion)**를 겪습니다.

노즐 목 단면적($A_t$)이 확장되면 연소실 압력($P_c$)이 급격히 떨어지고 특성 배기 속도($C^*$)와 진공 비추력($I_{\text{sp}}$)이 감소하여 유효 추력이 수십 퍼센트 감쇠합니다.

더욱 심각한 문제는 비대칭 삭마로 인해 추력 중심축이 틀어지는 추력선 편차(Thrust Misalignment)가 발생하여 탄도 유도 궤적을 붕괴시킨다는 점입니다.

본 백서에서는 노즐 백킹에 매립된 펄스-에코 초음파 센서로 실시간 삭마 두께를 50마이크로초(20,000Hz) 주기로 측정하고, 전기기계식 유압 추력벡터제어(TVC) 짐벌 각도와 궤적 적분기를 동적 보정하는 C# .NET 9.0 AVX-512 SIMD 추력 서보 엔진을 구현합니다.

2. 노즐 목 삭마 속도론 및 로켓 추진 특성 열역학 수학적 정식화

노즐 목 표면에서의 탄소 산화 화학 반응 제어 삭마율 $\dot{r}_{\text{erosion}}$ (Bartz 확산-동역학 하이브리드 모델):

$$\dot{r}_{\text{erosion}} = \frac{k_d k_c}{k_d + k_c} \frac{P_{c}}{\rho_c} \left( X_{\text{H}_2\text{O}} + X_{\text{CO}_2} \right), \quad k_c = A_c \exp\left(-\frac{E_a}{R T_{\text{wall}}}\right)$$

시간 $t$에 따른 노즐 목 단면적 $A_t(t)$의 팽창:

$$A_t(t) = \pi \left( r_{t, 0} + \int_0^t \dot{r}_{\text{erosion}}(\tau)\, d\tau \right)^2$$

노즐 목 면적 팽창에 따른 연소실 압력 $P_c(t)$ 및 순 추력 $F(t)$ 감소:

$$P_c(t) = \left( \frac{\rho_p a C^* A_b}{A_t(t)} \right)^{\frac{1}{1-n}}, \quad F(t) = C_F(t) P_c(t) A_t(t)$$

추력 편차 보상을 위한 20,000Hz TVC 짐벌 피치/요 각도 $\delta_{\text{TVC}}(t)$ 서보 제어 법칙:

$$\boldsymbol{\delta}_{\text{TVC}, k+1} = \boldsymbol{\delta}_{\text{TVC}, k} + \frac{\mathbf{J}_{\text{craft}}}{F(t) \cdot L_{\text{nozzle}}} \left( \ddot{\boldsymbol{\theta}}_{\text{target}} - \ddot{\boldsymbol{\theta}}_{\text{meas}} \right) + \mathbf{K}_I \int \Delta\mathbf{v}_{\text{error}}\, dt$$

3. Zero-Allocation C# .NET 9.0 AVX-512 SIMD 노즐 삭마 추력 서보

20,000Hz 주기로 연소실 압력과 초음파 잔여 두께를 판독하여 TVC 유압 짐벌 각도와 궤적 속도 보정량을 산출하는 초고속 서보 엔진입니다.

using System;
using System.Runtime.CompilerServices;
using System.Runtime.Intrinsics;
using System.Runtime.Intrinsics.X86;

namespace ZeliDesk.Defense.RocketNozzle
{
    public readonly record struct RocketMotorTelemetry(
        float ChamberPressureMpa,
        float ThroatRadiusMm,
        float MeasuredErosionRateMmPerSec,
        float AxialAccelerationG
    );

    public readonly record struct TvcServoCommand(
        float GimbalPitchAngleDeg,
        float GimbalYawAngleDeg,
        float CurrentThrustKn,
        float VelocityDeficitMs
    );

    public ref struct NozzleThroatErosionServo
    {
        private const float NOMINAL_THROAT_RADIUS_MM = 65.0f;
        private const float LEVER_ARM_METERS = 3.8f;
        private const float CRAFT_MASS_KG = 4500.0f;

        private readonly float _kp;
        private readonly float _ki;
        private float _velocityIntegralErr;
        private float _prevPressure;

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public NozzleThroatErosionServo(float kp, float ki)
        {
            _kp = kp;
            _ki = ki;
            _velocityIntegralErr = 0.0f;
            _prevPressure = 16.0f;
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public TvcServoCommand StepServo(ref readonly RocketMotorTelemetry telem, float dt, float targetPitchAccelRadS2)
        {
            // 1. 노즐 목 팽창에 따른 현재 추력 환산 (F = Cf * Pc * At)
            float atM2 = MathF.PI * (telem.ThroatRadiusMm * 1e-3f) * (telem.ThroatRadiusMm * 1e-3f);
            float thrustKn = 1.65f * (telem.ChamberPressureMpa * 1e3f) * atM2; // kN 단위

            // 2. 비대칭 삭마 추력선 왜곡 상쇄 TVC 짐벌 각도 계산
            float requiredTorqueNm = (CRAFT_MASS_KG * 0.5f * 0.4f * 0.4f) * targetPitchAccelRadS2;
            float gimbalRad = requiredTorqueNm / MathF.Max(100.0f, thrustKn * 1e3f * LEVER_ARM_METERS);
            float gimbalDeg = Math.Clamp(gimbalRad * (180.0f / MathF.PI), -8.0f, 8.0f);

            // 3. 추력 감소에 의한 속도 결손 적분 보상
            float nominalAccel = 18.0f * 9.80665f;
            float actualAccel = telem.AxialAccelerationG * 9.80665f;
            float accelDeficit = nominalAccel - actualAccel;
            _velocityIntegralErr += accelDeficit * dt;

            return new TvcServoCommand(gimbalDeg, 0.0f, thrustKn, _velocityIntegralErr);
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public static void BatchComputeThroatAreasSimd(ReadOnlySpan radiiMm, Span outAreasCm2)
        {
            float piOver100 = MathF.PI * 0.01f;
            var vCoeff = Vector256.Create(piOver100);

            int i = 0;
            for (; i <= radiiMm.Length - 8; i += 8)
            {
                var vR = Vector256.LoadUnsafe(in radiiMm[i]);
                var vRSq = Vector256.Multiply(vR, vR);
                var vArea = Vector256.Multiply(vRSq, vCoeff);
                vArea.StoreUnsafe(ref outAreasCm2[i]);
            }
            for (; i < radiiMm.Length; i++)
            {
                outAreasCm2[i] = MathF.PI * (radiiMm[i] * radiiMm[i]) * 0.01f;
            }
        }
    }
}

4. 로켓 추진 공학 및 2022 개정 화학/물리 연계