MCNP运算及代码基础结构和可视化软件VISED的使用:从UltraEdit编辑到3D View验证
1. MCNP 输入卡到底长什么样从 Cell 到 Surface 再到数据块MCNP 是核工程领域做粒子输运模拟的经典程序它能算中子、光子、电子在复杂几何里的行为适合反应堆屏蔽设计、探测器响应、剂量评估这类场景。但很多人第一次打开它的输入文件时会被三块结构搞晕几何、面、数据。我把它类比成搭乐高——Cell 是“房间”Surface 是“墙”数据块是“房间里放什么、怎么跑”。一个完整的 MCNP 输入文件由三部分组成中间用空行隔开第一块是Cell Card栅元卡描述每个区域的编号、材料、密度和它被哪些面围成。格式是j m d geom imp:n...其中j是 Cell 编号m是材料号0 表示真空d是密度负数表示 g/cm³geom是面号与布尔运算符组成的几何描述。第二块是Surface Card面卡定义所有几何面的方程。比如px 0.105表示垂直于 x 轴、位于 x0.105 的平面so 9表示以原点为球心、半径 9 的球面。第三块是Data Card数据卡包含模式、源、材料、计数、粒子数等。比如mode e表示只输运电子sdef定义源f12:e是计数卡m1是材料卡nps是粒子数。下面是一个可以直接复制的最小可运行模板模拟铝材料正方体中的电子输运Electrons in Al for CSDN c ---- Cell Card ---- 1 1 -2.7 -1 2 -3 4 -5 6 imp:e1 2 0 -7 #1 imp:e1 3 0 7 imp:e0 c ---- Surface Card ---- 1 px 0.105 2 px 0.205 3 py 0.5 4 py -0.5 5 pz 0.5 6 pz -0.5 7 so 9 c ---- Data Card ---- mode e imp:e 1 1 0 sdef par3 pos0 0 0 vec1 0 0 dir1 erg1 si1 0 0.01 sp1 0 1 f12:e 1 m1 13000 1 nps 200000注意几个容易踩的坑Cell 卡里#1表示“除了 1 号 Cell 以外的区域”布尔运算的顺序会影响几何解释面卡里px后面的数值单位是 cm数据卡里imp:e的个数必须和 Cell 数量一致否则会报 “imp card has wrong number of entries”。写完之后你需要一个能高亮语法、方便改卡的工具。UltraEdit 就是很多核工程人常用的选择下一节讲怎么配。2. UltraEdit 语法高亮配置与 MCNP 输入文件编辑规范UltraEdit 本身不带 MCNP 语法高亮但它的词法文件是开放的你可以自己加一个。我试过在 UE 里配一套 MCNP 关键字高亮改卡效率提升很明显——面号、材料号、计数卡一眼能区分。2.1 新建 MCNP 词法文件打开 UltraEdit菜单路径高级 → 配置 → 编辑器显示 → 语法高亮 → 高级。在“语言”列表里点“添加”语言名填MCNP扩展名填inp。然后点“打开”编辑词法文件把下面内容粘进去/LANGNAMEMCNP /EXTENSIONSinp /LINE COMMENT c /BLOCK COMMENT /* */ /STRING /STRING /KEYWORD mode sdef si1 sp1 f12:e m1 nps imp:e /KEYWORD cell surface data /KEYWORD px py pz so sx sy sz /KEYWORD erg pos vec dir par /KEYWORD 13000 26000 82000保存后重启 UE打开.inp文件就能看到关键字变色。c开头的注释行会变灰面卡类型px/py/pz/so会高亮材料号也能一眼识别。2.2 编辑规范空行与缩进MCNP 对格式其实很宽容但有几个硬规则三块之间必须用空行隔开否则程序会把数据卡当成面卡解析。注释行以c开头且c后面至少一个空格。一行写不下可以用续行但续行开头要留空格。面卡和 Cell 卡的编号不能重复建议 Cell 用 1–99Surface 用 100 以上避免冲突。在 UE 里我习惯把 Tab 设成 4 空格路径高级 → 配置 → 编辑器 → 自动换行/制表符勾选“用空格代替制表符”。这样复制到别的机器上不会因为 Tab 宽度不同而错位。2.3 一个常见的编辑错误很多人写imp:e时只写一个值比如imp:e 1但 Cell 有 3 个MCNP 会报bad trouble in subroutine impcard imp card has wrong number of entries正确写法是每个 Cell 一个值用空格隔开imp:e 1 1 0。在 UE 里可以用列编辑模式AltC快速对齐这些值改起来比逐行敲快很多。配好高亮和缩进之后下一步就是把文件丢给 VISED 做几何验证。3. VISED 加载 inp 文件与 3D View 检查 Cell 几何VISED 是 MCNP 的可视化配套工具能读.inp文件画出二维截面和三维几何还能叠加粒子轨迹。对初学者来说它最大的价值是在跑运算之前先确认几何没画错。3.1 二维视角直接加载 inp打开 VISED菜单File → Open选择你的.inp文件。它会自动解析 Cell 和 Surface在左侧列出所有 Cell 编号。点击任意 Cell右侧会显示该 Cell 在三个坐标平面上的投影。如果你只看到空白检查两点一是文件里有没有空行分隔三块二是 Surface 卡有没有语法错误。VISED 对格式比 MCNP 本身更敏感一个多余的空格都可能导致解析失败。3.2 三维立体图3D View 操作步骤这是核心操作按下面顺序点菜单栏点击3D View。在下拉里选Dynamic Plotting。下方会出现一个横框输入你要画的 Cell 编号比如1。多个 Cell 用逗号隔开比如1,2。点击3D Display按钮。等几秒窗口里会出现一个半透明的正方体那就是你的铝块。用鼠标左键拖动旋转滚轮缩放右键平移。如果几何有重叠或遗漏你会看到面片穿插或者空洞。我踩过的坑第一次画的时候只输入了 Cell 1结果球面so 9没显示出来以为几何错了。后来发现是 Cell 2 和 3 没加进去。把1,2,3都输入后球壳和外部真空区就完整了。3.3 用 VISED 检查粒子轨迹VISED 还能读 MCNP 输出的runtpe文件叠加粒子轨迹。操作File → Open Tally选runtpe然后在 3D View 里勾选 “Show Tracks”。这样你能直观看到电子从原点出发、穿过铝块、被球面边界截断的过程。如果轨迹在某个面突然消失说明那个面的imp设成了 0粒子被 killed 了。几何确认无误后就可以跑 MCNP 了。4. 运行 MCNP5 与结果提取从命令行到 UE 后处理几何验证通过后把.inp文件放到一个自建文件夹里比如D:\mcnp_run\al_electron。不要放在桌面或中文路径下MCNP5 对路径里的空格和中文支持不好容易报 “cannot open input file”。4.1 启动运算打开命令行cd 到该文件夹cd /d D:\mcnp_run\al_electron然后输入mcnp5 ial.inp oal.out ral.runtpe参数说明i是输入文件o是输出文件r是二进制运行文件VISED 读轨迹用。回车后程序开始跑屏幕上会滚动输出当前粒子数和统计误差。4.2 运算过程控制MCNP5 在 Windows 下支持两个快捷键Ctrl C 然后按 S查看当前运算进度包括已输运粒子数、每秒钟粒子数、预计剩余时间。Ctrl C 然后按 Q中断进程但会把当前结果写入输出文件方便你提前看部分结果。我一般跑 20 万粒子铝块电子输运大概几十秒到几分钟取决于机器。如果nps设成 100 万可能要十几分钟。4.3 用 UE 提取结果运算结束后用 UltraEdit 打开al.out。搜索1tally或f12找到计数结果段。你会看到类似1tally 12 nps 200000 energy flux 0.0000E00 1.2345E-03 1.0000E-02 5.6789E-04这些就是电子在 Cell 1 里的通量分布。用 UE 的列模式AltC可以快速把数据复制到 Excel 里画图。如果输出文件里出现bad trouble先看它前面几行通常会指明是哪个卡出错。常见的有surface card not found面号写错、cell card has zero volume几何描述矛盾、source particle not in any cell源位置不在几何内。5. 本篇常见报错排查401、local proxy failed、reading choices、OAuth虽然 MCNP 本身不涉及网络请求但如果你在配置远程计算环境、用 API 调用模型辅助生成输入卡或者用 Claude Code 这类工具做代码润色可能会遇到下面这些报错。这里按真实场景对照排查。5.1 401 Unauthorized如果你在用某个 API 服务生成 MCNP 输入卡模板返回 401说明 Key 没传对。检查请求头{ Authorization: Bearer sk-xxxxxxxx, Content-Type: application/json }注意Bearer后面有一个空格Key 不要有多余换行。如果你用的是 TaoToken 的 APIBase URL 填https://taotoken.net/apiKey 在 console 里生成模型 ID 按文档填。5.2 local proxy failed这个报错通常出现在本地工具尝试走代理但代理没启动时。如果你在 Cline 或 Claude Code 里配了HTTP_PROXY环境变量但本地没有对应服务就会报local proxy failed。解决办法删掉环境变量或者把代理指向一个真实可用的地址。注意不要配任何不合规的网络工具直接用官方 API 即可。5.3 reading choices 报错如果你用某个客户端调模型返回error reading choices通常是响应格式和客户端预期不一致。检查你的请求体里model字段是否拼写正确messages是否是数组。有些客户端要求stream: false如果你开了流式但客户端不支持也会报这个。5.4 OAuth 相关错误Claude Code 或 Codex 这类工具如果用 OAuth 登录可能会遇到OAuth token expired或invalid_grant。这时候需要重新走一遍授权流程。如果你用的是 API Key 模式就不需要 OAuth直接在配置里填 Base URL、Key、Model ID 三件套即可。以 Claude Code 为例配置文件通常在~/.claude/settings.json写入{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的Key, ANTHROPIC_MODEL: claude-sonnet-4-20250514 } }Codex 的auth.json类似{ base_url: https://taotoken.net/api, api_key: sk-你的Key, model: gpt-4o }Cline MCP 配置则在cline_mcp_settings.json里加{ mcpServers: { taotoken: { url: https://taotoken.net/api, apiKey: sk-你的Key, model: claude-sonnet-4-20250514 } } }这三件套填对基本不会出 401 或 OAuth 问题。6. 从建模到验证的完整闭环与后续建议把上面的流程串起来先在 UltraEdit 里按三块结构写.inp配好语法高亮减少低级错误然后用 VISED 加载文件二维看截面三维看 Cell 几何确认没有重叠或空洞接着在自建文件夹里跑 MCNP5用ior三个参数指定输入输出运算中用 CtrlCS 看进度CtrlCQ 提前中断最后用 UE 打开.out提取计数结果。如果你想让模型帮你生成或检查输入卡可以用 TaoToken 的模型对话功能把卡贴进去让它找语法错误。长期做反应堆物理建模的话Coding Plan 更适合反复调试和版本管理。API Key 在 console 里生成接入文档在 doc 里有详细说明。几个实用技巧每次改完几何先跑nps 1000快速验证确认没有 fatal error 再加大粒子数VISED 的 3D View 里可以勾选 “Wireframe” 看面片边界比实体模式更容易发现细小缝隙UE 的宏功能可以录一段“删除空行对齐列”的操作每次改卡后一键整理格式。最后提醒一句MCNP 的几何是布尔运算#和:的优先级容易搞混。写完 Cell 卡后用 VISED 的 2D 视图逐个 Cell 点开看比在脑子里推演靠谱得多。