别再让 AI 盯着 COMSOL 点鼠标了:零基础用 Codex 完成自动建模、连续求解与结果验收

内容分享1小时前发布
0 0 0

别再让 AI 盯着 COMSOL 点鼠标了:零基础用 Codex 完成自动建模、连续求解与结果验收

从一个可运行的 .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 的一个内置插件。

它真正擅长的是:

  1. 阅读和修改项目文件;
  2. 编写 PowerShell、Python、MATLAB 或 Java 脚本;
  3. 调用本机已安装的软件和命令行工具;
  4. 读取运行日志;
  5. 根据错误信息修改脚本并重新运行;
  6. 将重复流程封装为可复现的自动化程序。

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 当作一个可以通过命令、脚本和文件调用的计算引擎。

别再让 AI 盯着 COMSOL 点鼠标了:零基础用 Codex 完成自动建模、连续求解与结果验收

02 CHAPTER 02

二、四种控制路线中,哪一种最适合零基础科研人员

路线 适用情况 学习难度 稳定性 提议 .mph 模板 + COMSOL 批处理 已经有一个基本可运行模型 低 很高 零基础首选 LiveLink for MATLAB 已有 MATLAB 和对应许可证 中 高 适合参数循环与数据分析 Java API 需要从零生成复杂模型 高 很高 适合长期平台化 图形界面自动点击 只能通过界面完成特殊操作 低至中 低 不提议用于长时间计算

最推荐的起点:先做一个基准 .mph 模型

对于大多数科研人员,最稳妥的工作方式是:

  1. 先在 COMSOL 图形界面中建立一个能够正常求解的基准模型;
  2. 将几何尺寸、材料参数、载荷和边界条件参数化;
  3. 保存为不可修改的 baseline.mph
  4. 让 Codex 复制这个模型;
  5. 通过命令行传递参数并启动求解;
  6. 让脚本监控日志、提取结果和执行验收。

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 和内存信息;
  • 脚本版本;
  • 求解器调整记录;
  • 输出文件列表。

别再让 AI 盯着 COMSOL 点鼠标了:零基础用 Codex 完成自动建模、连续求解与结果验收

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 进程仍在,计算就不应受到影响。

别再让 AI 盯着 COMSOL 点鼠标了:零基础用 Codex 完成自动建模、连续求解与结果验收

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 分钟

但对于物理定义错误,不能靠等待解决。

别再让 AI 盯着 COMSOL 点鼠标了:零基础用 Codex 完成自动建模、连续求解与结果验收

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 更适合长期维护。

一个实用方法是:

  1. 先在 COMSOL 图形界面中搭建一个小型示例;
  2. 将模型另存为 Java 文件;
  3. 让 Codex 阅读生成的 Java 代码;
  4. 逐步将固定数值改成参数;
  5. 将代码拆分为几何、材料、物理、网格、研究和结果模块。

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 中必须把“完成”定义为:

计算结束 + 数据成功提取 + 数值验证通过 + 物理检查通过 + 报告生成。

别再让 AI 盯着 COMSOL 点鼠标了:零基础用 Codex 完成自动建模、连续求解与结果验收

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 的程序。

别再让 AI 盯着 COMSOL 点鼠标了:零基础用 Codex 完成自动建模、连续求解与结果验收

© 版权声明

相关文章

暂无评论

none
暂无评论...