本文档记录了使用 OpenClaw 辅助开发 PHITS 蒙特卡洛粒子输运模拟的过程,包括踩坑记录、配置心得和输入文件详细教程。
📅 日期:2026-03-28
🎯 背景
为核源反演研究建立 20源 × 15探测器 贡献矩阵,需要使用 PHITS 进行大规模蒙特卡洛模拟。
目标:生成贡献矩阵 A,用于 ElasticNet 回归训练
· A ∈ ℝ²⁰ˣ¹⁵
· 每行:某个源在15个探测器上的响应
· 每列:所有源对某个探测器的贡献
🖥️ 环境配置
超级计算机
| 项目 | 值 |
|------|-----|
| 核数 | 128 核 |
| 内存 | 1 TB |
PHITS 安装
路径:/home/wangepyc1/linux/phits/
├── bin/phits335linopenmp.exe (OpenMP 并行版)
└── data/xsdir.jnd (核数据索引)
关键路径配置
file(1) = /home/wangepyc1/linux/phits ← 必须指向 PHITS 根目录
file(7) = /home/wangepyc1/linux/phits/data/xsdir.jnd
⚠️ 关键踩坑记录
1. file(1) 路径问题
错误:set values error 或 nuclear data 缺失
原因:file(1) 必须设为 PHITS 根目录,不是 bin/ 子目录
解决:
file(1) = /home/wangepyc1/linux/phits
2. Material 格式问题
错误:odd entries in material 或 unknown element
正确格式:
[ M a t e r i a l ]
m1 N 4.0586E-05
O 1.0800E-05
Ar 2.4255E-07
注意:
· 使用元素符号,不是 Z 值
· 原子分数,不是质量分数
· 奇数条目(元素-分数-元素-分数...)
3. CsI 探测器材料
CsI (Tl) 配置:
m2 Cs 1.0
I 1.0
密度在 Cell 定义中指定:
31 2 -4.51 -31
其中 -4.51 是 CsI 密度 (g/cm³)
4. Cell 定义 - 密度格式
格式:region material -density surface_specification
示例:
31 2 -4.51 -31 ← region 31, material 2, density -4.51, inside surface 31
注意:密度是负值(表示 g/cm³)
5. 矩形房间 (RPP) 不可用
错误:crossing surface does not exist in all cell
原因:RPP 的 6 个平面边界处理复杂,与探测器嵌套定义冲突
解决:使用球形房间
1 so 500 ← 内球:空气,半径 500 cm
99 so 2000 ← 外球:空洞,半径 2000 cm
6. 源在探测器外部 - 信号为 0
问题:源在 (0,0,0),探测器在 z=20cm,T-Deposit 始终为 0
分析:
· 662 keV 光子在空气中衰减长度约 30 m
· 但 T-Deposit 测的是能量沉积,不是粒子数
· 粒子从外部进入 CsI,只碰一下就散射走
成功配置:同心球(源在探测器内部)
31 SPH 0 0 0 30 ← 探测器球心在 (0,0,0)
x0 = 0, y0 = 0, z0 = 0 ← 源在球心
✅ 最终成功配置
几何
球形空气区域:so 500
外层空洞球: so 2000
材料
m1 N 4.0586E-05 ← 空气
O 1.0800E-05
Ar 2.4255E-07
m2 Cs 1.0 ← CsI(Tl)
I 1.0
源
s-type = 1 ← 点源
proj = photon ← 光子
x0 = 0, y0 = 0, z0 = 0
e0 = 0.662 ← 662 keV (Cs-137)
dir = 0 ← 各向同性
wgt = 1E11 ← 活度
Tally
[ T - D e p o s i t ]
mesh = reg
reg = 31 32 ... 45
unit = 1
output = dose
axis = reg
file = result.txt
📊 20×15×300 最终方案
策略:每次 1 源 + 1 探测器,避免多探测器冲突
配置:
· 20 个源位置:4×5 网格,z=1 cm
· 15 个探测器位置:z=15 cm,XY 散布
· 共 300 次模拟
· 粒子数:1E8 × 10 批次 = 10 亿粒子/次
📖 PHITS 输入文件详细教程
1. 基本结构
[ T i t l e ]
标题
[ P a r a m e t e r s ]
参数
[ M a t e r i a l ]
材料定义
[ S o u r c e ]
源定义
[ S u r f a c e ]
几何表面
[ C e l l ]
几何区域
[ V o l u m e ]
体积(可选,让 PHITS 自动计算或手动指定)
[ T - T r a c k 或 T - D e p o s i t ]
计数
[ E n d ]
2. [Parameters] 参数区
[ P a r a m e t e r s ]
maxcas = 1E6 ← 每批次粒子数
maxbch = 5 ← 批次数量
file(1) = /path/to/phits ← PHITS 根目录
file(7) = /path/to/xsdir.jnd ← 核数据索引
3. [Material] 材料区
空气:
m1 N 4.0586E-05
O 1.0800E-05
Ar 2.4255E-07
CsI (Tl):
m2 Cs 1.0
I 1.0
水:
m1 1H 6.6832156E-02
16O 3.3416078E-02
注意:
· 元素符号可用 H、O、Fe 或 1H、8O、26Fe 格式
· 原子分数(不用负号),或质量密度(用负号)
4. [Source] 源区
点源(各向同性):
s-type = 1
proj = photon
x0 = 0
y0 = 0
z0 = 0
e0 = 0.662 ← MeV
dir = 0 ← 0=各向同性,1=z方向
wgt = 1E11 ← 活度(可选)
定向源:
s-type = 1
proj = photon
x0 = 0
y0 = 0
z0 = 0
e0 = 0.662
dir = 1.0 ← cosθ,1.0 = 沿 +z 方向
面源:
s-type = 3 ← 面源
proj = photon
x0 = 0
y0 = 0
z0 = 0
e0 = 0.662
r0 = 10 ← 半径
dir = 1.0
5. [Surface] 表面区
球面 (Sphere):
1 so 500 ← 球心在原点,半径 500 cm
31 SPH 100 0 0 30 ← 球心在 (100,0,0),半径 30 cm
立方体 (RPP - Rectangular Parallelepiped):
1 rpp -100 100 -100 100 0 200
← x: -100~100, y: -100~100, z: 0~200
圆柱 (Cylinder):
1 cz 50 ← 半径 50 cm
6. [Cell] 区域区
基本格式:region material density surface_specification
示例:
1 1 -0.001214 -1 +31
← region 1, material 1, density 0.001214 g/cm³, inside surface 1, outside surface 31
31 2 -4.51 -31
← region 31 (探测器), material 2 (CsI), density -4.51 g/cm³, inside surface 31
99 -1 0 99 #1
← region 99 (外层空洞), material -1 (void), 0 密度, inside surface 99, outside #1
密度格式:
· 正值:g/cm³
· 负值:g/cm³(PHITS 内部取绝对值)
· 材料编号 0 = void,-1 = 外推空洞
表面运算符:
| 运算符 | 含义 |
|--------|------|
| # | 互补(不在该表面内) |
| + | 在表面内侧 |
| - | 在表面外侧 |
7. [Volume] 体积区
[ V o l u m e ]
non reg vol ← 非结构化网格,region 体积
1 1 5.236E8 ← region 1, 体积 5.236×10⁸ cm³
31 31 1.413E4 ← region 31, 体积 1.413×10⁴ cm³
或让 PHITS 自动计算(去掉 [Volume] 区)
8. [T-Track] 粒子通量计数
[ T - T r a c k ]
mesh = reg
reg = 31 32 33
axis = reg
file = track_result.txt
part = photon
e-type = 2
emin = 0.1
emax = 3.0
参数说明:
· mesh = reg:按区域计数
· reg:区域列表
· part:粒子类型(photon, neutron, all...)
· e-type = 2:能量沉积模式
· emin/emax:能量范围
9. [T-Deposit] 能量沉积计数
[ T - D e p o s i t ]
mesh = reg
reg = 31 32 33
unit = 1
output = dose
axis = reg
file = deposit_result.txt
参数说明:
· output = dose:输出总能量沉积
· unit = 1:[MeV/cm³/source]
· axis = reg:按区域输出
10. 执行与输出
执行:
cd ~/linux/phits/bin
./phits335linopenmp.exe < input.inp
输出文件:
· phits.out:主输出
· 自定义文件(如 result.txt)
查看结果:
grep -A 20 "num" result.txt
🧪 常见问题排查
| 问题 | 原因 | 解决 |
|------|------|------|
| set values error | file(1) 路径错误 | 指向 PHITS 根目录 |
| odd entries in material | 材料定义条目为偶数 | 确保元素-分数交替 |
| crossing surface does not exist | RPP 边界问题 | 改用球形几何 |
| T-Deposit 全为 0 | 探测器材料或几何问题 | 使用 CsI,检查粒子数 |
| 粒子丢失 | 外层空洞太小 | 增大 so 半径 |
📁 相关文件
| 文件 | 说明 |
|------|------|
| /root/linux/phits/manual/manualE-phits.pdf | 官方英文手册 |
| /root/linux/phits/sample/tally/t-deposit/ | T-Deposit 示例 |
| /root/linux/phits/sample/tally/t-track/ | T-Track 示例 |
| /root/linux/phits/data/material.inp | 材料数据库 |
最后更新:2026-03-29
夜雨聆风