2. COMSOL脚本接口与开发环境配置

COMSOL 的脚本化批量仿真并不是只有一条路可走。官方提供的脚本接口至少有三条主线:LiveLink for MATLAB、COMSOL Compiler 和 Java API(底层为 COMSOL 的 Java 方法库,MATLAB 接口本质上也是通过 Java 桥接实现的)。三者的定位差别很大:LiveLink for MATLAB 适合在 MATLAB 里做参数扫描、优化、数据处理与绘图;COMSOL Compiler 适合把已经调好的模型编译成不依赖 COMSOL 图形界面的独立可执行程序,用于分发或批量部署;Java API 则适合把 COMSOL 求解能力嵌入自研的 Java 应用、服务端任务或与其它 Java 生态工具集成。理解这三者的安装方式、启动路径和调用入口,是后续所有批量脚本工作的前提。

一、三条接口路径的定位与选择

在动手配置之前,先明确自己属于哪类任务,可以避免装错组件、走错入口。下面这张图把三条路径的调用链、依赖关系和典型用途放在一起对比,便于快速判断。

COMSOL 脚本接口三条路径与调用链 COMSOL Multiphysics 内核 模型对象 / 求解器 / 网格 / 结果(Java 方法库) LiveLink for MATLAB 安装:COMSOL 安装器勾选 “LiveLink for MATLAB” mphstart(2036) import com.comsol.model.* model = ModelUtil.create(...) 用途:参数扫描 / 优化 / 后处理 COMSOL Compiler 安装:独立许可证 + Compiler 组件 (需 COMSOL 6.0 及以上) 编译 .mph → 独立 .exe 命令行传参批量运行 无需安装 COMSOL 即可运行 用途:分发 / 部署 / 无界面批处理 Java API 安装:COMSOL 自带 JRE + comsol.jar 加入 classpath Model model = ModelUtil.create() model.geom().create(...) model.sol("sol1").runAll() 用途:嵌入自研系统 / 服务端集成 三条路径最终都调用同一套 COMSOL Java 方法库,区别在于宿主语言、启动方式与部署形态

二、LiveLink for MATLAB 的安装与启动

LiveLink for MATLAB 不是单独下载的插件,而是在 COMSOL 安装器中与主程序一起勾选的组件。安装时需要注意两点:一是 COMSOL 与 MATLAB 的版本兼容性,例如 COMSOL 6.2 通常支持 MATLAB R2019b 至 R2023b 区间,版本错配会导致 mphstart 报错;二是安装完成后必须运行一次 mphstart 或执行 COMSOL 提供的 comsolserver,让 MATLAB 与 COMSOL Server 建立连接。

典型启动流程如下:先启动 COMSOL Server(可在 COMSOL 安装目录的 bin 下执行 comsol server,默认端口 2036),再在 MATLAB 命令窗口执行:

% 在 MATLAB 中连接已启动的 COMSOL Server
mphstart(2036)

% 导入 COMSOL Java 类
import com.comsol.model.*
import com.comsol.model.util.*

% 创建一个空模型
model = ModelUtil.create('Model');
model.modelNode.create('comp1');
model.geom.create('geom1', 3);
model.geom('geom1').feature.create('blk1', 'Block');
model.geom('geom1').run;

如果 mphstart 返回连接成功信息,说明 MATLAB 已能通过 Java 桥接操作 COMSOL 模型对象。此时 model 就是一个标准的 COMSOL Java 模型句柄,后续所有几何、物理场、网格、求解、后处理操作都可以用 Java 方法链完成。需要注意的是,MATLAB 中的 model 变量与 COMSOL 桌面端打开的模型是两套独立实例,除非显式使用 mphload 加载已有 .mph 文件。

若 mphstart 提示找不到类,通常是 MATLAB 的 Java 路径未包含 comsol.jar。可在 MATLAB 中执行 javaclasspath 检查,并用 javaaddpath('C:\Program Files\COMSOL\COMSOL62\Multiphysics\plugins\comsol.jar') 手动添加。

三、COMSOL Compiler 的配置与命令行调用

COMSOL Compiler 的安装前提是拥有支持 Compiler 的许可证,并且 COMSOL 版本不低于 6.0。安装时在安装器中勾选 “COMSOL Compiler” 组件即可。它的核心价值在于:把已经调试好的 .mph 模型编译成一个独立的可执行文件,目标机器上无需安装 COMSOL,也无需图形界面,即可通过命令行反复运行。

编译操作既可以在 COMSOL Desktop 中通过 “文件 → 编译” 完成,也可以在命令行中执行。编译后的程序支持通过参数覆盖模型中的全局参数,这是批量仿真的关键入口。例如,假设模型中定义了全局参数 L 和 W,编译后可这样调用:

# 编译(在 COMSOL Desktop 中或命令行)
comsol compile -output myBatchApp model.mph

# 运行编译后的程序,覆盖参数 L=0.12、W=0.05
myBatchApp.exe -p L 0.12 -p W 0.05 -o result_L012_W005.mph

这里 -p 用于覆盖全局参数,-o 指定输出文件。批量运行时,只需在脚本中循环生成不同的参数组合并依次调用即可。判断编译是否成功,可以观察输出目录是否生成了 .exe 及配套的运行时文件;运行后检查 result_*.mph 是否生成、其中是否包含预期的解数据集。

四、Java API 的环境搭建与最小调用

Java API 是三条路径中最底层、也最灵活的一条。COMSOL 安装目录下自带 JDK(通常在 java 子目录),同时提供 comsol.jar 等类库。搭建步骤是:新建 Java 工程,把 comsol.jar 以及 plugins 目录下的相关 jar 加入 classpath,然后即可编写调用代码。

import com.comsol.model.*;
import com.comsol.model.util.*;

public class BatchRun {
    public static void main(String[] args) throws Exception {
        Model model = ModelUtil.create("Model");
        model.modelNode().create("comp1");
        model.geom().create("geom1", 3);
        model.geom("geom1").feature().create("blk1", "Block");
        model.geom("geom1").run();

        // 后续可继续添加物理场、网格、求解器
        model.sol().create("sol1");
        model.sol("sol1").study("std1");
        model.sol("sol1").runAll();

        model.save("D:/batch/out.mph");
    }
}

编译运行该 Java 程序时,需要保证 JVM 能加载 COMSOL 本地库,通常通过 -Djava.library.path 指向 COMSOL 的 bin/win64 目录。若运行时报 UnsatisfiedLinkError,优先检查该路径是否正确、位数是否与 JVM 一致(COMSOL 6.x 通常为 64 位)。

五、配置检查清单

三条路径配置完成后,建议按下面的清单逐项确认,避免在后续批量脚本中反复踩坑。

检查项LiveLink for MATLABCOMSOL CompilerJava API
许可证组件LiveLink for MATLABCompiler 许可证COMSOL 基础许可证
版本兼容MATLAB 版本需在支持区间COMSOL ≥ 6.0JDK 位数与 COMSOL 一致
关键路径comsol.jar 加入 MATLAB Java 路径编译输出目录可写java.library.path 指向 bin/win64
启动/调用入口mphstart(2036)myBatchApp.exe -p ...ModelUtil.create()
典型验证创建空模型并保存成功生成 .exe 且能运行出结果Java 程序正常保存 .mph
不要在同一台机器上同时用多个 COMSOL Server 实例监听同一端口;若 2036 被占用,可改用 comsol server -port 2037,并在 MATLAB 中相应执行 mphstart(2037)。

完成本节配置后,你应当能够根据任务类型选择合适接口,并至少让其中一条路径跑通“创建模型 → 保存文件”的最小闭环。这个闭环是后续参数扫描、批量提交和结果自动收集的基础。