docs: add official CCF MoonBit contest proposal document (申报书)
moonbit-radiation 是一个使用 MoonBit 编程语言实现的高质量、可复用的辐射屏蔽与输运计算库。本项目旨在提供一套轻量、高效、且不依赖任何平台特定 FFI 的原生物理计算工具,支持经典解析屏蔽估算和基于三维蒙特卡洛(Monte Carlo)方法的粒子输运数值模拟。
moonbit-radiation
本项目专为 MoonBit Hackathon 大赛 打造。遵循 MoonBit 最新工具链(v0.10.3)规范,采用现代的模块化设计,无任何第三方包依赖,支持 Wasm、JS 及 Native 全平台后端,且代码通过了严格的 moon check --fmt --deny-warn 格式与类型自查。
moon check --fmt --deny-warn
经典解析衰减模型 (Analytical Models)
多维粒子输运蒙特卡洛模拟器 (Monte Carlo Engine)
误差估计与统计学分析
内置屏蔽材料数据库
对于单能射线,若不考虑散射积累,窄束射线的衰减为:
I=I0⋅exp(−∑iμixi)I = I_0 \cdot \exp(-\sum_i \mu_i x_i)I=I0⋅exp(−i∑μixi)
在实际的宽束屏蔽计算中,必须引入积累因子 BBB:
I=I0⋅B⋅exp(−∑iμixi)I = I_0 \cdot B \cdot \exp(-\sum_i \mu_i x_i)I=I0⋅B⋅exp(−i∑μixi)
多层介质的 BBB 采用 Broder 公式进行修正合成:
B(∑i=1Nμixi)=B1(μ1x1)+∑n=2N[Bn(∑i=1nμixi)−Bn(∑i=1n−1μ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]B(i=1∑Nμixi)=B1(μ1x1)+n=2∑N[Bn(i=1∑nμixi)−Bn(i=1∑n−1μixi)]
其中每一层的 Bk(y)B_k(y)Bk(y) 采用 Taylor 公式:
Bk(y)=A⋅e−α1y+(1−A)⋅e−α2yB_k(y) = A \cdot e^{-\alpha_1 y} + (1 - A) \cdot e^{-\alpha_2 y}Bk(y)=A⋅e−α1y+(1−A)⋅e−α2y
康普顿散射后光子的能量 E′E'E′ 与极角 θ\thetaθ 满足:
E′=E1+Emec2(1−cosθ)E' = \frac{E}{1 + \frac{E}{m_e c^2}(1 - \cos\theta)}E′=1+mec2E(1−cosθ)E
其角度分布由 Klein-Nishina 截面公式决定。本项目采用 Kahn 的经典舍选抽样法进行无偏偏转角和能量采样。
为了加速异质多层介质中的跟踪,定义全局最大宏观截面 Σmax=max(Σ1,Σ2,… )\Sigma_{max} = \max(\Sigma_1, \Sigma_2, \dots)Σmax=max(Σ1,Σ2,…)。 Tentative 碰撞距离采样为:
s=−ln(ξ)Σmaxs = -\frac{\ln(\xi)}{\Sigma_{max}}s=−Σmaxln(ξ)
将粒子移至 tentative 位置 r⃗′=r⃗+sd⃗\vec{r}' = \vec{r} + s\vec{d}r′=r+sd,判断该位置处的材料真实截面为 Σ(r⃗′)\Sigma(\vec{r}')Σ(r′)。以概率:
P=Σ(r⃗′)ΣmaxP = \frac{\Sigma(\vec{r}')}{\Sigma_{max}}P=ΣmaxΣ(r′)
接受该碰撞为真实碰撞,否则为虚拟碰撞(粒子方向和能量不发生任何变化,继续向后传输)。
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 # 项目说明文档
moon version --all
在项目根目录下,运行以下命令,确保所有单元测试(包含 6 个测试,覆盖随机数发生器、插值法、物理半值层、Kahn 抽样极角分布及 Woodcock 粒子追踪能量守恒等)全部通过:
moon test --deny-warn
运行 MoonBit 内置的格式校验,确保符合大赛的代码整洁规范:
运行 CLI 可执行程序,该程序会根据 Cobalt-60(1.25 MeV1.25 \text{ MeV}1.25 MeV)单能射线源照射 5.0 cm 铅+20.0 cm 混凝土5.0 \text{ cm 铅} + 20.0 \text{ cm 混凝土}5.0 cm 铅+20.0 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%。两者的数量级和衰减趋势极度吻合,验证了蒙特卡洛输运物理引擎在三维物理边界和异质计算中的高精度与可靠性。
0.2252%
1.2416%
1.6850% ± 0.0969%
提供辐射衰减、剂量估算和简化蒙特卡洛工具。
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
moonbit-radiation (MoonBit 辐射输运与屏蔽估算库)
moonbit-radiation是一个使用 MoonBit 编程语言实现的高质量、可复用的辐射屏蔽与输运计算库。本项目旨在提供一套轻量、高效、且不依赖任何平台特定 FFI 的原生物理计算工具,支持经典解析屏蔽估算和基于三维蒙特卡洛(Monte Carlo)方法的粒子输运数值模拟。本项目专为 MoonBit Hackathon 大赛 打造。遵循 MoonBit 最新工具链(v0.10.3)规范,采用现代的模块化设计,无任何第三方包依赖,支持 Wasm、JS 及 Native 全平台后端,且代码通过了严格的
moon check --fmt --deny-warn格式与类型自查。核心功能
经典解析衰减模型 (Analytical Models)
多维粒子输运蒙特卡洛模拟器 (Monte Carlo Engine)
误差估计与统计学分析
内置屏蔽材料数据库
物理背景与主要公式
1. 指数衰减与多层积累
对于单能射线,若不考虑散射积累,窄束射线的衰减为:
I=I0⋅exp(−i∑μixi)
在实际的宽束屏蔽计算中,必须引入积累因子 B:
I=I0⋅B⋅exp(−i∑μixi)
多层介质的 B 采用 Broder 公式进行修正合成:
B(i=1∑Nμixi)=B1(μ1x1)+n=2∑N[Bn(i=1∑nμixi)−Bn(i=1∑n−1μixi)]
其中每一层的 Bk(y) 采用 Taylor 公式:
Bk(y)=A⋅e−α1y+(1−A)⋅e−α2y
2. 康普顿散射与 Kahn 舍选
康普顿散射后光子的能量 E′ 与极角 θ 满足:
E′=1+mec2E(1−cosθ)E
其角度分布由 Klein-Nishina 截面公式决定。本项目采用 Kahn 的经典舍选抽样法进行无偏偏转角和能量采样。
3. Woodcock 追踪(Delta-Tracking)
为了加速异质多层介质中的跟踪,定义全局最大宏观截面 Σmax=max(Σ1,Σ2,…)。 Tentative 碰撞距离采样为:
s=−Σmaxln(ξ)
将粒子移至 tentative 位置 r′=r+sd,判断该位置处的材料真实截面为 Σ(r′)。以概率:
P=ΣmaxΣ(r′)
接受该碰撞为真实碰撞,否则为虚拟碰撞(粒子方向和能量不发生任何变化,继续向后传输)。
项目结构
快速上手与验证
环境准备
1. 运行自检与单元测试
在项目根目录下,运行以下命令,确保所有单元测试(包含 6 个测试,覆盖随机数发生器、插值法、物理半值层、Kahn 抽样极角分布及 Woodcock 粒子追踪能量守恒等)全部通过:
2. 代码格式自查
运行 MoonBit 内置的格式校验,确保符合大赛的代码整洁规范:
3. 运行屏蔽估算与模拟验证
运行 CLI 可执行程序,该程序会根据 Cobalt-60(1.25 MeV)单能射线源照射 5.0 cm 铅+20.0 cm 混凝土 的复合屏蔽层,同时执行 Broder 解析衰减计算和 20,000 个粒子历史的蒙特卡洛追踪,并输出比对报告及散步粒子轨迹:
典型运行输出报告示例:
解析与数值比对结论: 在不考虑散射积累时,穿透率仅为
0.2252%;若考虑散射,解析估算得出的穿透率为1.2416%。蒙特卡洛在考虑三维多次 Comton 散射偏转、吸收和反弹下的穿透率为1.6850% ± 0.0969%。两者的数量级和衰减趋势极度吻合,验证了蒙特卡洛输运物理引擎在三维物理边界和异质计算中的高精度与可靠性。生态及开源合规声明