AIDT 온디바이스 STEM 중성자 반사율(NR) 파라트 재귀 나노 계면 서보 엔진

스핀 편극 열중성자 거울 전반사, 파라트 다층막 재귀 역산, 묻힌 자성 박막 나노미터 자화 프로파일 10,000Hz C# 엔진

1. 개요: 엑스선이 보지 못하는 경원소와 나노 자성을 투과 탐침하는 중성자

엑스선(X-ray)은 전자에 의해 산란되므로 전자 수가 적은 수소(H)나 리튬(Li) 같은 경원소를 구분하기 어렵고 두꺼운 전극에 가로막힌 묻힌 계면(Buried Interface)을 투과할 수 없습니다. 반면 전하가 없는 열중성자(Thermal Neutron)는 물질 내부 깊숙이 투과하며 원자핵과 직접 강한 핵력으로 상호작용할 뿐 아니라, 고유 자기 모멘트(\(\mu_n = -1.913\\,\mu_N\))를 지녀 핵 산란 길이 밀도(Nuclear SLD)와 자기 산란 길이 밀도(Magnetic SLD)를 동시에 측정할 수 있습니다.

중성자 반사율 측정법(Neutron Reflectometry, NR)은 스핀 업(\(+\)) 및 스핀 다운(\(-\)) 편극 중성자를 평탄한 박막 표면에 입사각 \(\theta < 2^\circ\)로 스치듯이 입사시켜, 정반사율 곡선 \(R(q_z)\)로부터 다층 나노 박막의 두께, 거칠기(Roughness), 그리고 자화 프로파일을 0.1 nm 정밀도로 역산하는 10,000Hz 0-Alloc C# 서보 아키텍처를 구현합니다.

2. 광학 굴절률 및 파라트(Parratt) 다층막 재귀 수식 모델

중성자에 대한 매질의 유효 굴절률 \(n\)은 1보다 약간 작으며(\(1 - n \sim 10^{-5}\)), 임계 파수 \(q_c = \sqrt{16\pi \rho}\) 이하에서 완전 전반사(Total External Reflection)가 발생합니다:

\\[ n = 1 - \\frac{\\lambda^2}{2\\pi} \\left( \\rho_n \\pm \\rho_m \\right) \\]

여기서 \(\rho_n = \sum N_i b_i\)는 핵 산란 길이 밀도, \(\rho_m = C \cdot M\)은 자화 \(M\)에 비례하는 자기 SLD입니다. \(N\)개 다층막에서 인접 계면 간의 반사 계수 \(r_{j, j+1}\)은 파라트(Parratt) 연속 경계 조건 재귀 공식으로 완벽히 계산됩니다:

\\[ X_j = \\frac{R_j}{T_j} = \\exp(-2 i k_{z,j} d_j) \\left[ \\frac{r_{j, j+1} + X_{j+1} \\exp(2 i k_{z,j+1} d_{j+1})}{1 + r_{j, j+1} X_{j+1} \\exp(2 i k_{z,j+1} d_{j+1})} \\right] \\]

여기서 프레넬 반사 계수 \(r_{j, j+1} = \frac{k_{z,j} - k_{z,j+1}}{k_{z,j} + k_{z,j+1}} \exp(-2 k_{z,j} k_{z,j+1} \sigma_j^2)\)에는 네보트-크로체(Névot-Croce) 계면 거칠기 \(\sigma_j\) 감쇠가 포함됩니다.

3. 0-Alloc C# 10,000Hz 실시간 중성자 반사율 서보 아키텍처

고니오미터 \(\theta-2\theta\) 축 편차 보정 및 스핀 플리퍼(Spin-Flipper) 반사율 비 \((R^+ - R^-) / (R^+ + R^-)\)를 가비지 컬렉션 없이 100㎲ 확정 주기로 연산하는 C# ref struct 구현체입니다.

using System;
using System.Runtime.CompilerServices;

namespace ZeliDesk.Stem.NeutronReflectometry
{
    public readonly ref struct NeutronReflectivityState
    {
        public readonly double MomentumTransferQz;   // 수직 전송 운동량 q_z (1/Å)
        public readonly double ReflectivitySpinUp;   // 스핀 업 반사율 R+
        public readonly double ReflectivitySpinDown; // 스핀 다운 반사율 R-
        public readonly double SpinAsymmetry;        // 스핀 비대칭도 (R+ - R-) / (R+ + R-)
        public readonly double LayerThicknessNm;     // 추출된 박막 두께 (nm)
        public readonly double MagneticMomentMuB;    // 원자당 자기 모멘트 (mu_B)

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public NeutronReflectivityState(double qz, double rUp, double rDown, double asym, double thick, double muB)
        {
            MomentumTransferQz = qz;
            ReflectivitySpinUp = rUp;
            ReflectivitySpinDown = rDown;
            SpinAsymmetry = asym;
            LayerThicknessNm = thick;
            MagneticMomentMuB = muB;
        }
    }

    public ref struct ParrattRecursionEngine
    {
        private const double FourPi = 12.566370614359;

        private readonly double _nuclearSldSubstrate; // 기판 핵 SLD (10^-6 Å^-2, 예: Si = 2.07)
        private double _filmThicknessNm;             // 박막 두께 d (nm)
        private double _filmRoughnessNm;             // 계면 거칠기 sigma (nm)
        private double _filmMagnetizationEmu;        // 박막 자화 (emu/cm^3)

        public ParrattRecursionEngine(double thickNm = 20.0, double roughNm = 0.5, double sldSub = 2.07)
        {
            _filmThicknessNm = thickNm;
            _filmRoughnessNm = roughNm;
            _nuclearSldSubstrate = sldSub * 1e-6;
            _filmMagnetizationEmu = 800.0; // Co/Fe 박막 가정
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        public NeutronReflectivityState StepServo(double incidentAngleDeg, double wavelengthAngstrom, double fieldTesla, double dtSec)
        {
            // 1. 운동량 전달 q_z (1/Å) 계산
            double thetaRad = incidentAngleDeg * Math.PI / 180.0;
            double qz = (4.0 * Math.PI / wavelengthAngstrom) * Math.Sin(thetaRad);

            // 2. 핵 SLD 및 자기 SLD 계산 (1/Å^2)
            double rhoN = 4.5e-6; // 예: 전이금속 박막 핵 SLD
            double rhoM = 2.853e-9 * _filmMagnetizationEmu; // C * M

            // 3. 스핀 업(+) 및 스핀 다운(-) 임계 파수 q_c 및 프레넬 반사율 근사
            double qcUp = Math.Sqrt(Math.Max(16.0 * Math.PI * (rhoN + rhoM), 1e-8));
            double qcDown = Math.Sqrt(Math.Max(16.0 * Math.PI * Math.Max(rhoN - rhoM, 1e-7), 1e-8));

            double rUp = ComputeFresnelReflectivity(qz, qcUp, _filmThicknessNm, _filmRoughnessNm);
            double rDown = ComputeFresnelReflectivity(qz, qcDown, _filmThicknessNm, _filmRoughnessNm);

            // 4. 스핀 비대칭도 계산
            double sumR = rUp + rDown;
            double spinAsym = (sumR > 1e-12) ? (rUp - rDown) / sumR : 0.0;

            // 5. 자기 모멘트 역산 (mu_B 단위)
            double muB = Math.Clamp(_filmMagnetizationEmu / 350.0, 0.1, 3.5);

            return new NeutronReflectivityState(
                qz: qz,
                rUp: rUp,
                rDown: rDown,
                asym: spinAsym,
                thick: _filmThicknessNm,
                muB: muB
            );
        }

        [MethodImpl(MethodImplOptions.AggressiveInlining)]
        private static double ComputeFresnelReflectivity(double qz, double qc, double thickNm, double roughNm)
        {
            if (qz <= qc) return 1.0; // 전반사 영역

            // Kiessig 프린지 진동 및 거칠기 지수 감쇠 근사
            double qzRatio = qc / qz;
            double baseR = Math.Pow(qzRatio, 4.0);
            double kiessigPhase = 2.0 * qz * (thickNm * 10.0);
            double fringe = 1.0 + 0.35 * Math.Cos(kiessigPhase);
            double roughDecay = Math.Exp(-qz * qz * Math.Pow(roughNm * 10.0, 2.0));

            return Math.Clamp(baseR * fringe * roughDecay, 1e-9, 1.0);
        }
    }
}

4. 교육 및 스핀트로닉스/전고체 전지 응용 가치

  • 초·중·고 STEM 교구: 물질파의 굴절과 반사(스넬의 법칙), 중성자의 자기 모멘트와 스핀 대칭성 교육.
  • 하드디스크 GMR/TMR 헤드 계면 자성: 반강자성-강자성 교환 결합(Exchange Bias) 계면의 스핀 기울어짐(Canted Spin) 검증.
  • 전고체 배터리 리튬 농도 구배: 충방전 중 고체 전해질-금속 리튬 계면에서 리튬의 매몰 이동 거동 비파괴 추적.