如何从命令行运行 COMSOL Multiphysics®

作者 Walter Frei
2020年 12月 9日

你知道如何从命令行运行同一个模型文件的多种工况并自动导出数据吗?我们只需要在 COMSOL Multiphysics® 软件的用户界面(UI)中进行少量准备工作,就可以使用方法来扩展模型文件,在方法中通过命令行自动实现许多模型的设置和计算。下面,我们来看看如何操作……

从模型写出数据

以在 COMSOL® 软件介绍中使用的模型——母线板教程模型 为例来演示如何操作这一工作流程。该模型具有多个需要研究的参数化输入以及需要得到的输出。

首先,将模型中的一些数据写入硬盘。我们的模型已经建立了多个绘图,包括其中的一个温度场。右键单击此特征,然后选择 添加要导出的图像 选项,将获得结果 > 导出 > 图像 特征,其设置如下面的屏幕截图所示。在这些设置中,键入输出文件名。请注意,我们还可以根据需要调整图像布局 设置。我们可以添加一些类似的特征,并导出其他类型的数据,包括动画、网格信息等。如果要一次性写出所有这些数据,请右键单击导出 分支,然后选择全部导出 选项。

A screenshot of the COMSOL Multiphysics model tree with the Results node opened to the Export branch and the image export settings opened.
屏幕截图显示了结果中的导出分支,此处用于导出图像文件。

我们还可以提取一些标量值。在结果 分支下添加计算组 特征,并添加任意数量的派生标量值。例如,对所有域中的损耗进行 积分 并计算最高温度。在 计算组 设置中,还可以指定文件名,如下所示。

A screenshot of the Evaluation Group node opened to the settings that specify writing numerical data to a file.
该屏幕截图显示了 计算组,将数据组合并写到文件中。

最后,结合计算组导出 特征,我们可以从模型中写出任意数量的数据。现在,让我们看看如何进一步实现自动化操作。

通过模型方法自动操作

我们需要 Microsoft® Windows™ 操作系统来使用模型方法,因为我们将使用 App 开发器 功能。单击功能区中的 App 开发器 按钮,或使用键盘快捷键 Control + Shift + A,将进入下图所示的界面。此处我们需要做的是在方法 分支中添加一个新方法,并为其命名,例如,my_method,但是先不添加任何内容。通过左上方的按钮或键盘快捷键 Control + Shift + M 返回到模型开发器。

The Application Builder zoomed in and open on a blank Method Editor window for writing a method to run COMSOL Multiphysics from the command line.
建立了一个方法的 App 开发器屏幕截图。

回到模型开发器,添加方法调用。右键单击全局定义,然后转到方法调用 子菜单,我们将在其中看到我们刚刚创建的方法。添加并确保更改标记 字段。通常,我们可以使用与App开发器中相同的名称。我们可以在下面的屏幕截图中看到方法调用 特征具有三个按钮:

  1. 运行
  2. 停止
  3. 编辑方法

编辑方法 按钮是一个快捷方式,可以便于切换到 App 开发器,一旦我们需要在方法中添加代码时就可使用此功能。

A screenshot of a Settings window showing how to add a call to a method in the Model Builder.
在模型开发器中添加方法的调用,使我们能够运行和编辑该方法。

如果对编程不是很熟悉,那么我们可以执行以下操作:方法包含代码片段,其中每行代码包含在模型上的某种修改或操作。有 2 种方法可以从模型开发器中提取这些代码片段。

第 1 种方法是转到开发工具 选项卡,然后单击录制方法。接着,我们可以在模型开发器中执行一系列完整的操作,直到单击停止录制 按钮。相关代码将保存到新方法中。

在第 2 种方法中,右键单击模型树中的特征,并且(在大多数情况下)我们将看到作为代码复制到剪贴板 子菜单。在模型的研究 分支上进行尝试,其中一个选项是运行。选择此选项可将用于运行的代码片段复制到剪贴板。转到方法编辑器并粘贴(Control + V)以查看代码:

model.study(“ std1”).run();

第 2 种方法比较简单,因此我们在这篇博客文章中使用了此方法。

A screenshot of the export settings with a menu expanded and the option Copy as Code to Clipboard selected.
复制用于运行模型树的特定节点的代码。

我们可以添加更多代码来自动执行数据提取。我们已经设置了将数据写到硬盘的功能,现在只需要在我们的方法中包括这些功能的运行即可。右键单击导出 特征,然后在运行命令中再次使用作为代码复制到剪贴板,如上所示。将其粘贴到我们的方法中,然后对计算组 重复此操作。完整的方法应如下所示:

model.study(“ std1”).run();
model.result().export().run();
model.result().evaluationGroup(“ eg1”).run();

由于我们正在通过方法写入硬盘,因此我们可能还需要更改一些默认的安全首选项。进入文件菜单 > 首选项 > 安全性,并允许访问所有文件的文件系统。此设置显示在下面的屏幕截图中。否则,我们将只能写入临时 和 App 文件 位置,此部分通过文件菜单 > 首选项 > 文件进行指定。

A screenshot of the Preferences window opened to the Security options.
如果需要,修改安全性首选项以允许方法写入文件。

现在,当我们运行此方法时,将重新求解整个模型,并将新的数据和图像文件写出到硬盘。最后一步是从命令行完成所有操作,完全不使用用户界面。

从命令行运行

保存此修改后的文件,将其命名为 my_file.mph,然后退出 COMSOL Multiphysics 用户界面。打开 Windows 命令提示符,然后导航到包含模型文件的目录。确保将 COMSOL® 可执行文件的路径添加到 PATH 环境变量中,然后输入以下命令:

comsolbatch -inputfile my_file.mph -pname tbb,Vtot -plist“ 1 [cm]”,“ 10 [mV]”-methodcall my_method -nosave

此命令将打开模型,并通过 -pname-plist 变元的组合使用修改模型中的两个全局参数。当前情况下,参数 tbb 会更改母线板的厚度, Vtot 为所施加的电压。

我们自定义的方法将被调用(通过 -methodcall 变元),实现运行模型并写出数据。附加的可选变元 -nosave 表示不保存模型文件。有关此处所使用的和所有其他可选变元的完整详细信息,请参见《COMSOL Multiphysics 参考手册》中的 COMSOL 命令部分。

现在,修改模型和写出数据的整个过程都已经简化为一个命令了。

我们还能做什么?

当然,我们在这里所做的只是一个非常简单的示例,以演示运行模型和写出数据的自动化过程。其实我们还可以做很多工作。基本上我们可以将所需的任何代码放入模型方法中。例如,可以放入以下代码:

另外,值得一提的是,我们还可以使用另一种工作流程实现许多相同的数据提取,即通过作业序列功能 (此功能不需要使用方法)。

最后,需要说明的是,我们可以同时并行运行多个不同的批处理作业,当我们拥有一台配置大内存和内核的计算机时,这种方法尤其有效。

Microsoft 和 Windows 是 Microsoft Corporation 在美国和/或其他国家的注册商标或商标。


评论 (2)

正在加载...
Yun Xiaoxiao
Yun Xiaoxiao
2024-06-01

你好,我能通过在mtalab完成以上操作吗?
我现在已经能在window的“命令行”完成以上工作,我现在想使用matlab来帮助我完成这些事情
但是,貌似使用cd或者system会报错,提示我’comsolbatch’ 不是内部或外部命令,也不是可运行的程序或批处理文件。

Yun Xiaoxiao
Yun Xiaoxiao
2024-06-03

已解决

浏览 COMSOL 博客