乐于分享
好东西不私藏

PHITS * OpenClaw 开发日志

PHITS * OpenClaw 开发日志



本文档记录了使用 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