批处理扫描功能的优势

2023年 5月 19日

你是否曾经通宵运行大量的参数化扫描,第二天早上却发现参数化求解器仍在运行?你或许希望在等着最后几个参数的收敛的时候,能够查看已计算好的参数解。批处理扫描 功能是解决上述问题的有效方法,计算好的参数化解会自动保存为文件,便于打开进行可视化及结果评估。

编者注: 这篇博客最初发表于 2016 年 2 月 2 日,现在已经更新用于反映软件的新特征和新功能。

批处理扫描:众多仿真分析的有效解决方案

在以前的一篇博客文章中,我们探讨了批处理扫描中任务并行的附加值。今天,我们将讨论批处理扫描的另一个重要功能:在求解过程中检索参数化扫描的解。使用批处理扫描可以随时检索部分解,即使在求解器无法计算某些参数时,也可以这样做。当所研究的问题中每个参数的解都独立于其他所有参数的解时,就适合采用批处理扫描。

在求解器扫描过程中,许多情况下会希望查看部分结果。例如:

  • 在扫描输入数据表时,你会发现求解表中所列的一部分数值所需的时间格外长,但却无法判断具体是哪些值。你仍希望求解尽可能多的参数以查看对应的解,从而判断是中止求解过程,还是在整个扫描完成之前就开始分析结果。
  • 你在用数学表达式描述某一材料属性或边界条件,结果却得到某些参数的非物理结果。
  • 你用 C 语言或 FORTRAN 语言编写了一个有关定义复杂材料的外部函数,但未检查所有的输入数据,结果某些参数值的输出数据出现了异常。
  • 你正运行一个含有几何尺寸参数的参数化扫描,但参数的尺寸范围不小心定义得太宽了。当你意识到这一点时,求解已经运行了很长时间,所以不希望停下来。

如果以上任何一种情况中使用了批处理扫描,那么每个参数都在一个能独立开始和停止的进程中求解。每一个求解完的参数值都被存储为一个.mph 文件,你可以在求解过程中打开任何一个这样的文件进行查看。在下面的示例中,你还会了解如何将探针结果保存到文本文件中。

一个静电传感示例

为了演示批处理扫描,我们采用 COMSOL Multiphysics® 核心产品的“案例库”中的电传感器示例。这个示例模型介绍了在盒子边界施加电位差后,盒内的情况。其中产生的表面电荷取决于盒内物体的介电常数,用于判断盒内是否存在物体,甚至可以帮助确定物体的形状。例如电阻抗断层成像采用了一种类似的技术用于医疗诊断,只不过这种技术使用的是交流电。

电传感器模型中盒外的表面电荷。
盒外的表面电荷。

屏幕截图显示了盒内待检测的物体。
盒内待检测的物体。

初始模型中,物体拉伸到 0.8 米厚。在这个示例中,拉伸距离改为 0.5 米。

参数化扫描的输入数据

假设有一组十个样本物体,其形状相同,但制作材料的介电常数值不同。我们要探究的是物体及其形状的检测能力,而不管物体的制作材料是什么。十个样本的介电常数值已存储在内插表 int1 中。我们不会真的在这个表中插入任何值,只是把它作为存储和调用表列值的简便方法。(在这里,我们将内插方法从默认的线性内插 改为最相邻内插,但在本示例中结果不变。)

模型开发器中的介电常数表格。
介电常数的表格。

现在用全局参数 sn(样本编号的英文缩写)对这个样本组添加索引。

使用全局参数对样本组添加索引。
样本编号参数 sn 作为全局参数。

此模型在“材料”节点下定义了三种材料。“材料 3”表示盒内的星形物体,“材料 2”表示另一个物体。“材料 1”对应盒内物体周围的空气。我们调用了内插表 int1,使用其中的值作为“材料 3”的材料属性定义中星形物体的介电常数。使用语法 int1(sn)。请注意,这里没有考虑单位,因为介电常数没有单位。

星形物体的介电常数。
星形物体的介电常数取自通过参数 sn 进行索引的表。

探测表面电荷

为了监控星形物体上方的表面电荷,我们在上表面的位置 x = 1.5,y = 1.5,z = 1.0 处定义了一个“边界点探针”。要快速定义此位置,只须在上表面靠近物体上方的大致位置处单击,然后在设置 窗口中手动调整坐标值。

所研究物体上方的边界点探针。
所研究物体上方的 边界点探针

至于“点探针表达式”,我们选择用变量名 es.nD 和单位 nC/m^2 来表示表面电荷的大小(模值)。

点探针表达式设置窗口的近视图
单位为 nC/m^2 的表面电荷的 点探针表达式

稍后,我们会将此探针的输出写入文本文件。为此,单击更新结果。这一操作会生成派生值表格项

边界点探针设置中的更新结果按钮
探针的 更新结果 按钮

在 COMSOL Multiphysics® 中设置批处理扫描

默认情况下不会显示批处理扫描选项。要启用该选项,在模型开发器的工具栏中选择显示更多选项。在显示更多选项 对话框选择研究>批处理和集群

显示更多窗口中打开的批处理和集群研究
高级研究选项,在模型开发器中的 显示更多选项菜单激活

如果右键单击研究 节点,可以在列表中选择批处理扫描 (单次运行,选择批处理,不要选择批处理扫描)。

 COMSOL Multiphysics中的批扫描菜单选项。
研究菜单中选择 批处理扫描

在如何定义扫描范围方面,批处理扫描与参数化扫描相似。在这里,我们使用整数 1 到 10 来定义参数 sn 扫描时的步长。

扫描的参数范围。
批处理扫描的参数范围。

批处理扫描 模型树设置 窗口的批处理设置 栏中包含了用于控制结果的设置。

在批量扫描设置窗口中展开的批量设置部分的屏幕截图。
控制批处理扫描的设置。

默认文件名为 batchmodel.mph,用于自动创建一个 MPH 文件序列,其中的每个文件对应于扫描中的每个参数。文件名可以更改,不过对于此演示示例,我们仍保留此文件名,生成的MPH文件名将分别为 batchmodel_sn_1.mphbatchmodel_sn_2.mph,……,batchmodel_sn_10.mph。稍后我们会探讨这其中的每个文件为何是一个完整的模型,可以单独打开并执行后处理。

扫掠前 一栏有两个选项:清除网格和清除解。我们清除了这两个复选框,因为只有在执行远程集群计算或云计算时,这两个选项才真正有用,因为这时我们希望经网络传递的文件尽可能小(只有使用网络浮动许可证时才能这样做)。

在扫描过程中 一栏有两个选项:同步解同步累积探针表同步解 将存储的所有文件中的结果收集到我们要开始仿真的“主模型” MPH 文件中,最终结果与运行参数化扫描的结果极其相似。我们选择清除这个复选框,因为在这个示例中我们假定只希望查看每个结果。此外,如果扫描的数量过于庞大,则收集全部结果可能要消耗大量的时间和内存。同步累积探针表 保持选中,表示对探针的输出结果进行累积,与完整的求解信息相比,收集这种信息非常轻松。

扫掠后 一栏中,我们勾选输出模型到文件 复选框,这确保了自动保存的 MPH 文件包含解(对应每个参数)。

下一个设置是存储所有这些文件的目录(此处是 C:\COMSOL)。

如果你有网络浮动许可证,并且希望使用远程安装的 COMSOL 软件执行这一计算,那么可以使用指定服务器路径 选项。本文中,我们只讨论包括单用户许可证在内的 COMSOL 所有许可证类型都能使用的功能。

将探针数据保存到文件

要将探针数据保存到文件,不能使用常规的探针表。而要使用一种特殊的累积探针表。第一步是手动添加一个探针表,即右键单击结果下的表格 节点,将表格名称改为保存的探针表。稍后,我们会通过批处理扫描在其中写入“累积探针表”的数据。当异步生成的数据要在表格中按照一定的顺序排列时,就可以使用“累积探针表”。请记住,一般而言,我们不清楚不同的参数对应的解应该按照什么顺序排列,而“累积探针表”帮我们解决了这一难题。

屏幕截图显示了如何添加保存的探针表
手动添加“保存的探针表”。

在“保存的探针表”的设置中,将存储表 设置改为模型和文件中。在本示例中,我们将探针结果保存到 C:\COMSOL\results.txt。如果扫描的数量过于庞大,则可能需要提高最大行数 的值(这通常适用于需要大量扫描的情况或瞬态解)。

保存的探针表设置的屏幕截图。
“保存的探针表”设置。

批处理扫描 设置的求解时输出 一栏中,将输出表 改为保存的探针表。这就是我们的“累积探针表”。

突出显示具有批处理扫描的模型开发器,并展开具有求解时输出部分的相应设置窗口。
“保存的探针表”用作“累积探针表”。

运行批处理扫描

现在可以单击计算 启动批处理扫描。求解过程中,在图形 窗口下的信息窗口中会看到一个外部进程 窗口。

外部进程窗口屏幕截图
外部进程窗口。

通过“外部进程”窗口,我们可以了解正在运行的批处理进程及其状态的概况。在我们的示例中,共有十个这样的进程,分别对应扫描中的每一个参数。

在这个阶段,大部分的用户界面不能交互,不过可以单击进度条左侧的脱离作业,重新获得对用户界面的控制。

脱离作业选项
脱离作业 选项。
使用 脱离作业后,就看不到进程状态的实时更新了,不过这时可以对各个进程执行操作。

屏幕截图显示了脱离作业后外部进程窗口。
脱离作业后的 外部进程窗口。

此时可以停止所有进程,或者单击某一行来停止该进程。甚至可以单击表中状态为完成 的进程,在另一个 COMSOL Desktop 窗口中打开它。在新打开的窗口中,可以执行任何可视化操作或后处理任务,就像通常对模型所做的那样。

外部进程窗口的打开文件选项。
选择一个完成的外部进程,单击 打开文件,即可在一个新的 COMSOL Desktop 窗口中显示结果。

要重新显示进程状态的实时更新,单击外部进程 窗口左上角的附加作业

屏幕截图显示了外部进程窗口的附加作业选项。
外部进程窗口附加作业。

探针结果文件

可以使用 Notepad 等文本编辑器打开包含探针输出的 results.txt 文件。

探针结果近图
包含边界点探针结果的 results.txt 文本文件。

在求解过程中也可以查看这个文件,从而在全部参数都完成收敛之前快速浏览结果。不仅是批处理扫描可以这样做,对于常规的参数化扫描,在表格保存为文件后也可以在求解过程中查看。

使用批处理扫描功能时需要考虑的其他因素

性能

如果扫描中每次计算速度都很快,且不需要很大的内存,就如上面的示例,那么批处理扫描所需的计算时间会比常规的参数化扫描的时间长。因为采用批处理扫描时,每个参数都会启动一个 COMSOL Multiphysics 进程。如果扫描中每个参数的计算都比较费时,那么这个额外启动进程的时间就相对较短,可忽略不计。

参数错误处理

假设我们调用的是用户定义的外部 C 语言函数,而不是内插表。再假设我们在 C 代码中犯了一个编程错误,导致一个或几个参数在扫描时出现“段错误”。这种情况下,我们仍然可以浏览 C:\COMSOL 目录(或者指定保存 .mph 文件的目录),打开其中的文件执行可视化及后处理,甚至是进一步的计算工作。

在上面的示例中,演示此类错误的一个简单方法是将其中的一个介电常数值设为零,然后启动批处理作业。介电常数为零意味着我们向求解器提供了一个定义模糊(甚至是异常)的方程(类似于 0 = 1),此时会显示一条错误消息,提示求解器找不到出错参数的对应解。同样地,仍可以打开保存的 .mph 文件并执行后处理。如果更正了表格,将介电常数为零的那一项改成非零,则可以重新运行批处理作业,而不会收到错误消息。请注意,如果错误一直存在,则对外部进程 窗口附加作业时始终会提示错误。此时,仍会更新“累积探针表”中与其他参数对应的项。更正错误后继续运行扫描,对外部进程 窗口附加作业后就可以再次访问该窗口了。

多核处理管理

如果你在使用一台多核机器,这是现代电脑的常见配置,那么可以更改批处理 的相关设置,控制批处理扫描中可运行的并发进程数,以及每个进程可用的内核数。假如使用的是六核机器,那么可以将并发作业数 改为三,将内核数 改为二。这样设置后,可以并行求解三个参数,每个求解器进程可使用两个内核,所以对于上面的示例,仿真时间减少了一半。

如果所执行的仿真中每个参数的计算量都很少,那么可以增加并发作业的数量,使其与计算机的内核数相同。对于计算量较大的问题,应该将并发作业数保留为一,以完全利用求解器的多核处理能力。

多核批处理设置。
“批处理”设置中的“并发作业数”和“内核数”。

请注意,也可以在批处理扫描 节点研究扩展 一栏下控制并发作业数。这种情况下,软件会用实际内核数除以并发作业数,自动计算出“内核数”。(要实现自动计算,务必不要勾选批处理 设置下的内核数 复选框,因此不会使用以灰色显示的数字 1。)

批处理扫描和 App 开发器

借助“App 开发器”,可以在用于构建 App 的模型中使用批处理扫描 节点。此时,App 充当批处理扫描的“驱动”,且无法在外部进程 窗口中看到相关信息。也无法在该窗口中看到保存的 .mph 文件,如同此 App 根本没有用户界面。运行结束后,可以打开这些文件进行传统的模型后处理工作。如果需要更灵活地创建可使用批处理扫描 的 App,可以使用一个内置的方法来包含批处理扫描 ,详细请参考 Programming Reference Manual。(注意,在这里使用“录制代码”工具的作用很有限,因为在生成录制的代码时会与实时运行的批处理命令冲突。)

批处理扫描 vs 集群扫描

COMSOL Multiphysics 的所有许可证类型都可以使用批处理扫描 功能。如果你有网络浮动许可证,则还可以使用集群扫描 这一附加功能。这两个扫描功能很相似,不过集群扫描 选项多了远程计算和集群配置等设置。“集群扫描”功能可以将大量扫描分散到一个(很可能是大型的)集群上。这种做法显著提高了效率,因为独立扫描(也称作易并行计算)所涵盖的范围通常很广。如果你已熟练掌握了批处理扫描,那么运行集群扫描也不是什么难事。

下一步

想自己探索一下这篇博客中讨论的模型吗?欢迎查看 COMSOL 案例库下载:

拓展阅读

阅读 COMSOL 博客,了解更多关于批处理扫描和集群扫描的文章:


评论 (0)

正在加载...
浏览 COMSOL 博客