
从一个可运行的 .mph 模型出发,让 Codex 自动修改参数、提交计算、监控日志、处理失败、导出数据,并一直推进到结果通过验收。
许多科研人员第一次尝试用 Codex 控制 COMSOL,往往会写出这样的任务:
帮我建立一个 COMSOL 模型,设置好参数并开始计算。遇到问题自己解决,一直工作到计算结束。
这段话看起来很完整,但真正运行起来,很容易出现以下情况:
- Codex 写出了脚本,却没有真正调用 COMSOL;
- COMSOL 已经启动,但许可证没有成功签出;
- 计算进程仍在,求解器却早已失去收敛;
- 输出了
.mph文件,但其中没有有效解; - 为了让模型“算出来”,Codex 擅自修改了边界条件、材料参数或网格;
- 运行数小时后进程异常退出,任务无法从中断位置恢复;
- Codex 认为“脚本已完成”,而科研人员认为“仿真还没完成”。
问题的根源在于:
“请一直工作到计算结束”不是一个可靠的 Goal(任务目标说明)。
真正稳健的方案,不是让 Codex 长时间守着 COMSOL,而是让 Codex 建立一套能够独立运行的自动化系统:
● ● ● Terminal
Codex
↓
生成和维护自动化脚本
↓
任务编排程序
↓
COMSOL 批处理、Java API 或 MATLAB 联动接口
↓
日志、状态、结果文件
↓
自动验收与失败恢复
↓
最终报告
本文将从零开始,说明如何搭建这套流程,并在文末给出一份可以直接复制使用的完整 Goal 模板。
01 CHAPTER 01
一、先明确:Codex 到底如何“控制”COMSOL
Codex 并不是 COMSOL 的一个内置插件。
它真正擅长的是:
- 阅读和修改项目文件;
- 编写 PowerShell、Python、MATLAB 或 Java 脚本;
- 调用本机已安装的软件和命令行工具;
- 读取运行日志;
- 根据错误信息修改脚本并重新运行;
- 将重复流程封装为可复现的自动化程序。
Codex CLI(Codex 命令行界面)可以在本地项目目录中读取文件、修改代码,并运行本机已经安装的工具; codex exec 还可以将 Codex 放入脚本和自动化流水线中执行。Codex 也支持通过 AGENTS.md (项目长期指令文件)为每次任务提供固定规则。
而 COMSOL 本身已经提供了多种自动化接口,其中最重大的是:
- batch mode(批处理模式);
- Java API(Java 应用程序编程接口);
- LiveLink for MATLAB(COMSOL 与 MATLAB 联动接口);
- Model Method(模型方法);
- 集群和参数扫描接口。
因此,正确思路并不是让 Codex 模拟人类点击图形用户界面,而是:
让 Codex 把 COMSOL 当作一个可以通过命令、脚本和文件调用的计算引擎。

02 CHAPTER 02
二、四种控制路线中,哪一种最适合零基础科研人员
路线 适用情况 学习难度 稳定性 提议 .mph 模板 + COMSOL 批处理 已经有一个基本可运行模型 低 很高 零基础首选 LiveLink for MATLAB 已有 MATLAB 和对应许可证 中 高 适合参数循环与数据分析 Java API 需要从零生成复杂模型 高 很高 适合长期平台化 图形界面自动点击 只能通过界面完成特殊操作 低至中 低 不提议用于长时间计算
最推荐的起点:先做一个基准 .mph 模型
对于大多数科研人员,最稳妥的工作方式是:
- 先在 COMSOL 图形界面中建立一个能够正常求解的基准模型;
- 将几何尺寸、材料参数、载荷和边界条件参数化;
- 保存为不可修改的
baseline.mph; - 让 Codex 复制这个模型;
- 通过命令行传递参数并启动求解;
- 让脚本监控日志、提取结果和执行验收。
COMSOL 官方支持直接在命令行中以批处理模式运行 .mph 文件,例如:
● ● ● PowerShell
comsolbatch `
-inputfile baseline.mph `
-outputfile solved.mph `
-study std1
其中, std1 是研究节点的 tag(内部标签)。COMSOL 会使用模型中已经设置好的求解器,并把计算结果写入新的 .mph 文件。
这条路线最大的优势是:
Codex 不需要从自然语言猜测所有物理设置,只需要在一个已验证模型的基础上进行可控修改。
03 CHAPTER 03
三、为什么不推荐让 Codex 直接操作 COMSOL 图形界面
理论上,可以让自动化工具点击 COMSOL 界面,但这不适合长时间科研计算。
图形界面自动化一般依赖:
- 当前窗口焦点;
- 屏幕分辨率;
- 缩放比例;
- 软件版本;
- 对话框位置;
- 窗口是否被遮挡;
- 是否弹出许可证或错误提示。
只要出现一个意外弹窗,整个流程就可能停住。
而命令行和 API 的运行状态是明确的:
● ● ● Terminal
启动命令
→ 进程号
→ 退出码
→ 日志文件
→ 输出模型
→ 结果文件
这才适合构建可监控、可恢复、可审计的科研自动化系统。
04 CHAPTER 04
四、第一次搭建时,需要先准备什么
本文以 Windows 本地工作站为例。Linux 和 macOS 的总体逻辑一样,只是启动命令有所不同。
05 CHAPTER 05
1. 在 COMSOL 中准备一个可运行模型
至少确认以下内容:
- 几何可以成功构建;
- 材料参数已经设置;
- 物理场和边界条件完整;
- 网格能够生成;
- 研究节点能够成功求解;
- 至少有一个用于验证结果的派生值或探针;
- 所需参数已写入“全局定义—参数”。
提议将模型保存为:
● ● ● Terminal
model/baseline.mph
这个文件应当被视为 不可变基线 。Codex 不应直接覆盖它。
06 CHAPTER 06
2. 找到研究节点的内部标签
COMSOL 图形界面中显示的“研究 1”,内部标签一般是:
● ● ● Terminal
std1
但不能默认所有模型都是 std1 。
在 COMSOL 中开启“显示名称和标签”后,可以看到类似:
● ● ● Terminal
研究 1 {std1}
解 1 {sol1}
结果组 1 {pg1}
后续命令行、Java 和 MATLAB 脚本一般都使用这些内部标签。
07 CHAPTER 07
3. 找到 comsolbatch.exe
Windows 上的常见位置类似:
● ● ● Terminal
C:Program FilesCOMSOLCOMSOL64Multiphysicsinwin64comsolbatch.exe
不同版本和安装位置可能不同,可以在 PowerShell 中查找:
● ● ● PowerShell
Get-ChildItem "C:Program FilesCOMSOL" `
-Recurse `
-Filter "comsolbatch.exe" `
-ErrorAction SilentlyContinue |
Select-Object -First 1 -ExpandProperty FullName
找到后,不要立即开始全模型计算。先执行一次最小测试。
08 CHAPTER 08
4. 手动验证一条批处理命令
例如:
● ● ● PowerShell
$Comsol = "C:Program FilesCOMSOLCOMSOL64Multiphysicsinwin64comsolbatch.exe"
& $Comsol `
-inputfile ".modelaseline.mph" `
-outputfile ". unssmoke_testsolved.mph" `
-study "std1" `
-batchlog ". unssmoke_testcomsol.log"
这里的 smoke test(小规模试运行)应使用较粗网格、较短时间区间或单个参数点。
必须第一确认:
- COMSOL 可以从命令行启动;
- 许可证能够正常签出;
comsol.log能正常生成;solved.mph能正常保存;- 模型的确 完成了研究节点的求解。
COMSOL 的 -batchlog 参数可以将求解日志写入指定文件,便于自动监控。批处理日志还会记录内存使用信息,例如当前物理内存和虚拟内存占用。
09 CHAPTER 09
五、一个可靠的 Codex-COMSOL 项目,应该长什么样
推荐建立独立项目目录:
● ● ● Terminal
comsol-codex-project/
│
├─ AGENTS.md
├─ GOAL.md
├─ README.md
│
├─ config/
│ ├─ project.yaml
│ └─ validation.yaml
│
├─ model/
│ ├─ baseline.mph
│ └─ baseline.sha256
│
├─ scripts/
│ ├─ preflight.ps1
│ ├─ prepare_case.ps1
│ ├─ run_case.ps1
│ ├─ monitor.ps1
│ ├─ validate.py
│ └─ make_report.py
│
├─ runs/
│ └─ 20260801_001/
│ ├─ input.mph
│ ├─ solved.mph
│ ├─ comsol.log
│ ├─ state.json
│ ├─ heartbeat.json
│ ├─ manifest.json
│ ├─ results.csv
│ ├─ figures/
│ └─ report.md
│
└─ docs/
├─ model_specification.md
└─ troubleshooting.md
这里最重大的不是目录整齐,而是把以下几类信息分开:
AGENTS.md :长期不变的工作纪律
例如:
- 不覆盖原始模型;
- 不擅自改变物理假设;
- 所有运行必须记录日志;
- 所有结果必须执行验收;
- 不允许无限重试;
- 不允许把“生成了文件”等同于“计算成功”。
Codex 会在开始工作前读取 AGENTS.md ,并可以根据项目目录层级加载不同范围的指令。
GOAL.md :这一次具体要完成什么
例如:
- 模拟什么科学问题;
- 使用哪个模型;
- 扫描哪些参数;
- 输出哪些物理量;
- 什么结果才算有效;
- 什么情况下允许调整求解器;
- 什么情况下必须停止并报告。
state.json :计算当前进行到了哪里
例如:
● ● ● Terminal
{
"run_id": "20260801_001",
"stage": "RUNNING",
"case_index": 7,
"total_cases": 20,
"comsol_pid": 18324,
"last_log_update": "2026-08-01T13:35:20+08:00",
"retry_count": 0
}
manifest.json :这次计算究竟用了什么
manifest(运行清单)应至少记录:
- COMSOL 版本;
- 模型文件哈希;
- 参数表;
- 研究标签;
- 启动命令;
- 开始和结束时间;
- 计算机名称;
- CPU 和内存信息;
- 脚本版本;
- 求解器调整记录;
- 输出文件列表。

10 CHAPTER 10
六、真正让任务“持续工作到结束”的关键:不要依赖 Codex 会话本身
这是整个方案中最重大的一点。
Codex 会话负责:
- 理解任务;
- 编写脚本;
- 修复脚本;
- 分析日志;
- 调整自动化流程;
- 汇总结果。
但真正持续运行数小时甚至数天的,应该是一个独立的:
- PowerShell 控制程序;
- Python 任务编排程序;
- MATLAB 脚本;
- 或系统计划任务。
也就是说:
Codex 负责制造“自动驾驶系统”,而不是亲自连续踩着油门。
可靠架构应当是:
● ● ● Terminal
Codex 写好 orchestrator.ps1
↓
orchestrator.ps1 独立启动 COMSOL
↓
COMSOL 执行计算
↓
monitor.ps1 监控进程、日志和磁盘
↓
validate.py 检查结果
↓
根据状态继续下一参数点或进入失败恢复
其中,orchestrator(任务编排程序)必须独立于 Codex 对话持续运行。
即使 Codex 窗口关闭,只要任务编排程序和 COMSOL 进程仍在,计算就不应受到影响。

11 CHAPTER 11
七、“一直工作”不等于“无限重试”
一个常见错误,是在 Goal 中写:
遇到任何问题都要自己解决,不允许停止。
这会导致超级危险的行为。
例如,模型不收敛时,Codex 可能不断:
- 放宽容差;
- 改粗网格;
- 减小载荷;
- 修改材料参数;
- 改变边界条件;
- 删除难以收敛的物理耦合。
最后模型可能“算出来了”,但已经不是原来的科学问题。
正确做法是设置 retry budget(重试预算),即不同错误允许多少次重试,以及允许采取哪些修复措施。
例如:
错误类型 自动处理方法 最大次数 许可证暂时不可用 等待后重试 8 文件临时占用 重新复制或保存 3 COMSOL 异常退出 使用一样输入重新启动 2 脚本语法错误 根据日志修复脚本 3 非线性不收敛 按预先批准的求解器阶梯调整 4 内存不足 停止全量计算并生成诊断 0 或 1 边界条件缺失 停止并报告 0 材料参数无来源 停止并报告 0 结果违反物理约束 判定验收失败 0
对于许可证暂不可用,可以采用 backoff(退避重试):
● ● ● Terminal
2 分钟 → 5 分钟 → 10 分钟 → 20 分钟 → 30 分钟
但对于物理定义错误,不能靠等待解决。

12 CHAPTER 12
八、完整的 COMSOL 自动仿真 Goal 模板
下面这份模板可以直接保存为 GOAL.md ,再把尖括号中的内容替换为自己的课题信息。
● ● ● Terminal
# GOAL:使用 Codex 自动完成 COMSOL 建模、计算、监控、验收与报告
## 1. 最终目标
在本地计算机上调用已安装的 COMSOL Multiphysics,
完成 <研究对象> 的 <稳态/瞬态/频域/特征值> 多物理场模拟。
本任务不得在以下状态提前结束:
- 仅生成了脚本;
- 仅生成了模型;
- 仅启动了 COMSOL;
- 仅完成了一个参数点;
- 仅生成了输出文件;
- 求解器退出但结果尚未验收;
- 结果未通过物理合理性和数值可靠性检查。
只有在“第 12 节完成判据”全部满足后,任务才可以标记为 COMPLETED。
---
## 2. 本机环境
操作系统:
COMSOL 版本:<待自动检测或填写>
COMSOL 批处理程序:
<完整路径;未知时由脚本自动搜索>
工作目录:
<项目绝对路径>
原始模型:
model/baseline.mph
研究节点标签:
预期求解器标签:
允许使用的接口,按优先级排列:
1. COMSOL 批处理命令;
2. COMSOL Java API;
3. LiveLink for MATLAB;
4. 仅在前三种均不能完成时,才思考图形界面操作。
不得优先使用鼠标坐标、窗口焦点或屏幕识别控制 COMSOL。
---
## 3. 科学问题
模拟对象:
<明确描述几何、材料和工作环境>
物理场:
<例如固体传热、层流、结构力学、电磁波、多物理场耦合>
控制方程或物理假设:
<列出主要方程、近似和假设>
材料参数:
<参数名称、数值、单位、来源>
初始条件:
<完整说明>
边界条件:
<完整说明>
研究类型:
<稳态/瞬态/频域/参数化扫描>
需要扫描的参数:
| 参数名 | COMSOL 参数名 | 数值范围 | 单位 |
|---|---|---|---|
| <激光功率> | | | |
| <薄膜厚度> | | | <μm> |
所有数值必须保留单位。
不得凭经验补充缺失的关键材料参数。
缺少关键物理输入时,应记录为 BLOCKED_SCIENTIFIC_INPUT,
而不是自行虚构数值。
---
## 4. 不可变基线规则
1. 不得直接覆盖 model/baseline.mph。
2. 首次运行前计算 baseline.mph 的 SHA-256 哈希。
3. 每次运行将 baseline.mph 复制到独立运行目录。
4. 所有参数修改和求解器修改只能作用于运行副本。
5. 每次修改必须记录:
- 修改前数值;
- 修改后数值;
- 修改缘由;
- 对科学结论的潜在影响。
6. 未经明确许可,不得修改:
- 几何拓扑;
- 物理接口;
- 控制方程;
- 材料组成;
- 初始条件;
- 边界条件;
- 参数单位;
- 研究时间范围。
---
## 5. 项目状态机
任务必须使用以下状态:
PENDING
→ PREFLIGHT
→ MODEL_AUDIT
→ SMOKE_TEST
→ PREPARING
→ RUNNING
→ VALIDATING
→ REPORTING
→ COMPLETED
允许的失败状态:
RETRY_PENDING
FAILED_TRANSIENT
FAILED_NUMERICAL
FAILED_SCIENTIFIC
FAILED_RESOURCE
BLOCKED_SCIENTIFIC_INPUT
BLOCKED_LICENSE
BLOCKED_PERMISSION
每次状态变化都必须原子写入:
runs//state.json
同时追加记录到:
runs//events.jsonl
程序重新启动后,必须读取 state.json,
禁止在已有任务未判定完成或失败时直接新建重复任务。
---
## 6. 预检阶段
全量计算前必须完成以下检查:
1. 查找并确认 comsolbatch.exe 或 comsol 命令;
2. 确认 COMSOL 可以从命令行启动;
3. 确认原始模型存在且可读取;
4. 记录原始模型 SHA-256;
5. 检查研究标签是否存在;
6. 检查输出目录是否可写;
7. 检查剩余磁盘空间;
8. 检查可用内存;
9. 检查是否已有同一 run_id 的 COMSOL 进程;
10. 检查模型所需模块和许可证;
11. 保存实际启动命令;
12. 创建 manifest.json。
预检未通过时,不得进入全量计算。
---
## 7. 小规模试运行
在全量计算前,先进行一次小规模试运行。
小规模试运行可以采用:
- 单个参数点;
- 较短时间范围;
- 较粗但仍合法的网格;
- 减少输出时间点;
- 关闭非必要绘图,但不得删除物理场。
试运行必须验证:
1. 模型能够成功加载;
2. 几何能够构建;
3. 网格能够生成;
4. 研究节点能够启动;
5. 求解器正常结束;
6. 输出模型能够保存;
7. 结果能够被提取;
8. 日志能够被监控;
9. state.json 能正确更新;
10. 失败时能够得到明确错误分类。
试运行成功后,才可进入全量计算。
---
## 8. 正式计算要求
正式计算必须以独立进程启动。
每个参数实例使用独立目录:
runs//cases/case_<编号>/
每个实例至少包含:
- input.mph
- solved.mph
- comsol.log
- command.txt
- parameters.json
- state.json
- results.csv
- validation.json
不得在多个并行任务之间共享同一个输出文件。
除非许可证、内存和 CPU 条件均已确认,
否则默认串行执行参数实例。
每完成一个实例,立即更新总任务状态,
不得等所有实例结束后才记录进度。
---
## 9. 监控与疑似卡死判断
每隔 秒记录一次:
- COMSOL 进程是否存在;
- 进程号;
- 日志文件大小;
- 日志最后修改时间;
- 输出文件大小;
- 剩余磁盘空间;
- 当前参数实例;
- 已运行时间;
- 最近一次有效进展时间。
写入:
runs//heartbeat.json
不能仅根据“进程仍存在”判断计算正常。
满足以下条件时标记为 SUSPECTED_STALL:
- COMSOL 进程仍存在;
- 日志在 分钟内没有更新;
- 输出文件没有变化;
- 没有新的求解进展记录。
进入 SUSPECTED_STALL 后不得立即强制终止。
应先:
1. 保存诊断信息;
2. 读取日志末尾至少 300 行;
3. 检查磁盘和内存;
4. 检查是否存在许可证等待;
5. 等待一个额外宽限期;
6. 再决定继续等待、优雅停止或重启。
---
## 10. 错误分类和恢复规则
### 许可证暂时不可用
- 不修改模型;
- 按 2、5、10、20、30 分钟等待;
- 最大重试 8 次;
- 超过预算后标记 BLOCKED_LICENSE。
### 文件或临时目录错误
- 检查路径和权限;
- 使用新的运行目录;
- 最大重试 3 次。
### COMSOL 异常退出
- 保留日志和已有输出;
- 检查是否存在恢复文件;
- 使用一样输入重启最多 2 次;
- 不得在重启时静默改变模型。
### 非线性不收敛
只能按以下经过批准的阶梯处理:
1. 使用上一参数点的解作为初值;
2. 减小参数递增步长;
3. 减小时间步长;
4. 启用载荷渐增或辅助扫描;
5. 在预先批准范围内调整阻尼;
6. 在预先批准范围内调整求解器配置。
每一步修改后先运行小规模测试。
不得通过删除物理耦合、改变边界条件或任意放宽精度强行得到结果。
### 内存不足
- 停止新任务;
- 保存最后日志和内存记录;
- 不得自动大幅降低网格精度;
- 生成资源诊断报告;
- 只有在 validation.yaml 明确允许时,才可采用指定的内存优化方案。
### 物理输入缺失
- 停止计算;
- 标记 BLOCKED_SCIENTIFIC_INPUT;
- 列出缺少的数值、单位和用途;
- 不得自行生成虚构数据。
---
## 11. 数值和科学验收
“求解器正常退出”不等于“结果有效”。
必须完成以下验收:
1. COMSOL 退出码表明成功;
2. 日志不存在未处理的致命错误;
3. solved.mph 存在且可以重新打开;
4. 所有计划参数点均有结果;
5. 结果中不存在 NaN、Inf 或空数据;
6. 所有输出单位正确;
7. 关键变量位于预设物理范围;
8. 守恒误差低于 <阈值>;
9. 网格加密后关键结果变化低于 <例如 2%>;
10. 时间步缩小后关键结果变化低于 <阈值>;
11. 参数趋势不存在无法解释的突变;
12. 与解析解、文献、实验或基准模型的偏差低于 <阈值>;
13. 所有失败参数点均有明确状态,不得静默遗漏。
需要提取的关键结果:
- <最高温度>
- <平均速度>
- <位移>
- <应力>
- <热通量>
- <能量或质量守恒误差>
输出到:
results/summary.csv
results/all_cases.csv
results/validation.csv
---
## 12. 完成判据
只有同时满足以下条件,任务才可标记为 COMPLETED:
1. 所有计划参数实例均已执行;
2. 所有实例均有明确终态;
3. 不存在未解释的缺失实例;
4. 正常实例均通过数值验收;
5. 关键科学结果均已提取;
6. 输出模型可以重新打开;
7. 日志、参数和运行命令齐全;
8. manifest.json 完整;
9. summary.csv 完整;
10. 生成主要结果图;
11. 完成网格或时间步可靠性分析;
12. 生成最终报告 report.md;
13. 生成 FINAL_STATUS.json;
14. FINAL_STATUS.json 中 status 必须为 COMPLETED。
仅有 solved.mph 不构成任务完成。
---
## 13. 最终交付物
最终至少交付:
- 原始模型哈希;
- 每个计算实例的参数;
- 每个实例的运行状态;
- COMSOL 日志;
- 求解后的模型;
- 汇总数据 CSV;
- 关键结果图片;
- 网格无关性或时间步无关性结果;
- 错误与重试记录;
- 求解器修改记录;
- 最终科研报告;
- 一条可以复现全部计算的启动命令。
最终报告必须明确区分:
- 原始输入;
- 自动修改;
- 数值结果;
- 验收结果;
- 失败实例;
- 尚未解决的问题;
- 科学结论;
- 不确定性和局限性。
13 CHAPTER 13
九、第一次启动 Codex 时,应该怎么说
进入项目目录:
● ● ● Terminal
cd D:comsol-codex-project
codex
首次可以使用:
● ● ● Terminal
/init
生成 AGENTS.md 框架。OpenAI 官方文档说明, /init 可为当前项目创建 AGENTS.md ,Codex 会在开始任务前读取这些项目指令。
然后给 Codex 的第一条任务,不要只写“开始模拟”,而应写:
● ● ● Terminal
请先完整读取 AGENTS.md、GOAL.md、config/project.yaml
和 config/validation.yaml。
你的任务不是只编写脚本,而是建立并执行一个能够独立运行、
可恢复、可监控、可验收的 COMSOL 自动仿真流程。
先执行以下工作:
1. 审计项目目录和 baseline.mph;
2. 查找本机 COMSOL 批处理程序;
3. 生成 preflight、run、monitor、validate 和 report 脚本;
4. 运行预检;
5. 完成一个小规模试运行;
6. 验证状态记录、日志、输出模型和结果提取;
7. 试运行通过后执行正式计算;
8. 持续读取状态和日志,按 GOAL.md 的重试预算处理失败;
9. 所有实例计算完成后执行科学验收;
10. 只有 GOAL.md 的全部完成判据满足后,才将任务标记为 COMPLETED。
不得覆盖 baseline.mph。
不得为了收敛而静默改变科学问题。
不得把“COMSOL 已启动”或“输出文件已生成”视为完成。
14 CHAPTER 14
十、Codex 权限应该怎么设置
Codex 默认会通过 sandbox(沙箱隔离环境)限制文件写入范围和网络访问,并通过 approval policy(操作审批策略)决定哪些命令需要用户确认。官方提议根据任务给予最小必要权限,而不是一开始就开放整个计算机。
对于 COMSOL 项目,提议采用以下原则:
初次搭建
保留命令审批,逐项检查 Codex 准备运行的:
- PowerShell 脚本;
- Python 脚本;
comsolbatch.exe;- 文件复制;
- 进程启动;
- 进程停止。
流程验证后
只为以下固定命令建立允许规则:
- 指定完整路径的
comsolbatch.exe; - 项目目录内的 PowerShell 脚本;
- 项目目录内的 Python 验证程序;
- 只读的进程查询命令;
- 只写入
runs/的文件操作。
Codex 支持针对命令前缀设置 allow、prompt 和 forbidden 等规则,从而允许特定命令自动执行,同时阻止危险命令。
不提议直接使用完全访问模式。完全访问会使 Codex 能够触及项目目录之外的文件,也会增加误删除或误覆盖数据的风险。
Windows 沙箱无法读取 COMSOL 安装目录时,可以为当前会话添加只读目录:
● ● ● Terminal
/sandbox-add-read-dir C:Program FilesCOMSOL
OpenAI 官方文档也提议优先保留沙箱边界,再通过具体规则开放必要命令,而不是撤销所有限制。
15 CHAPTER 15
十一、参数扫描应该交给谁:Codex 还是 COMSOL
最稳妥的原则是:
Codex 负责生成参数表、提交任务和检查结果;COMSOL 负责求解。
对于简单参数扫描,可以直接通过命令行传递参数:
● ● ● PowerShell
& $Comsol `
-inputfile ".modelaseline.mph" `
-outputfile ". unspower_sweepsolved.mph" `
-study "std1" `
-pname "P_laser" `
-plist "0.1[W],0.5[W],1[W]" `
-batchlog ". unspower_sweepcomsol.log"
参数数量较多时,可以使用参数文件:
● ● ● Terminal
comsol batch
-inputfile baseline.mph
-outputfile solved.mph
-paramfile parameters.dat
COMSOL 官方支持通过 -pname 、 -plist 和 -paramfile 从命令行控制参数化扫描。
需要特别注意:
模型中包含 Batch Sweep(批处理扫描)或 Cluster Sweep(集群扫描)节点时,普通批处理调用可能默认忽略这些节点。此时一般需要使用:
● ● ● Terminal
-mode desktop
否则,Codex 可能看到 COMSOL 正常结束,却不知道真正的外部扫描任务根本没有执行。
16 CHAPTER 16
十二、什么时候该用 LiveLink for MATLAB
已经安装 MATLAB,并且拥有 LiveLink for MATLAB 许可证时,可以让 Codex 编写 MATLAB 脚本控制模型:
● ● ● Terminal
model = mphopen('model/baseline.mph');
mphsetparam(model, 'P_laser', '1[W]');
mphrun(model, 'std1');
mphsave(model, 'runs/case_001/solved.mph');
LiveLink 提供了:
mphopen:打开模型;mphrun:运行研究、求解器、网格或结果节点;mphsave:保存模型;mphglobal:提取全局结果;mphinterp:在指定位置求值;mphint2:对区域进行积分;mphmax、mphmin、mphmean:计算最大值、最小值和平均值。
COMSOL 官方特别提醒:通过 MATLAB 循环运行模型时,模型不会自动保存,脚本必须显式调用 mphsave 。
MATLAB 路线尤其适合:
- 复杂参数循环;
- 条件判断;
- 多轮优化;
- 实验数据与模拟结果比较;
- 自动绘图;
- 统计分析;
try/catch错误处理;- 将上一次结果作为下一次初值。
17 CHAPTER 17
十三、什么时候该用 Java API
需要让 Codex从零创建几何、材料、物理接口和求解器时,Java API 更适合长期维护。
一个实用方法是:
- 先在 COMSOL 图形界面中搭建一个小型示例;
- 将模型另存为 Java 文件;
- 让 Codex 阅读生成的 Java 代码;
- 逐步将固定数值改成参数;
- 将代码拆分为几何、材料、物理、网格、研究和结果模块。
COMSOL 官方也推荐通过“先在图形界面建模,再保存为 Java 文件”的方式学习 API 语法。Java 模型文件可以使用 comsolcompile 编译,再通过 COMSOL 批处理运行。
这种路线的优点是:
- 几乎所有模型设置都可以用代码表达;
- 模型结构可复制;
- 易于批量生成不同几何;
- 便于进行版本控制;
- 适合构建课题组长期使用的仿真平台。
缺点是学习成本明显高于“基准 .mph + 批处理”。
18 CHAPTER 18
十四、计算结束后,必须回答一个问题:算完了,还是算对了
许多自动化项目只检查:
● ● ● Terminal
COMSOL 进程退出了吗?
这远远不够。
至少需要四层验收。
19 CHAPTER 19
第一层:程序层验收
- COMSOL 是否返回成功退出码;
- 日志是否存在致命错误;
- 输出文件是否存在;
- 文件是否能重新打开;
- 参数实例是否全部执行。
20 CHAPTER 20
第二层:数值层验收
- 是否真正达到收敛;
- 是否存在 NaN(非数值)或无穷值;
- 网格加密后结果是否稳定;
- 时间步缩小后结果是否稳定;
- 求解容差变化后结果是否稳定。
21 CHAPTER 21
第三层:物理层验收
- 温度是否超过材料可能承受的范围;
- 速度、应力、位移是否符合数量级;
- 能量、质量、电荷是否满足守恒;
- 对称模型是否产生合理对称解;
- 极限参数下是否退化为已知情况。
22 CHAPTER 22
第四层:科研层验收
- 是否可以回答原始科学问题;
- 是否与实验趋势一致;
- 是否存在多个参数组合给出一样结论;
- 结论是否依赖某一个未经验证的假设;
- 模型是否具有可重复性。
因此,Goal 中必须把“完成”定义为:
计算结束 + 数据成功提取 + 数值验证通过 + 物理检查通过 + 报告生成。

23 CHAPTER 23
十五、最常见的五个失败方式
24 CHAPTER 24
1. 从一句自然语言直接生成整套复杂模型
边界条件、单位、材料数据和几何选择很容易出错。
更稳妥的方法是从一个已验证的 .mph 基线开始。
25 CHAPTER 25
2. 让 Codex 无限重试
无限重试一般只会消耗计算资源,并逐渐偏离原始模型。
必须规定错误类别、允许动作和重试预算。
26 CHAPTER 26
3. 只看有没有 solved.mph
输出模型存在,不代表其中有完整、有效且收敛的解。
27 CHAPTER 27
4. 直接覆盖原始模型
一旦脚本写错,可能连唯一可用的基准模型都被破坏。
原始模型必须只读,并使用哈希确认没有变化。
28 CHAPTER 28
5. 为了自动化而牺牲科学可解释性
Codex 可以修改求解器,但不能在没有记录的情况下改变物理模型。
所有自动调整都应写入修改日志和最终报告。
29 CHAPTER 29
结语
用 Codex 控制 COMSOL,真正值得追求的不是“让 AI 替我点几下按钮”。
更有价值的是建立一套能够:
- 自动准备模型;
- 自动提交计算;
- 自动监控进度;
- 自动识别失败;
- 有限度地自动恢复;
- 自动提取结果;
- 自动执行数值和物理验收;
- 自动生成完整报告;
的科研计算工作流。
这套系统一旦建立,后续更换几何、材料、参数范围或研究对象时,往往只需要修改配置文件和科学约束,而不必重新手工完成整套操作。
最关键的一句话是:
不要让 Codex 一直守着 COMSOL;要让 Codex 写出一个能够一直守着 COMSOL 的程序。
