在使用 COMSOL Multiphysics® 这类仿真软件时,长期存在一项难题:如何高效导入并转换来自其他来源的数据。初次接手这类工作时,你或许会手动完成数据转换。但这类工作的数据量往往会不断增加,甚至你可能需要反复处理同一类数据。在本篇博文中,我们将介绍如何将人工智能(AI)工具与 COMSOL® 软件结合使用,帮助你将这些数据转换方法转化为一套可重复调用的工作流。
理解数据传输的痛点
我们经常会遇到这样的问题:如何将不同格式的数据导入 COMSOL® 中?这类数据通常存储在文本文件中,且文件格式可能并不常见,没有现成的转换工具可用。我们的客户通常十分熟悉这类文件格式,而我们则精通如何在 COMSOL® 中调用这类数据。在这种场情况下,AI工具就能大显身手了——AI能够大幅降低搭建数据转换工作流所需的工作量。接下来,我们结合一个具体的应用场景展开详细说明。
一个具体的应用示例
假设现在有一个文本文件,内容为一个集总热模型的相关说明。集总模型与你在 COMSOL Multiphysics® 中熟悉的有限元模型有所不同。集总模型使用代表材料体积的节点,每个体积的密度和比热容均为已知参数,因此每个节点都对应着一个热质量。节点的温度会因施加热载荷而升高,节点之间可以通过传导 或 辐射 进行热量交换,其计算依据是两个节点之间的温差。此外,我们还可以设定恒温节点,这类节点被称为热沉。为了让这个概念更具体,我们来构建一个非常简单的太空卫星的集总模型。
我们将要处理的卫星模型如下图所示。它是一个箱体结构,两侧各伸出一块太阳能电池板。箱体的六个面和两块太阳能电池板各自用一个热节点来表示。箱体的相邻面之间存在传导热通量,箱体侧面与太阳能电池板之间存在辐射热通量。同时,所有的面都会向太空产生辐射热通量。该模型的目标是从一个初始温度出发,计算温度随时间的变化。本次分析将假设太阳和行星的热载荷忽略不计(例如地球同步卫星进入阴影期时),仅考虑单个节点上加热器产生的热载荷。
一张卫星八节点集总热模型的原理图。图中展示了箱体各节点之间的热传导,以及所有节点向深空产生的热辐射。
这类集总模型非常常见,而且业界用来表示它们的文件格式也五花八门。为了让我们的示例不受文件格式的限制,我们将生成一个逻辑思路与各类格式相近(语法细节可能不完全一致)的文件。正如我们接下来会看到的,具体的语法其实并不是重点。下文展示了该示例文件中的一段节选内容:
TSINK, 99, 2.7 # Thermal Sink 99
NODE, 10, 300, 12150 # Node 10
…
NODE, 80, 300, 3220 # Node 80
LOAD, 60, 750 # Load on node 60
CON, 1020, 10, 20, 0.71 # Conductor 10 - 20
…
CON, 5020, 50, 20, 0.71 # Conductor 50 - 20
RAD, 2070, 20, 70, 8.9e-9 # Radiation 20 - 70
…
RAD, 8099, 80, 99, 1.8e-7 # Radiation 80 - 99
这个文件中包含五种类型的数据:TSINK, NODE, LOAD, CON, 和 RAD.。它们分别代表热沉、带质量的热节点、特定节点上的热载荷、节点之间的热传导,以及节点之间或节点与热沉之间的热辐射。符号 # 后面的内容属于注释。如果你熟悉同类文件格式,从计算机科学的角度来说,可以把上述格式看作是一种全新的“语法方言(dialect)”。
再借用几个计算机科学的术语,这个文件中的信息实际上描述了一个“连通图(connected graph)”,其中描述传导和辐射的记录就是 节点 之间的 边。这非常有用,因为 AI 工具非常擅长处理这类数据结构。我们先记住这一点,接下来,我们把注意力转向如何将这些数据导入到 COMSOL® 中。
COMSOL 中的等效实现
尽管 COMSOL Multiphysics® 软件的附加产品——传热模块中确实内置了 集总热系统 物理场接口,但对于规模较大的模型,我们需要一种计算成本更低的方法。要表达上述数据,最简便的等效方法是使用 全局方程 接口。由于待导入数据对应的是一个三维结构,而输入文件并未提供关于几何形状和尺寸的足够信息,因此采用抽象格式来搭建模型。
全局方程 接口可将连通图的图形网络转化为一个耦合的常微分方程组,方程形式如下:
这些方程可以在用户界面中进行设置,具体如下图所示。此外,我们还可以通过 保存到文件 和 从文件加载 按钮,将这一整套全局方程导出或导入。
截图展示了如何设置一组常微分方程。请注意图中的 保存 和 加载 按钮。
我们这里想要复现的模型包含9组节点与热沉的数据条目,这些内容由手动整理输入。尽管流程略显繁复,但鉴于其仅需一次性操作,投入相应的时间成本仍是值得的。需要注意的是,原始文件是基于预设的单位编写的,因此所有的方程都进行了无量纲化处理。在将这些内容输入到软件界面,模型导出保存为了一个文本文件。截取的其中几行内容如下所示:
NODE10 12150*d(NODE10,t)[s]-((0.71*(NODE20-NODE10)+0.71*(NODE30-NODE10)+0.71*(NODE40-NODE10)+0.71*(NODE50-NODE10))+(4.5e-8*(TSINK99^4-NODE10^4))) 300 0 "Node 10"
...
NODE60 12150*d(NODE60,t)[s]-((750)+(0.71*(NODE20-NODE60)+0.71*(NODE30-NODE60)+0.71*(NODE40-NODE60)+0.71*(NODE50-NODE60))+(4.5e-8*(TSINK99^4-NODE60^4))) 300 0 "Node 60"
...
TSINK99 TSINK99-2.7 2.7 0 "Thermal Sink 99"
借助 AI 打造数据转换器
至此,我们对这两个文件应该已经有了充分的了解。同时我们也清楚,如果一个文件里包含成百上千甚至更多的条目,就必须引入一定程度的自动化处理方法。但有一点可能不太容易察觉:我们实际上是在将图数据从“边列表(edge-list)”表示形式,转换为可利用数据稀疏特性的“关联列表(incidence-list)”表示形式。了解计算机科学的读者会明白,要手动编写这种转换算法绝非易事。
幸运的是,这类工作正是 AI 能够帮助我们实现自动化的。需要澄清的是,我们并不是让 AI 直接去执行数据转换,而是让 AI 为我们编写一个通用的转换工具。那么,我们具体需要提出什么要求?又该如何向 AI 下达指令为我们写出这个转换程序呢?
其实,这两个文本文件中已经包含了我们所需的几乎所有数据。我们要做的,仅仅是将它们上传到选定的 AI 工具中,并输入类似下面这样的提示词:
Here is a file that contains nodes and sinks, representing nodes on a graph network. The connections between the nodes are defined by CON and RAD lines. Everything after a # is a comment. I need to convert the first file into the format of the second file. Please write out the transformation rules between them.
本示例中使用的是 ChatGPT。大约一分钟后,它就给出了一份完整且通俗易懂的转换步骤说明。最让我印象深刻的是,这款 AI 工具不仅识别出该文件描述的是一个热学问题,还准确判断出了其中非线性辐射项的物理性质。
在仔细审阅了这份输出后,我确信这款工具已经完全理解了任务需求。要知道,输入文件使用的是一种描述集总热模型的、独特且未公开说明的“方言”。我只需要再做一步:要求 AI 生成一段我可以独立运行的代码。为此,我又输入了这样一条提示词:
Please write a monolithic piece of Java code that I can use in COMSOL's Method Editor to convert any file of the original type into this format.
我之所以要求生成 Java 代码,是因为我想完全在 COMSOL Multiphysics® 中运行这段程序。正如 ChatGPT 能毫不费力地理解输入文件中独特的“方言”一样,它在使用我指定的编程语言编写代码时也同样游刃有余。
最终生成的代码长达数百行,这里就不进行展示了。不过,我大致审阅了一下,发现 ChatGPT 为了提高可读性添加了注释,甚至还加入了错误检查机制——如果输入了无效文件,程序会给出明确的报错信息。这段代码编译和运行都非常顺利,我还通过生成结果进行了初步校验。
通常来说,对转换代码进行核验和确认是非常重要的,具体的方法取决于数据的呈现形式。有时,仅对少量样本进行直观的抽样检查便足够;但在另一些场景下,则可能需要采取更严谨的校验方式。其中一种有效的方法是额外编写一个“逆向转换器(back-converter)”,本质上就是对数据做双向转换,并验证转换后的数据是否仍与原始数据一致。同样,我们也可以借助 AI 来完成这一步。
到这一步,有些读者可能会问:为什么不干脆把这个转换器直接集成到 COMSOL 产品中呢?我需要着重说明,本文介绍的示例仅仅是一个采用独特“方言”编写的简易热网络文件。而在实际应用中,集总热模型文件可能会包含更多种类的数据记录,需要由多个文件组合而成,甚至还会包含用于实现特定恒温控制算法的自定义代码。如果要开发一款通用的转换程序,需要处理大量极端边界情况,而这些情况几乎不会同时出现在同一个文件内。除此之外,简单的一对一格式转换往往不是最佳选择。有时候我们需要退一步,先去梳理和深入理解原始文件创建者的具体建模意图。对于这类热网络模型来说尤其如此,不过这就是另一个话题了。
关于文件转换与 AI 应用的几点思考
这里,我们有必要再次强调,完成整套流程其实并没有耗费太多精力。我们本身已经有了示例输入文件。虽然确实花费了一些时间研究如何在 COMSOL® 中合理搭建模型、生成标准语法,但和 AI 工具的交互过程十分简单:只需上传两个文件、输入两条提示词,生成的代码就能直接适用于所有同格式文件。全程与 AI 工具的总交互时长不过短短几分钟。
如果你也需要处理此类结构化数据或文件的转换,可以很快掌握这套工作流程。如果需要加入更多功能怎么办?只需在示例输入和输出中再补充几行内容,然后重新向 AI 工具发送提示词即可。那如果你想把其他数据自动导入 COMSOL 呢?比如,公司可能有一个自定义格式的大型专有材料数据库需要导入。你完全可以利用这套流程来编写转换程序。请记住,你无需向 AI 工具上传专有的原始数据,只需提供数据格式即可。最终你将得到一套完整的转换算法和源代码。
从更宏观的角度来看,正如我们在之前的 COMSOL 博客中讨论过的那样,AI 工具正在持续快速迭代。对于 COMSOL 用户需要解决的各类问题,这些能力正变得日益实用。
最后,我想向大家展示一次最终提示词的运行结果。在这条提示词中,我要求 AI 画出它对该文件所代表的硬件设备的理解。结果如下所示。虽然目前的呈现效果还不算完美,但我几个月后一定会再来回顾,看看它又有了怎样的进步。
下一步
你会如何利用这套工作流程来辅助你的 COMSOL 建模和仿真工作?欢迎在下方留言分享,或与我们联系!

评论 (0)