
你知道吗?你可以在 COMSOL 中使用 研究 节点执行一系列程序化操作,包括求解模型、将模型保存到文件,以及生成和导出绘图组、结果和图像。这篇博客,我们将详细介绍这一实用功能。
编者注:本文最初发布于 2017 年 6 月 21 日。内容和图片现在已经更新。
示例:微混合器模型
为了演示此功能,我们将从案例库中加载微混合器教程模型。该模型位于 COMSOL Multiphysics > 流体动力学 文件夹中,演示了层流静态混合器中的流体流动和质量传输。
该模型首先使用 层流 接口模拟流体流动。然后,将流体流动模拟的结果作为输入,通过 稀物质传递 接口计算混合效率。物质将基于流体速度被输送到下游。
该模型的计算时间为几分钟。为了简化模型以更快地运行计算,我们将不求解物质传递。为此,我们将修改第二个研究步骤 (步骤 2:稳态 2)的设置,清除 设置 窗口中的 稀物质传递 和 反应流,稀物质 复选框。
为了加快模型运行速度,我们还可以做一个额外的更改。在 网格 节点设置中,将 序列类型 设置为 物理场控制的网格,将 单元大小 设置为 极粗。
现在,我们可以计算 研究 1,以确保一切正常。结果图显示了沿混合器几何形状的几个切面的速度大小。
使用作业序列自动保存模型
准备好模型后,我们就可以使用作业序列来自动完成模型求解和保存的过程。
要在 研究 节点下定义操作序列,首先要单击模型开发器工具栏上的相应按钮(眼睛图标),打开 显示更多选项 对话框。然后,选择 求解器和作业配置 复选框。
启用此设置后,模型树中会出现一个隐藏的 作业配置 节点。在常规建模工作中,不需要担心这个节点。它主要存储与求解过程运行顺序有关的底层信息。通常,这种顺序由研究的顶层间接控制,无需启用 求解器和作业配置 选项。
右键单击 作业配置 并选择 序列 选项,添加 序列 子节点。
接下来,右键单击 序列 节点,查看 运行 选项下方的各种选项,这些选项可在运行序列时添加为顺序操作。
- 作业 — 可以使用 作业 选项添加另一个作业配置,以从此序列中运行。
- 解 — 解 选项运行 研究 树中 求解器配置 节点下其中一个 解节点。
- 其他 — 在 其他 选项下,可以选择 外部类 来调用外部 Java 类文件。几何 选项可创建一个 几何 节点,例如,与参数扫描结合使用,可生成一系列具有不同几何参数的 MPH 文件。网格选项会生成一个 网格节点。方法调用 选项将会调用 App 开发器中创建,并添加在 全局定义 下的方法。
- 将模型保存到文件 — 将模型保存到文件将求解的模型保存到 MPH 文件中。
- 结果 — 在 结果 选项下,可以选择 绘图组 来运行所有或选定的绘图组。使用 绘图组 选项可以自动生成绘图组,即不必在求解后手动点击所有绘图组来生成相应的可视化结果。派生值 选项是根据惯例设置的,建议使用 计算派生值 选项,该选项将计算 结果 > 派生值 下的节点。导出至文件 选项可以在 导出 节点下运行任何节点来进行数据导出。
注:通过添加 序列 节点执行的所有操作也可以通过编写 Java API 代码和使用方法编辑器来实现。一般来说,在用户界面中执行的任何操作也可通过 COMSOL API 执行。
现在让我们创建一个简单的序列。右键单击 序列 节点,选择 解 选项。
一般来说,根据模型及其研究,不同的研究将定义多个求解器序列。在 解 节点设置的 常规 部分,运行 设置可指定要计算的求解器序列。默认情况下,全部 选项会为所有研究运行 求解器配置 下的所有求解器序列。通常,需要将 运行 设置为你打算运行的特定求解器序列。
在本例中,求解器序列 解1 (sol1) 包含 求解器配置 > 求解器 1 下所列的操作。同时,解数据结构 解存储 1 (sol2) 用作 稳态求解器 1 计算出的解的辅助存储,与解序列无关。因此,在这种情况下,我们将选择 解1 (sol1)。
求解器完成求解后,我们需要保存文件。为此,右键单击 序列 节点并选择 将 保存模型到文件。
在 将模型保存到文件 设置窗口中,可以看到一系列选项,用于保存一系列 MPH 文件,并在文件名末尾添加参数。这些选项对于 批量扫描等参数扫描非常有用。不过,在这种简单示例中,并不需要这样做,因此我们将为 将参数添加到文件名 设置中选择 无 选项。在此阶段,我们还需要为有写入权限的位置提供文件名。在本例中,文件名和文件路径为 C:\COMSOL\myfile.mph。
要运行这些操作,请选择 序列 节点并单击 运行。
在 COMSOL Multiphysics® 中求解模型后导出数据
我们使用的案例库模型微混合器已经定义了一个派生值。您可以在 结果 > 派生值 > 全局计算 中看到。该变量名为 S_outlet,是出口处的相对浓度方差,其定义位于 组件 > 定义 > 变量 下。
S_outlet 的值被发送到 表 1。我们可以通过更改 表 1 设置 窗口中的设置,将此值存储到文件中。将 存储表 设为 在文件中,并指定文件名,例如 C:\COMSOL\my_data.txt。
现在,在序列中添加 计算派生值 操作。
在 计算派生值 节点设置的 常规 部分,如果你想计算所有量,可以将 计算 设置从 全部 改为 全局计算 1。请注意,选择此选项后,模型树中的节点名称将变为 计算:全局计算 1。不过,在这个简单的示例模型中,只有一个模型树节点需要计算,可以省略这一步。
在 结果 部分,将 目标表格 更改为 表格 1(我们在此处定义了输出文件名和位置)。
再次运行序列前的最后一步是在 步骤 2:稳态 2 的 设置 窗口中启用 稀物质传递 接口 和 反应流,稀物质 选项,以求解物质传递(我们最初为了更快地运行模型跳过了这一步)。
现在,我们可以运行序列了。
从研究层或命令行运行任务序列
要从主 研究 节点或命令行运行作业序列,可以使用 参数化扫描来代替上述方法。参数化扫描 是一种特殊类型的作业序列,与上述说明基本相同。不过,在这种情况下,作业配置 > 参数扫描 节点扮演了作业配置 > 序列节点的角色。
在添加 参数化扫描 节点之前,请删除作业配置 > 序列 节点及其子节点。
然后,在 研究 1 下添加 参数化扫描。这将自动创建一个 作业配置 > 参数化扫描 节点。但是,默认情况下,顶层 研究 节点不识别 作业配置 下的作业序列。同样,命令行接口也不允许在 研究 节点内直接执行作业序列;它只支持运行整个研究。在 全局定义> 参数 下添加一个虚设参数(例如,dummy = 1),就能为识别引入必要的识别机制,从而可以直接从 研究 1 或通过命令行执行。
对应的 参数化扫描 显示方式如下图所示:
现在,右键单击 研究 1 并选择 显示默认求解器。这将在 作业配置 下添加一个 参数化扫描 节点。
下图显示了对一个虚设参数的一个参数值的对应扫描。既然 参数化扫描 1 节点只是 序列 节点 的一种特殊类型,那么子节点 解1、将模型保存到文件 1 和 全局计算 1 的操作与上一个使用 序列 节点的示例相同,我们可以以同样的方式添加它们。
要从模型开发器运行作业序列,请右键单击 研究 1 节点并选择 计算。
使用命令行接口
如果希望使用命令行接口(如 Windows® 操作系统中的命令提示符窗口)运行作业序列,添加了虚设参数后,就可以键入如下命令:
comsolbatch -inputfile mymodel.mph -study std1,
其中,std1是 研究 1 的标签。
就像在 COMSOL Desktop® 上运行研究一样,该命令将执行一系列操作,包括求解、将模型保存到文件,以及最后对 全局计算 节点进行计算。请注意,如果模型中只有一个 研究 节点,则可以省略输入参数 study std1。
要显示模型树标记,请从模型开发器工具栏上的 模型树节点文本 菜单中选择 标记。
研究标记 std1 现在在模型树中可见:
请注意,如果模型中已经有参数化扫描,则每次扫描都将是 内部扫描 或 外部扫描。上例中使用虚设参数的扫描是 外部扫描。研究 节点会自动检测使用哪种类型的扫描以获得最佳性能,但您也可以根据需要手动确定。要使用命令行作业序列,你的扫描必须是 “外部扫描”。
几乎所有类型的扫描都可以从内部扫描变为外部扫描,但反之则不行。内部扫描可以更快,因为它们会使用计算的一些底层结构来加快速度。然而,并非所有类型的扫描都可以是内部扫描。例如,对几何参数的扫描必须是外部扫描;同样,求解器会自动处理。要确保参数扫描是外部扫描,请将参数化扫描设置中的 使用参数求解器 更改为 关;然后执行 显示默认求解器 操作并继续。
下一步
求解模型后,作业序列可用于自动执行许多常见任务。在这篇博客中,我们演示了如何:
- 将模型保存为 MPH 文件
- 将 派生值 导出到文件
你还可以自己尝试其他使用工作序列的任务,包括:
- 求解后重新生成所有绘图
- 将绘图数据导出到文件
- 将图像数据导出到文件
希望作业序列能成为您日常建模工作中的一项有用功能!
Oracle 和 Java 是 Oracle 和 / 或其附属公司的注册商标。Microsoft 和 Windows 是微软公司在美国和/或其他国家的注册商标或商标。
评论 (0)