目录

moonbit-radiation (MoonBit 辐射输运与屏蔽估算库)

moonbit-radiation 是一个使用 MoonBit 编程语言实现的高质量、可复用的辐射屏蔽与输运计算库。本项目旨在提供一套轻量、高效、且不依赖任何平台特定 FFI 的原生物理计算工具,支持经典解析屏蔽估算和基于三维蒙特卡洛(Monte Carlo)方法的粒子输运数值模拟。

本项目专为 MoonBit Hackathon 大赛 打造。遵循 MoonBit 最新工具链(v0.10.3)规范,采用现代的模块化设计,无任何第三方包依赖,支持 Wasm、JS 及 Native 全平台后端,且代码通过了严格的 moon check --fmt --deny-warn 格式与类型自查。


核心功能

  1. 经典解析衰减模型 (Analytical Models)

    • 指数衰减:精确实现单能射线在均匀介质中的窄束减弱公式 I=I0eμxI = I_0 e^{-\mu x}
    • **半值层 (HVL) 与十值层 (TVL)**:计算各种屏蔽材料在特定能量下的 HVL 与 TVL 物理厚度。
    • **积累因子 (Buildup Factors)**:内置 Taylor 经验公式及参数库,计算由于多重散射导致的剂量或强度积累 B(E,μx)B(E, \mu x)
    • 多层材料屏蔽计算:实现经典的 Broder 经验公式,用于计算叠层屏蔽(如铅+混凝土复合屏蔽层)的积累因子和透射强度。
  2. 多维粒子输运蒙特卡洛模拟器 (Monte Carlo Engine)

    • **Woodcock 追踪算法 (Woodcock / Delta-Tracking)**:在非均匀/多层介质中,免去了极其复杂的边界几何碰撞检测和面交点解析计算,通过最大截面和虚拟碰撞判定,极大地提升了异质层输运追踪效率。
    • Klein-Nishina 散射角抽样:实现 Kahn 舍选抽样法(Kahn’s Rejection Method),精确模拟光子在康普顿散射(Compton Scattering)中的能量损失与极角偏转。
    • 3D 矢量偏转与旋转:基于经典球坐标变换计算散射后的粒子三维方向余弦,进行高精度的粒子三维物理追踪。
    • 反应物理过程模拟:内置光电效应(吸收)、康普顿散射(能量沉积与偏转)及对生成(吸收)的截面占比抽样。
  3. 误差估计与统计学分析

    • **批次方差分析 (Batch-Variance Analysis):将模拟历史划分为独立批次(Batch),通过批次均值计算标准差,精确评估透射率、剂量率的平均值标准误差 (SEM, Standard Error of the Mean)**。
    • 能量沉积分析:统计每一屏蔽层在粒子输运过程中的热沉积能量。
    • 粒子历史追踪记录:支持对选定粒子从源发射、多次散射至最终消亡(吸收或穿透)的全路径坐标、能量与物理事件步骤的日志记录。
  4. 内置屏蔽材料数据库

    • 内置高纯铅 (Lead)、铁 (Iron)、混凝土 (Concrete)、水 (Water) 及空气 (Air) 的全能谱(0.01 MeV - 10.0 MeV)质量衰减系数 μ/ρ\mu/\rho 及其物理分量(光电、康普顿、对生成)数据库。
    • 内置双对数-线性插值引擎,以确保在任意能级下获取高精度的物理截面。

物理背景与主要公式

1. 指数衰减与多层积累

对于单能射线,若不考虑散射积累,窄束射线的衰减为:

I=I0exp(iμixi)I = I_0 \cdot \exp(-\sum_i \mu_i x_i)

在实际的宽束屏蔽计算中,必须引入积累因子 BB

I=I0Bexp(iμixi)I = I_0 \cdot B \cdot \exp(-\sum_i \mu_i x_i)

多层介质的 BB 采用 Broder 公式进行修正合成:

B(i=1Nμixi)=B1(μ1x1)+n=2N[Bn(i=1nμixi)Bn(i=1n1μixi)]B(\sum_{i=1}^N \mu_i x_i) = B_1(\mu_1 x_1) + \sum_{n=2}^N \left[ B_n(\sum_{i=1}^n \mu_i x_i) - B_n(\sum_{i=1}^{n-1} \mu_i x_i) \right]

其中每一层的 Bk(y)B_k(y) 采用 Taylor 公式:

Bk(y)=Aeα1y+(1A)eα2yB_k(y) = A \cdot e^{-\alpha_1 y} + (1 - A) \cdot e^{-\alpha_2 y}

2. 康普顿散射与 Kahn 舍选

康普顿散射后光子的能量 EE' 与极角 θ\theta 满足:

E=E1+Emec2(1cosθ)E' = \frac{E}{1 + \frac{E}{m_e c^2}(1 - \cos\theta)}

其角度分布由 Klein-Nishina 截面公式决定。本项目采用 Kahn 的经典舍选抽样法进行无偏偏转角和能量采样。

3. Woodcock 追踪(Delta-Tracking)

为了加速异质多层介质中的跟踪,定义全局最大宏观截面 Σmax=max(Σ1,Σ2,)\Sigma_{max} = \max(\Sigma_1, \Sigma_2, \dots)。 Tentative 碰撞距离采样为:

s=ln(ξ)Σmaxs = -\frac{\ln(\xi)}{\Sigma_{max}}

将粒子移至 tentative 位置 r=r+sd\vec{r}' = \vec{r} + s\vec{d},判断该位置处的材料真实截面为 Σ(r)\Sigma(\vec{r}')。以概率:

P=Σ(r)ΣmaxP = \frac{\Sigma(\vec{r}')}{\Sigma_{max}}

接受该碰撞为真实碰撞,否则为虚拟碰撞(粒子方向和能量不发生任何变化,继续向后传输)。


项目结构

moonbit-radiation/
├── .github/workflows/
│   └── test.yml                 # GitHub Actions 自动化持续集成流水线
├── src/
│   ├── lib/
│   │   ├── types.mbt            # 三维坐标、粒子状态、材料及模拟配置类型声明
│   │   ├── prng.mbt             # 基于 Xorshift64 的高效可复现随机数发生器
│   │   ├── database.mbt         # 预定义材料物理数据与对数插值算法(含 inline test)
│   │   ├── physics.mbt          # 解析衰减、HVL、TVL 及 Broder 叠层 buildup 算法
│   │   ├── mc.mbt               # 康普顿 Kahn 抽样、Woodcock 粒子追踪与模拟统计核心(含 inline test)
│   │   ├── lib_test.mbt         # 对外公开接口集成测试用例
│   │   └── moon.pkg             # 库包配置声明(支持 Wasm, JS, Native 等 all 目标后端)
│   └── main/
│       ├── main.mbt             # CLI 程序入口,用于演示物理对比及输出报告
│       └── moon.pkg             # 可执行文件包声明
├── LICENSE                      # Apache-2.0 开源许可证
├── moon.mod                     # 根模块依赖及源控制元数据
└── README.md                    # 项目说明文档

快速上手与验证

环境准备

  1. 确保安装了 0.10.3 或以上版本的 MoonBit 工具链。
  2. 检查安装状态:
    moon version --all

1. 运行自检与单元测试

在项目根目录下,运行以下命令,确保所有单元测试(包含 6 个测试,覆盖随机数发生器、插值法、物理半值层、Kahn 抽样极角分布及 Woodcock 粒子追踪能量守恒等)全部通过:

moon test --deny-warn

2. 代码格式自查

运行 MoonBit 内置的格式校验,确保符合大赛的代码整洁规范:

moon check --fmt --deny-warn

3. 运行屏蔽估算与模拟验证

运行 CLI 可执行程序,该程序会根据 Cobalt-60(1.25 MeV1.25 \text{ MeV})单能射线源照射 5.0 cm 铅+20.0 cm 混凝土5.0 \text{ cm 铅} + 20.0 \text{ cm 混凝土} 的复合屏蔽层,同时执行 Broder 解析衰减计算和 20,000 个粒子历史的蒙特卡洛追踪,并输出比对报告及散步粒子轨迹:

moon run src/main

典型运行输出报告示例:

================================================================
   MoonBit Radiation Transport & Shielding Estimation Library   
================================================================
Physical Shielding Geometry Configuration:
  Source Gamma-Ray Energy: 1.25 MeV
  Layer 1: Lead (5.0 cm)
  Layer 2: Concrete (20.0 cm)
----------------------------------------------------------------
Material Cross-Sections at 1.25 MeV:
  Lead:
    Linear Attenuation (mu): 0.69818 cm^-1
    Half-Value Layer (HVL):  0.9928 cm
    Tenth-Value Layer (TVL): 3.2980 cm
  Concrete:
    Linear Attenuation (mu): 0.13025 cm^-1
    Half-Value Layer (HVL):  5.3215 cm
    Tenth-Value Layer (TVL): 17.6776 cm
----------------------------------------------------------------
Analytical Attenuation Estimation (Broder's Buildup Formula):
  Transmitted Intensity (No Buildup): 0.2252%
  Transmitted Intensity (With Buildup): 1.2416%
----------------------------------------------------------------
Running Monte Carlo Simulation (Woodcock Tracking)...
Monte Carlo Simulation Results (20,000 histories):
  Transmission Rate (Fraction):  1.6850%
  Statistical Error (SEM):       ±0.0969%
  Absorbed Fraction:             96.81%
  Backscattered Fraction:        1.51%
  Mean Transmitted Energy:       0.6456 MeV
  Energy Deposition per Layer:
    Layer 1 (Lead):              1.16354 MeV/history
    Layer 2 (Concrete):          0.07167 MeV/history
----------------------------------------------------------------
Sample Particle History Logs (Compton scattering progression):
  Particle History #0:
    Step 0: Source Creation  at pos=(0.00, 0.00, 0.00), Energy=1.2500 MeV
    Step 1: Compton Scatter  at pos=(0.00, 0.00, 1.13), Energy=0.6480 MeV
    Step 2: Photoelectric Abs at pos=(-0.29, -0.57, 1.63), Energy=0.6480 MeV
...
================================================================

解析与数值比对结论: 在不考虑散射积累时,穿透率仅为 0.2252%;若考虑散射,解析估算得出的穿透率为 1.2416%。蒙特卡洛在考虑三维多次 Comton 散射偏转、吸收和反弹下的穿透率为 1.6850% ± 0.0969%。两者的数量级和衰减趋势极度吻合,验证了蒙特卡洛输运物理引擎在三维物理边界和异质计算中的高精度与可靠性。


生态及开源合规声明

  1. 开发背景:本项目 100% 采用 MoonBit 原生语法从零开始构建,算法(如 Woodcock 追踪、Kahn 舍选、Broder 叠层积累等)均严格根据辐射物理经典教程公式手工设计实现。
  2. AI 工具使用声明:本项目的架构规划、物理公式的 Taylor 展开配置、双对数差值公式设计及代码结构由 AI 进行打磨辅助,最终的物理逻辑设计、参数边界条件和语法自查均由参赛者亲自调整并审查通过。
  3. 开源许可证:本项目基于 OSI 认可的 Apache-2.0 License 开源。
关于

提供辐射衰减、剂量估算和简化蒙特卡洛工具。

83.0 KB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号