在之前的文章中,我们探讨了批处理扫描中任务并行的附加值。这篇文章,我们将讨论批处理扫描的另一个重要功能:在求解过程中检索参数化扫描的解。使用批处理扫描可以随时检索部分解,即使在求解器无法求解某些参数时,也可以这样做。当所研究的问题中每个参数的解都独立于其他所有参数的解时,就适合采用批处理扫描。
在求解器扫描过程中,希望查看部分解的情况很多,例如:
当基于表格中的输入数据扫描时,你发现求解表格中列出的一部分数值所需的时间格外长,但无法判断具体是哪些值。这时,你希望能查看尽可能多参数的解,以判断是否需要中止求解过程,或者在所有扫描完成之前开始分析结果。 你用数学表达式描述某一材料属性或边界条件,结果却得到某些参数的非物理解。 你用 C 语言或 FORTRAN 语言编写了一个有关定义复杂材料的外部函数,但未检查所有的输入数据,结果某些参数值的输出数据出现了异常。 你正运行参数化扫描,其中一个参数为几何尺寸,但尺寸的范围定义得过大。当你意识到这一点时,求解已经运行了很长时间,所以不希望停止运行。
如果你在以上任何一种情况中运行了批处理扫描,每一个参数都能在一个单独的进程中求解,这个进程可以独立开始和停止。求解完成的参数值都被存储为一个 .mph 文件,你可以在求解过程中打开任意数量的文件进行查看。在下面的示例中,你将了解如何将探针结果保存到文本文件中。
我们使用 COMSOL Multiphysics® 案例库中的电传感器示例模型来展示批处理扫描的操作。此模型展示了如何通过在盒的边界施加电位差获得盒内的图像信息。模型计算的表面电荷结果取决于盒内物体的介电常数,该结果也可用于判断例如盒内是否存在物体,甚至可以帮助确定物体的形状。电阻抗断层成像案例中也采用了类似的技术进行医疗诊断,但使用的是交流电。
原示例模型中将物体厚度拉伸为 0.8 米。本文示例中,物体厚度被拉伸为 0.5 米。
假设有一组包含十个样本的物体,这些样本形状相同但由具有不同介电常数的材料制成。我们要探究的是检测物体及其形状的能力,不管物体由什么材料制成。十个样本的介电常数值已存储在内插表 int1 中。实际上我们不会使用这个表格进行任何插入操作,而是把它作为一种存储和调用表格值的简便方法。(在这里,我们可以将内插方法从默认的线性插值改为最相邻插值,但此示例结果保持不变。)
现在用全局参数 sn(样本编号的英文缩写)对这个样本集添加索引。
此模型在材料节点下定义了三种材料。材料3表示盒内的星形物体,材料2表示其他物体。材料1 对应盒内物体周围的空气。我们通过适当调用材料3的材料属性中定义的内插表 int1,来改变星形物体的介电常数。使用的语法为 int1(sn)。请注意,这里无需考虑单位,因为介电常数是无量纲。
为了监测星形物体上方的表面电荷,我们在盒子上表面的 x=1.5,y=1.5,z=1.0 位置处定义了一个边界点探针。为了快速定义此位置,我们可以单击物体上表面的一个大致位置,然后在设置窗口中手动调整坐标值。
至于点探针表达式,我们选择用变量名 es.nD 和单位 nC/m^2 来表示表面电荷的大小(模值)。
稍后,我们会将此探针的输出写入文本文件。为此,单击更新结果。此操作会生成一个派生值和表格项。
默认情况下,软件不会显示批处理扫描选项。可以在模型开发器的工具栏中选择显示更多选项启用该选项。在显示更多选项对话框选择研究>批处理和集群。
如果右键单击研究节点,可以在列表中选择批处理扫描(单次运行,请选择批处理,而不是批处理扫描)。
在如何定义扫描范围方面,批处理扫描与参数化扫描相似。这里,我们使用整数 1 到 10 来定义参数 sn 扫描时的步长。
批处理扫描模型树设置窗口的批处理设置栏中包含用于控制结果的设置。
默认文件名为 batchmodel.mph,用于自动创建一个 MPH 文件序列,其中每个文件对应于扫描中的每个参数。你可以更改文件名,不过本文演示的示例仍保留此文件名,生成的 MPH 文件名将分别为:
稍后我们会探讨这其中的每个文件为何是一个可以单独打开并执行后处理的完整模型。
扫掠前部分有两个选项:清除网格和清除解。我们清除了这两个复选框,因为只有在执行远程集群计算或云计算时,这两个选项才真正有用,并希望通过网络传送的文件尽可能小(只有使用网络浮动许可证时才能这样做)。
在扫描过程中部分有两个选项:同步解和同步累积探针表。同步解将存储的所有文件中的结果从开始仿真时收集到“主模型” MPH 文件中,最终结果与运行参数化扫描的结果极其相似。在这个示例中,选择清除这个复选框是因为我们假设只对查看单个结果感兴趣。此外,如果扫描的范围很大,收集所有结果可能会消耗大量时间和内存。保持选中同步累积探针表状态,表示对探针的输出结果进行累积,与完整的求解信息相比,收集此信息非常轻松。
在扫掠后一栏,勾选输出模型到文件复选框,确保自动保存的 MPH 文件包含(每个参数的)解,但需要额外的磁盘空间。
在下一节中,将群集计算设置更改为用户控制。然后,将目录更改为 C:\COMSOL。这就是存储所有批处理文件的位置。
如果你有网络浮动许可证,并且希望使用远程安装的 COMSOL 软件执行这一计算,可以使用指定服务器路径选项。本文我们只讨论包括单用户许可证在内的 COMSOL 所有许可证类型都能使用的功能。
为了将探针数据保存到文件,我们不能使用常规的探针表,而是使用一种特殊的累积探针表。第一步是手动添加一个探针表,即右键单击结果下的表格节点,将表格名称改为保存的探针表。稍后,我们会通过批处理扫描在其中写入累积探针表的数据。当需要将异步生成的数据在表格中按照一定的顺序排列时,就可以使用累积探针表。一般来说,我们不清楚不同的参数对应的解应该按照什么顺序排列,而累积探针表可以帮我们解决这一难题。
在保存的探针表的设置中,将 存储表 设置改为 模型和文件中。本示例我们将探针结果保存到 C:\COMSOL\results.txt。如果扫描的数量过于庞大,可能需要提高最大行数的值(这通常适用于需要大量扫描的情况或瞬态解)。
在批处理扫描设置的求解时输出一栏中,将输出表改为保存的探针表。这就是我们的累积探针表。
将保存的探针表作为累积探针表时用。
现在,我们可以单击计算启动批处理扫描。求解过程中,图形窗口下的信息窗口会显示一个外部进程窗口。
通过外部进程窗口,我们可以了解正在运行的批处理进程及其状态的概况。本文示例中,共有十个这样的进程,分别对应扫描中的每一个参数。
在这个阶段,大部分用户界面不能交互,但可以单击进度条左侧的脱离作业,重新获得对用户界面的控制。
使用脱离作业后,就看不到进程状态的实时更新了,不过这时可以对各个进程进行操作。
此时,我们可以停止所有进程,或者单击某一行来停止该进程,甚至可以单击表中状态为完成的进程,在另一个 COMSOL Desktop 窗口中打开它。在新打开的窗口中,我们可以运行任何可视化操作或后处理任务,这些任务通常需要在模型中运行。
单击外部进程窗口左上角的附加作业,就可以重新显示进程状态的实时更新。
我们可以使用 Notepad 等文本编辑器打开包含探针输出的 results.txt 文件。
我们也可以在求解过程中查看这个文件,从而在全部参数都完成收敛之前快速浏览结果。不仅批处理扫描可以这样做,对于常规的参数化扫描,当表格保存为文件后也可以在求解过程中查看。
如果扫描中每次计算速度都很快,并且不需要很大内存,如上文中的示例所示,批处理扫描所需的计算时间会比常规的参数化扫描的时间长。因为采用批处理扫描时,每个参数都会启动一个 COMSOL Multiphysics 进程。对于每一个计算要求都较高的参数扫描,这个额外启动进程的时间相对较短,可忽略不计。
假设我们调用的是用户定义的外部 C 语言函数,而不是内插表;同时假设我们在 C 代码中犯了一个编程错误,导致一个或几个参数在扫描时出现分段错误。这种情况下,我们仍然可以浏览 C:\COMSOL 目录(或者指定保存 .mph 文件的目录),打开其中的文件执行可视化及后处理,甚至进一步的计算工作。
在上文示例中,演示此类错误的一个简单方法是将其中的一个介电常数值设为零,然后启动批处理作业。介电常数为零意味着我们向求解器提供了一个定义模糊(甚至是异常)的方程(类似于 0=1),此时会显示一条错误消息,提示求解器找不到出错参数的对应解。同样地,仍可以打开保存的 .mph 文件并执行后处理。如果更正了表格,将介电常数改成非零,就可以重新运行批处理作业并且不会收到错误消息。请注意,如果错误一直存在,则对外部进程窗口附加作业时始终会提示错误。此时,仍会更新累积探针表中与其他参数对应的项。更正错误后继续运行扫描,对外部进程窗口附加作业后就可以再次访问该窗口了。
如果你有一台多核计算机,这是现代电脑的常见配置,就可以更改批处理的相关设置,控制批处理扫描中可运行的并发进程数,以及每个进程可用的内核数。假设使用的是六核机器,那么可以将 并发作业数 改为三,将 内核数 改为二。这样设置后,就可以并行求解三个参数,每个求解器进程可使用两个内核,所以对于上文示例,仿真时间减少了一半。
如果所运行的仿真中每个参数的计算量都很少,可以增加并发作业的数量,使其与计算机的内核数相同。对于计算量较大的问题,应该保持并发作业数为一,以充分利用求解器的多核处理能力。
请注意,也可以在批处理扫描节点研究扩展一栏下控制并发作业数。这种情况下,软件会用实际内核数除以并发作业数,自动计算出内核数。(如果要执行自动计算,请不要勾选批处理设置下的内核数复选框,就不会使用以灰色显示的数字 1。)
借助 App 开发器,我们可以在用于构建 App 的模型中使用批处理扫描节点。此时,App 充当批处理扫描的“驱动”,并且我们无法在外部进程窗口中看到相关信息,也无法在该窗口中看到保存的 .mph 文件,就像此 App 根本没有用户界面一样。运行结束后,我们可以打开这些文件进行常规的模型后处理工作。如果需要更灵活地创建可使用批处理扫描的 App,可以使用一个内置的方法来包含批处理扫描,详细请参考 Programming Reference Manual。(注意,在这里使用录制代码工具的作用很有限,因为在生成录制的代码时会与实时运行的批处理命令冲突。)
COMSOL Multiphysics 的所有许可证类型都可以使用批处理扫描功能。如果你有网络浮动许可证,还可以使用集群扫描这一附加功能。这两个扫描功能很相似,不过集群扫描选项多了远程计算和集群配置等设置。集群扫描功能可以将大量扫描分散到一个(很可能是大型的)集群上。这种做法可以显著提高效率,因为独立扫描(也称作易并行计算)所涵盖的范围通常很广。如果你已经熟练掌握了批处理扫描,那么运行集群扫描也不是什么难事。
了解更多关于批处理扫描和集群扫描的文章:
本文内容来自 COMSOL 博客,点击底部“阅读原文”,可查看更多延伸文章。如果您有相关问题,或者文中介绍的内容没有涉及您所关注的问题,欢迎留言讨论。