许多资深用户可能已经十分熟悉,在使用 COMSOL® 开发多物理场仿真模型和仿真 App 时,可以通过编写代码自动运行模拟过程、为仿真 App 添加功能,以及与外部工具进行集成。在COMSOL Multiphysics® 6.3 版本中,新增的 Chatbot 窗口为用户提供了全新的人机交互功能,可以连接到 OpenAI™ 公司的大语言模型——GPT 模型,帮助用户生成或调试运行 COMSOL® 所需要的代码。这项新功能可以帮助用户通过 AI 工具大幅简化建模和分析过程中的工作。例如,将重复性的任务自动生成循环代码(如 for 循环),或者检测模型方法中的逻辑错误,等等。此外,用户还可以在 Chatbot 窗口中与 AI 进行对话,咨询通用仿真建议。
在这篇博客文章中,我们将通过几个简单直观的示例来展示如何使用这一新功能为建模过程提供助力。
使用 COMSOL Multiphysics® 软件 Chatbot 窗口中的人机对话功能非常简单,用户无需外部 AI 工具就可以在软件内获取与建模和仿真相关的内容,还可以通过附加方法来检查信息是否存在错误,或运行 AI 模型建议的 API 代码,并在模型开发器和 图形 窗口中查看运行结果。
COMSOL 6.3 版本还新增了一个 Java Shell 窗口功能,用于交互式运行 Java 代码,用户可以在 Java Shell 窗口中运行由 Chatbot 连接的 AI 工具生成的代码。在接下来的示例中,我们将向您演示如何操作。
如果您想进一步了解如何使用 COMSOL API 和 Java Shell 窗口,请查看 COMSOL 官网【学习中心】栏目中的 COMSOL API 概述一文,文中 “在 Java Shell 窗口中运行代码” 部分对此项功能有较为详细的介绍。
Chatbot 窗口适用于 COMSOL Multiphysics® 的 Windows® 版本,包含在 COMSOL 平台产品中,但默认情况通常没有安装。(有关如何安装和设置 Chatbot 窗口的说明,请参阅这篇学习中心文章。)
请注意:
创建几何结构
在使用 COMSOL API 时,掌握一些 Java 的基础知识可能会有所帮助。但是,在使用 Chatbot 窗口时,这些知识并不是必需的,因为其中已经包含帮助处理 Java 语法和代码结构的功能。
首先,让我们来看下 Chatbot 窗口如何帮助创建一个圆柱体几何。点击 空模型 按钮,这样就可以使用 API 接口从头开始创建模型的各个方面。
接下来,打开 Chatbot 窗口:在 主屏幕 选项卡上,转到 窗口 菜单并选择 Chatbot。
在 Chatbot 窗口中,有三个聊天主题选项:常规、 编程 和 建模。本例中选择了 编程。
接下来,输入提示语 Create a geometry of a cylinder。
这个提示语将生成创建任意半径和高度的圆柱体的代码,但不会运行代码。如果要运行此段代码,用户需要将它发送到 Java Shell 窗口。
右键单击代码块,选择 发送到 Java Shell。
单击 Java Shell 窗口底部的 运行 按钮,将生成圆柱体。
// Create a 3D geometry
model.geom().create("geom", 3);
// Add a cylinder to the geometry
model.geom("geom").feature().create("cyl", "Cylinder");
// Set cylinder properties: radius and height
model.geom("geom").feature("cyl").set("r", 1); // radius
model.geom("geom").feature("cyl").set("h", 5); // height
// Build the geometry
model.geom("geom").run();
不过,请注意,由于 Chatbot 窗口的回应具有一定的随机性,因此每次生成的代码可能会略有不同。
生成标注
虽然与 Chatbot 功能交互的 AI 模型并不一定全面了解 COMSOL API, 但是通过使用 App 开发器中的 录制代码 或 录制方法 功能,可以引导它生成有用的代码建议。在接下来的示例中,我们将演示如何为模型添加标注,然后在此基础上向 Chatbot 窗口寻求帮助。如果您准备和我们一起开始学习,请从软件案例库中的 COMSOL Multiphysics >电磁 目录下打开“起搏器电极”的教程模型。
接下来,使用软件内置的代码录制功能学习如何添加标注。在功能区中,转到 开发工具 选项卡,然后单击 录制方法 开始录制。
系统会提示您将录制一个名为 method1 的方法,这对于本文示例来说没有问题(当然,您也可以根据需要重命名此方法)。现在,模型开发器将以红色轮廓显示,表明录制正在进行中。
在模型树中,右键单击 三维绘图组 3 并选择 标注。
在 标注 节点的 设置 窗口,在 文本 框中输入 eval(V) ,这将计算并显示电势场的局部值。然后,在 位置 设置中,分别在 x 坐标、y 坐标和 z 坐标输入 0.001, 0.002, 0.003 。
接下来,单击 App 开发器按钮,然后双击树中的 method1 节点,在方法编辑器中将显示已录制的代码。
在使用 Chatbot 窗口自动创建 标注 节点之前,您需要删除刚刚生成的 标注 节点,以避免冲突。在模型树中,右键单击 标注 节点并选择 删除 。
接下来,在 Chatbot 窗口中选择 编程 主题选项,然后输入以下指令,并粘贴从方法编辑器中复制的代码:
This is how you create an annotation in COMSOL Multiphysics:
model.result(“pg3”).create(“ann1”, “Annotation”);
model.result(“pg3”).feature(“ann1”).set(“posxexpr”, 0.001);
model.result(“pg3”).feature(“ann1”).set(“posyexpr”, 0.002);
model.result(“pg3”).feature(“ann1”).set(“poszexpr”, 0.003);
model.result(“pg3”).feature(“ann1”).set(“text”, “eval(V)”);
Can you create a for loop that places these annotations at 10 locations along a line from (x,y,z)=(0,0,-0.02) to (x,y,z)=(0,0,0).
按回车键或点击 提交 按钮。
右键单击已生成代码的区域,然后选择 发送到 Java Shell 。
现在,让我们试试更高级的方法。首先删除所有生成的 标注 节点,即按住 Shift 键选择多个节点,然后右键单击并从上下文菜单中选择 删除。
Instead, create annotations in a helix pattern centered along the same line with helix radius 0.0025.
接下来,重复之前的步骤。右键单击生成的代码,将其发送到 Java Shell 窗口,然后单击 运行 ,以绘制标注。
接下来,我们来增加标注内容的密度。首先,删除已创建的 10 个 标注 节点。然后,在 Chatbot 窗口中使用以下提示语:
Now, make the frequency twice as high and create 20 annotations.
再次右键单击生成的代码并将其发送到 Java Shell 窗口,将显示如下内容。
通过上述示例,您已经深入了解了如何在 COMSOL 中使用 Chatbot 功能快速解决复杂的自动化任务。通过结合使用 录制方法(或 录制代码)和 Chatbot 窗口提示语,您可以引导 Chatbot 做出响应,从而快速增加代码的复杂性。对于需要重复使用相同代码的情况,可以在方法编辑器中的方法中输入代码,而无需使用 Java Shell 窗口。另外请注意,我们也可以记录删除 标注 节点的操作过程,并将这部分流程自动化。
调试代码
Chatbot 功能的另一个用途是查找代码中的细微错误,而不仅仅是简单的语法错误。为了说明这一点,我们以案例库中 COMSOL Multiphysics > App 下的“音叉” 模型为例(此案例不需要任何附加产品)。
转到 App 开发器,在 方法 分支中双击 setMaterial 。
要查找语法错误,可以单击 方法 选项卡上的 检查语法 按钮。该功能不使用 Chatbot 窗口,而是编译器级别的检查;通过内置的 Java 编译器,方法编辑器会在离开窗口或保存 App 或模型时自动编译方法。
要查找代码中与语法无关的错误,Chatbot 窗口可以提供帮助。
让我们在代码中引入一个错误来演示如何使用这一功能。在方法 setMaterial 中,用 mat3 替换材料 mat4 的引用。现在,当用户选择标记为 mat4 的铁材料时,程序将改为使用标记为 mat3 的铜材料属性。
现在,该方法中的代码已附加到 Chatbot 窗口,并带有预定义提示语:I need help finding potential bugs in setMaterial, ignoring any code style issues(注意,发送至 Chatbot子菜单中的其他两个选项,即 关于 setMaterial 的对话 和 对 setMaterial 的改进建议,有不同的预定义提示语。)
按回车键或点击提交 按钮。
**Duplicate Material Selection for Copper and Iron:**
– Both “copper” and “iron” are setting the selection for `mat3`. This might be intentional, but if different materials are expected, this is a bug.
它还指出了其他两个潜在问题。不过,在这种情况下,这些都是误报,因为 Chatbot 窗口并没有获得关于该 App 的其他方法和功能的所有信息。
在这种情况下,即使没有 Chatbot 窗口的帮助,这个错误也相对容易被发现。但试想一下,如果该 App 支持的不只是 5 种材料, 而是 40 或 50 种材料,对于这种情况,当处理较长的代码块时,使用 Chatbot 窗口可以大大加快代码调试过程。
您还可以在 Chatbot 窗口中询问建模技巧。假设我们是静电仿真领域的新手,想知道对于此类模型而言,哪些边界条件更为重要。为此,可以在 Chatbot 窗口中选择 建模 主题选项,并输入提示语:
Which are some of the most important boundary conditions for electrostatics?
Chatbot 窗口给出了很好的答案。不过,请注意它提到了“混合边界条件”类型。虽然 COMSOL® 软件中提供了这种边界条件,但需要 AC/DC 模块,并且有一个不同的名称:分布电容。
一般来说,对于入门级建模问题,Chatbot 窗口可以提供一个有用的起点。但是,对于更高级的主题,建议您同时查阅 COMSOL 文档 (也可通过软件中的 帮助 窗口获取)以及相关主题的教科书。如果选择 常规 主题选项而不是 编程 或 建模,您可以提交任何主题的提示语,包括与 COMSOL Multiphysics® 无关的主题。
查找模型的设置错误
您还可以使用 Chatbot 窗口查找建模设置中的简单错误。虽然 Chatbot 功能并不了解建模和仿真的所有方面,但它仍然可以提供帮助。例如,它可以识别模型开发器中使用的表达式中的错别字。
要试用此功能,请从案例库中 COMSOL Multiphysics > 传热 下打开“硅晶片激光加热”教程模型。该模型演示了激光在硅晶片上移动的瞬态仿真,不需要任何附加产品。
现在,让我们人为地在一个变量定义中引入一个错别字。定义焦点距离的表达式正确的写法是:
sqrt((x-x_focus)^2+(y-y_focus)^2)
我们将把它改成下面这个错误的表达式,其中第二项错误地使用了x_focus 而不是 y_focus:
sqrt((x-x_focus)^2+(y-x_focus)^2)
然后,从 文件 菜单中选择 另存为,并选择 Java 模型文件(.java) 选项来保存文件。
这将创建一个扩展名为 .java 的文本文件,可以被编译成 Java .class 文件,用作独立的 Java 组件。这种方法无需使用 COMSOL Desktop® 用户界面即可运行 COMSOL Multiphysics® 。 Java 文件通过 API 代码包含整个模型设置。但在本例中,我们将仅使用该文件来识别模型设置中的潜在问题。(请注意,使用此功能与使用 COMSOL Compiler™ 编译 App 无关。)
在任意文本编辑器中打开 .java 文件,复制代码并粘贴到 Chatbot 窗口,使用类似以下的提示语:
Can you find any errors in this model:
事实上,Chatbot 窗口指出的第一个问题就是我们刚才引入的那个错别字。它指出 :
Here are a few potential issues in the provided code:
1. **Duplicate Variable Definition**: The variable `r_focus` is defined twice with different expressions. The first definition is correct:
“`java
model.component(“comp1”).variable(“var1”).set(“r_focus”, “sqrt((x-x_focus)^2+(y-y_focus)^2)”);
“`
The second definition at the end of the method seems incorrect:
“`java
model.component(“comp1”).variable(“var1”).set(“r_focus”, “sqrt((x-x_focus)^2+(y-x_focus)^2)”);
“`
Ensure you use the correct expression for `r_focus`.
这种调试对于发现模型设置中的小错误非常有用。对于更复杂的模型,在将模型保存为 .java 文件之前,您可能需要删除冗余并简化代码(即压缩历史记录),使文件只包含当前的模型设置(文件 > 压缩历史记录)。
在这篇博客中,我们使用“起搏器电极”教程模型重点介绍了 Chatbot 窗口功能。如果您想亲自探索创建起搏器电极示例的模型文件,请单击下面的按钮。
想了解有关 App 开发器和 COMSOL API 的更多信息吗?请查看相关学习文档:
Microsoft 和 Azure 是微软公司集团的商标。OpenAI 是 OpenAI 公司的商标。Oracle 和 Java 是 Oracle 和/或其关联公司的注册商标。
你知道吗?你可以在 COMSOL 中使用 研究 节点执行一系列程序化操作,包括求解模型、将模型保存到文件,以及生成和导出绘图组、结果和图像。这篇博客,我们将详细介绍这一实用功能。
编者注:本文最初发布于 2017 年 6 月 21 日。内容和图片现在已经更新。
为了演示此功能,我们将从案例库中加载微混合器教程模型。该模型位于 COMSOL Multiphysics > 流体动力学 文件夹中,演示了层流静态混合器中的流体流动和质量传输。
该模型首先使用 层流 接口模拟流体流动。然后,将流体流动模拟的结果作为输入,通过 稀物质传递 接口计算混合效率。物质将基于流体速度被输送到下游。
该模型的计算时间为几分钟。为了简化模型以更快地运行计算,我们将不求解物质传递。为此,我们将修改第二个研究步骤 (步骤 2:稳态 2)的设置,清除 设置 窗口中的 稀物质传递 和 反应流,稀物质 复选框。
为了加快模型运行速度,我们还可以做一个额外的更改。在 网格 节点设置中,将 序列类型 设置为 物理场控制的网格,将 单元大小 设置为 极粗。
现在,我们可以计算 研究 1,以确保一切正常。结果图显示了沿混合器几何形状的几个切面的速度大小。
准备好模型后,我们就可以使用作业序列来自动完成模型求解和保存的过程。
要在 研究 节点下定义操作序列,首先要单击模型开发器工具栏上的相应按钮(眼睛图标),打开 显示更多选项 对话框。然后,选择 求解器和作业配置 复选框。
启用此设置后,模型树中会出现一个隐藏的 作业配置 节点。在常规建模工作中,不需要担心这个节点。它主要存储与求解过程运行顺序有关的底层信息。通常,这种顺序由研究的顶层间接控制,无需启用 求解器和作业配置 选项。
右键单击 作业配置 并选择 序列 选项,添加 序列 子节点。
接下来,右键单击 序列 节点,查看 运行 选项下方的各种选项,这些选项可在运行序列时添加为顺序操作。
注:通过添加 序列 节点执行的所有操作也可以通过编写 Java API 代码和使用方法编辑器来实现。一般来说,在用户界面中执行的任何操作也可通过 COMSOL API 执行。
现在让我们创建一个简单的序列。右键单击 序列 节点,选择 解 选项。
一般来说,根据模型及其研究,不同的研究将定义多个求解器序列。在 解 节点设置的 常规 部分,运行 设置可指定要计算的求解器序列。默认情况下,全部 选项会为所有研究运行 求解器配置 下的所有求解器序列。通常,需要将 运行 设置为你打算运行的特定求解器序列。
在本例中,求解器序列 解1 (sol1) 包含 求解器配置 > 求解器 1 下所列的操作。同时,解数据结构 解存储 1 (sol2) 用作 稳态求解器 1 计算出的解的辅助存储,与解序列无关。因此,在这种情况下,我们将选择 解1 (sol1)。
求解器完成求解后,我们需要保存文件。为此,右键单击 序列 节点并选择 将 保存模型到文件。
在 将模型保存到文件 设置窗口中,可以看到一系列选项,用于保存一系列 MPH 文件,并在文件名末尾添加参数。这些选项对于 批量扫描等参数扫描非常有用。不过,在这种简单示例中,并不需要这样做,因此我们将为 将参数添加到文件名 设置中选择 无 选项。在此阶段,我们还需要为有写入权限的位置提供文件名。在本例中,文件名和文件路径为 C:\COMSOL\myfile.mph。
要运行这些操作,请选择 序列 节点并单击 运行。
我们使用的案例库模型微混合器已经定义了一个派生值。您可以在 结果 > 派生值 > 全局计算 中看到。该变量名为 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 现在在模型树中可见:
请注意,如果模型中已经有参数化扫描,则每次扫描都将是 内部扫描 或 外部扫描。上例中使用虚设参数的扫描是 外部扫描。研究 节点会自动检测使用哪种类型的扫描以获得最佳性能,但您也可以根据需要手动确定。要使用命令行作业序列,你的扫描必须是 “外部扫描”。
几乎所有类型的扫描都可以从内部扫描变为外部扫描,但反之则不行。内部扫描可以更快,因为它们会使用计算的一些底层结构来加快速度。然而,并非所有类型的扫描都可以是内部扫描。例如,对几何参数的扫描必须是外部扫描;同样,求解器会自动处理。要确保参数扫描是外部扫描,请将参数化扫描设置中的 使用参数求解器 更改为 关;然后执行 显示默认求解器 操作并继续。
求解模型后,作业序列可用于自动执行许多常见任务。在这篇博客中,我们演示了如何:
你还可以自己尝试其他使用工作序列的任务,包括:
希望作业序列能成为您日常建模工作中的一项有用功能!
Oracle 和 Java 是 Oracle 和 / 或其附属公司的注册商标。Microsoft 和 Windows 是微软公司在美国和/或其他国家的注册商标或商标。
在之前的博客中,我们探讨了如何在 研究 节点下设置一系列程序化操作,用于求解模型、将模型保存到文件,以及将数据导出到文件。这篇博客,我们将在此基础上,展示在 COMSOL Multiphysics® 软件中求解模型后,如何自动导出完整的图像序列。
编者注:本文最初发布于 2017 年 7 月 11 日,之后对部分内容和图片进行了更新。
为了演示这项功能,我们将延续前一篇博客在 COMSOL 中求解模型后,如何使用作业序列保存数据的方式,首先从案例库中加载微混合器教程模型。该模型位于 COMSOL Multiphysics > 流体动力学 文件夹中,它演示了层流静态混合器中的流体流动和质量传输。
该模型使用 层流 接口进行流体流动模拟。接下来的步骤中,模型演示了如何利用流体流动模拟的结果作为输入,通过 稀释物质传递 接口计算混合效率。组分将根据流体的流速被输送到下游。
此模型计算耗时约数分钟。在上一篇博客中,我们通过不求解 稀释物质传递 部分来加快计算速度。本文,我们需要计算整个混合器中的浓度分布。为了更快地运行计算,我们可以将 预定义单元大小 设为 极粗。
此网格粗化步骤为可选操作,后续流程不受此设置影响。
下文演示了如何使用参数化切面图和动画导出一系列的图像,其中每个图像对应一个切面。
下图是模型库中已求解的示例模型在 x 方向上 5 个不同的 yz 平面上默认绘制的速度切面图:
接下来,创建一个类似的浓度切面图。右键单击 速度 (spf) 节点并选择 复制。在新创建的绘图组中,将名称改为浓度,将 表达式 改为 c 表示浓度:
在 浓度切面 图中,您可以将 平面数据 输入方法更改为 坐标,而不是默认的 5 个均匀分布的切面。这样,就可以生成 0.5 mm 处的单个切面,如下所示。
结果如下图所示:
可以通过 结果参数 对切面的位置进行参数化。右键单击 结果 节点,然后选择 参数。
定义一个参数 xcut 值为 -3.5[mm](微通道在 x 方向 -3.5 mm 至 8 mm 范围内变化)。
对于 浓度切面 图,在平面数据 部分,在 x 坐标的编辑框中输入 xcut。
上述设置对应的切面图显示如下:
如果要导出不同切片位置的图像序列,该怎么操作?您可以使用基于文件导出的动画来实现。
如下图所示,可以从功能区工具栏的 动画 菜单中选择 文件 生成动画。
或者,您也可以右键单击 结果 下的 导出 节点,然后选择 动画 > 文件。
在模型树中 动画 节点的 设置 窗口中,将 主题 更改为 浓度。然后选择 图像序列 作为 输出类型。
假设您的系统中有一个 C:\COMSOL 文件夹,可以这样输入 文件名,如 C:\COMSOL\my_image.png,你也可以输入任何有写入权限的文件夹。
要将导出文件链接到参数 xcut ,请将 序列 类型更改为 结果参数,这可以在 动画编辑 部分设置。
选择 xcut 作为 参数, 起始值 设置为 -3.5, 停止值 设置为 8, 单位 设置为 mm。
在 动画 设置窗口顶部,单击 导出 开始生成图像。图像的后缀将与序列中的编号相对应。帧数或图像数在 帧 部分设置。
这样就会生成一系列图像,名称分别为:my_image01.png、my_image02.png、……、my_image25.png,如下图所示。
现在,我们来看看在 COMSOL Multiphysics 中求解模型后,如何自动生成图像。
要在 研究 节点下定义操作序列,请启用 求解器和作业配置。此选项可在模型开发器工具栏上的 显示更多选项 对话框中找到。单击眼睛图标即可打开对话框。
在出现的 作业配置 节点下,选择 序列。我们在上一篇博客中对此步骤进行过描述。
右键单击 序列 并选择解。在 解 设置窗口中,如果尚未选择,请选择 全部,确保运行所有研究步骤。
右键单击 序列,然后选择 结果 > 导出到文件。
在 导出到文件 设置窗口,选择 运行 选项下的 动画 1。在这个简单的示例中,导出 选项下仅有一个节点,因此,我们也可以保留默认的 全部 选项。
要使用 序列 求解,请右键单击并选择 运行。或者,点击 序列 设置窗口顶部的 运行 按钮,再次运行整个模型,并在求解后导出图像文件。
上文我们使用导出操作生成了一系列三维图像。如果要为每个切面生成一系列二维图像,该怎么操作?这可以通过使用参数化的 截面来实现。
右键单击 数据集 节点,选择 截面。
在 截面 设置窗口中,输入 xcut 作为 x 坐标。
已经存在的三维绘图组不能生成二维绘图,因此右键单击 结果 并选择 二维绘图组。
在 二维绘图组 设置窗口中,选择 截面1 作为 数据集。
在 二维绘图组 下添加一个 表面 绘图节点,并将 表达式更改为 c,对应于浓度。
要整理绘图组列表,请将 二维绘图组 的名称改为 截面浓度。
现在,转到模型树中的动画节点。在相应的 设置 窗口中,将 主题 更改为 截面浓度。
单击 导出 生成二维图像序列,如下图中的文件浏览器视图所示:
要使用 Windows® Explorer 获得此视图,请将视图更改为大图标。
与之前的示例一样,现在我们可以继续运行 作业序列 求解,就可以自动生成图像集并保存到文件中。
想亲自尝试本文中演示的示例模型吗?请单击下面的按钮访问 MPH 文件。
Microsoft 和 Windows 是微软公司在美国和/或其他国家的注册商标或商标。
你有没有过通宵运行大量参数化扫描,第二天早上发现仍未完成求解的经历?在等待最后几个参数收敛的时候,你可能希望先查看已经计算出的参数解。批处理扫描 功能是解决上述问题的有效方法,计算好的参数化解会自动保存为文件,便于打开进行可视化及结果评估。
编者注: 这篇博客最初发表于 2016 年 2 月 2 日,为呈现软件的新特征和新功能,对其进行了更新。
在上一篇博客中,我们探讨了批处理扫描中任务并行的附加值。这篇文章,我们将讨论批处理扫描的另一个重要功能:在求解过程中检索参数化扫描的解。使用批处理扫描可以随时检索部分解,即使在求解器无法求解某些参数时,也可以这样做。当所研究的问题中每个参数的解都独立于其他所有参数的解时,就适合采用批处理扫描。
在求解器扫描过程中,希望查看部分解的情况很多,例如:
如果你在以上任何一种情况中运行批处理扫描,每个参数都能在一个单独的进程中求解,这个进程可以独立开始和停止。求解完成的参数值都被存储为一个.mph 文件,你可以在求解过程中打开任何数量的文件进行查看。在下面的示例中,你将了解如何将探针结果保存到文本文件中。
为了演示批处理扫描,我们使用 COMSOL Multiphysics® 案例库中的 电传感器示例模型来展示批处理扫描的操作。此模型展示了如何通过在盒的边界施加电位差,获得盒内的图像信息。模型计算的表面电荷结果取决于盒内物体的介电常数,该结果也可用于判断例如盒内是否存在物体,甚至可以帮助确定物体的形状。电阻抗断层成像案例中也采用了类似的技术进行医疗诊断,但使用的是交流电。
原示例模型中将物体厚度拉伸为 0.8 米。本文示例中,物体厚度被拉伸为 0.5 米。
假设有一组包含十个样本物体,这些样本形状相同但由具有不同介电常数的材料制成。我们要探究的是检测物体及其形状的能力,不管物体由什么材料制成。十个样本的介电常数值已存储在内插表 int1 中。实际上我们不会使用这个表格进行任何插入操作,而是把它作为一种存储和调用表格值的简便方法。(在这里,我们可以将内插方法从默认的 线性内插 改为 最相邻内插,但在本示例中结果不变。)

介电常数的表格。
现在用全局参数 sn(样本编号的英文缩写)对这个样本集添加索引。

作为全局参数的样本编号参数 sn 。
此模型在材料节点下定义了三种材料。材料3表示盒内的星形物体,材料 2表示其他物体。材料 1对应盒内物体周围的空气。我们通过适当调用材料3材料属性中定义的内插表 int1,来改变星形物体的介电常数,使用的语法为 int1(sn)。请注意,这里无需考虑单位,因为介电常数是无量纲。
为了监测星形物体上方的表面电荷,我们在盒子上表面的 x = 1.5,y = 1.5,z = 1.0 位置处定义了一个边界点探针。为了快速定义此位置,我们可以单击物体上表面的一个大致位置,然后在 设置 窗口中手动调整坐标值。
至于点探针表达式,我们选择用变量名 es.nD 和单位 nC/m^2 来表示表面电荷的大小(模值)。

单位为 nC/m^2 的表面电荷的 点探针表达式
稍后,我们会将此探针的输出写入文本文件。为此,单击 更新结果。此操作会生成 派生值 和 表格项。

探针的 更新结果 按钮
默认情况下,软件不会显示批处理扫描选项。可以在模型开发器的工具栏选择 显示更多选项 来启用该选项。在 显示更多选项 对话框选择 研究>批处理和集群。
如果右键单击 研究 节点,可以在列表中选择 批处理扫描 (单次运行,选择 批处理,而不是 批处理扫描)。

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

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

控制批处理扫描的设置。
默认文件名为 batchmodel.mph,用于自动创建一个 MPH 文件序列,其中的每个文件对应于扫描中的每个参数。可以更改文件名,不过此处演示的示例仍保留此文件名,生成的 MPH 文件名将分别为 batchmodel_sn_1.mph,batchmodel_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 充当批处理扫描的“驱动”,且无法在 外部进程窗口中看到相关信息。也无法在该窗口中看到保存的 .mph 文件,就像此 App 根本没有用户界面。运行结束后,我们可以打开这些文件进行传统的模型后处理工作。如果需要更灵活地创建可使用 批处理扫描 的App,可以使用一个内置的方法来包含 批处理扫描 ,详细请参考 Programming Reference Manual。(注意,在这里使用“录制代码”工具的作用很有限,因为在生成录制的代码时会与实时运行的批处理命令冲突。)
COMSOL Multiphysics 的所有许可证类型都可以使用 批处理扫描 功能。如果你有网络浮动许可证,则还可以使用 集群扫描 这一附加功能。这两个扫描功能很相似,不过 集群扫描 选项多了远程计算和集群配置等设置。集群扫描功能可以将大量扫描分散到一个(很可能是大型的)集群上。这种做法可以显著提高效率,因为独立扫描(也称作易并行计算)所涵盖的范围通常很广。如果你已熟练掌握了批处理扫描,那么运行集群扫描也不是什么难事。
想亲自动手尝试模拟这篇博客中讨论的模型吗?欢迎进入 COMSOL 案例库,下载示例模型:
阅读 COMSOL 博客,了解更多关于批处理扫描和集群扫描的文章:
在实际仿真过程中,并不是所有分析都是以 CAD 模型开始的。有时,我们唯一可用的数据仅是一系列点数据,也称为点云数据。在这篇博客中,我们将演示如何将点云数据转换为可在 COMSOL Multiphysics® 软件中进行仿真分析的几何模型。
点云是指在 x,y 和 z 坐标上绘制的一系列三维点数据。这些点通常来自使用激光扫描仪、测量工具或雷达成像等技术对物体表面进行扫描所获得的信息。
下面的屏幕截图显示了一个文本文件中的部分点云数据,其中的 x,y 和 z 坐标以制表符分隔列的形式排列。

含点云数据的文本文件屏幕截图。
这是 COMSOL Multiphysics 可以导入的最简单的坐标格式类型之一。在软件中,它被称为 电子表格 格式。在这种格式下,可以使用可选的%(百分比)字符来代表注释行。可以用空格、逗号、分号或制表符分隔值和索引。当这类数据被导入后,软件将根据文件中的行号为其指定坐标的索引。由于没有关于这些点之间的信息(也称为连通性),因此这种点集经常存在歧义。我们用一个简单的二维示例来说明可能发生的歧义类型。以下图中的二维曲线为例,从图中可以明显看出,点 5、18 和 7 是曲线上的连续点。

然而,在下图中,由导入的点云数据表示的对应曲线并不是那么明显。也许点 5、6 和 4 是曲线上的连续点?

点云数据可能具有内在的歧义。点 5、6 和 4 是不是曲线上连续的点?在这个示例中,它们没有连接,这可以从原始曲线看出,但不能从其相对稀疏的点云数据中看出。
如果一个导入的三维坐标列表带有相关的三角形表面连通性数据,例如 STL,PLY 或 3MF 文件格式,就可以解决这种歧义。比如,一个由两点之间的连通性定义的,并且仅定义了表面的三角形列表。如下所示,三角形表面数据文件
15 17 23
表示将索引为 15、17 和 23 的点作为三角形的顶点相连。
另一方面,如果只有点云数据而没有连通性信息,我们就需要做出其他假设来解决这种歧义。一种可能的假设是:表面数据以 的形式表示,也称为函数面。如果数据不在该表单
上,可以尝试将其分成几部分,使每一部分在表单
上。这里要注意的是,在表单
或者
上的数据在重新排列后同样有用。
将点坐标数据可视化的一种简单方法是将其作为表格导入到 多边形 几何对象中,然后使用 转换为点 操作,如下图所示。
点云数据的可视化图,从两个不同的视角看到的几何点对象。
基于这个视图,可以假设点云数据定义了以 形式表示的函数面。为了方便以后使用,我们需要知道点云的范围。获取此信息的一种简单方法是右键单击几何 节点,然后选择 测量 。

测量设置窗口给出了有关点云范围的信息。
由点云范围显示的信息可以看到,有 958 个点在 x 和 y 方向上都从 0.5 延伸到 9.5m,在 z 方向上从 -0.2 延伸到 +1.5m。本示例中使用的单位是米(m)。
现在,我们可以尝试使用 转换为曲面 操作将这组点数据转换为曲面。但是,这个操作不起作用。因为我们没有这些点的连接信息,所以系统将提示一条错误消息。我们需要以某种方式构建连接性数据。另外,还需要假设数据在表单 上。解决方案是将点云作为一个非结构化插值曲面导入。
接下来,我们在 全局定义 节点下添加一个 插值 函数,并将 数据源 设置为 文件。浏览点云文本文件,在本示例中为 C:\ COMSOL \ point_cloud.txt,如下图所示。您可以点击文章末尾的链接下载此文件。

由点云定义的 插值 函数。
该 插值 功能将自动猜测该数据在表单 上,文件的前两列分别代表 x 和 y 坐标,第三列代表函数值,即函数曲面的 z 坐标。我们可以从参数量中看到这一点,它被自动设置为2,分别对应于 x 和 y 坐标。函数名称 被自动设置为 int1(可以更改以及 文件中的位置 被设置为 1 表示int1(x,y)的函数值,代表 z 坐标的将由输入参数列之后的第一列给出。换句话说,列数 2+1=3。在这个示例中,文件只有三列,因此 1 是唯一选择。如果数据采用其他形式,则可以在导入之前使用文本编辑器或电子表格软件(例如 Excel®)重新排列数据。
然后,单击 插值设置窗口顶部的 绘图 或 创建绘图 按钮将插值函数可视化。绘图 选项将创建一个临时的可视化结果,创建绘图 选项将创建一个二维 网格 数据集,并在 结果 下的 二维绘图组 节点创建相关的 函数 绘图。
在 结果 及其相关的 设置窗口下以 函数 绘图的形式显示的插值函数。
那么,软件是如何仅基于假设 来创建表面的几何表示呢?首先,插值函数在后台创建 x 和 y 坐标的二维三角形网格,然后将函数值关联到每个点,最后在两个函数值之间进行线性插值。我们可以将这个过程看作在点云上放置一个渔网。请注意,这个三角形网格对用户不可见。在 插值和外推 部分的 插值设置 窗口中,可以看到设置 插值选项,它默认设置为 线性。另一个选项是 最近邻插值,它将创建一个分段常数函数插值,在这个示例中没有用。
这部分的另外一个设置是 外推。这个功能用于猜测函数定义范围之外的值,定义范围由 x 和 y 坐标确定。在这个示例中,点云分布在 xy平面的一个圆内。当将数据可视化为 函数 图时,xy 数据取自一个矩形 二维栅格 数据集,并且插值函数将以辐射模式分配常数函数值,用于填充圆和矩形之间的空间,以限制点云数据。如下图所示,我们可以从点云数据中识别出圆形迹线。

内插函数的俯视图,在定义原始点云迹线的圆形区域之外可以看到外推部分。
软件又是如何将这个插值函数转换为可以进行网格划分和仿真分析的几何表示呢?这是通过使用 参数化曲面 几何对象完成的,我们将在后面进行介绍。
要创建一个基于上述插值函数的 几何表面,请根据下图在 几何 下添加 参数化曲面 特征。

基于点云插值函数的表面的 参数化曲面 设置。
在这个 设置 窗口中,s1 和 s2 分别被解释为 x 和 y 坐标,int1(s1,s2)解释为 z 坐标。现在,我们需要使用之前通过 测量 工具获得的信息。我们将 s1 和 s2 的最小值和最大值设置为比点云数据的测量范围宽一点,以确保不会遗漏任何细节。
在这个示例中,参数化曲面 将在两个方向上被定义在 0 到 10 之间,以与测得的 0.5 到 9.5 之间的点云数据进行比较。
在内部,COMSOL 软件用 B 样条表面表示参数化曲面,该 B 样条曲线表面近似于计算以 x,y 和 z 表达式 定义的数学表面。 B 样条曲面是分段多项式曲面,所使用的分段多项式的数量由 结 数间接确定。结数越大,分段多项式的数目越多,近似效果越好,但是计算成本更高。B 样条曲面中的结数会自动增加,直到曲面近似值满足 相对容差 栏中指定的 容差 或直到达到 相对容差 栏中 最大结数 栏指定的结数为止。根据相对于参数化曲面的边界框的空间对角线测量容差。
在这个示例中,我们使用试错法得到 相对容差 为 5e-4,而 最大结数为 500。(默认值分别为 1e-5 和 20。)下图显示了生成的曲面。
我们可以在更早的时候就使用这项技术,以同时可视化点云和曲面,如下图所示。
要更好地控制表面可视化的细节,可以单击 网格 节点并创建适当 单元大小 的网格。下图显示了使用 极细化 设置的网格。要获得更高的分辨率,请选择 用户控制网格 选项并设置 定制 单元大小。
在原始点云数据中心有一个圆心在x=5,y=5上,半径为 4.5 的圆形迹线。下图显示了添加一个圆柱体来拟合这些测量点,圆柱体高度位于 z 方向的最小值和最大值之间。
现在,使用 交集 操作通过选择曲面和圆柱体来修剪表面,如下图所示。
要在两个内插曲面之间的空间创建具有圆形迹线的实体,只需重复上述步骤导入第二个曲面即可,如下图所示。
然后,创建一个圆柱体来修剪表面,并对所有对象使用 转换为实体 操作,如下图所示。
使用圆柱体修剪两个表面。
我们可以使用 分割对象 或 分割域 操作获得相同的结果。这些操作比 转换为实体 更复杂,并且允许选择圆柱作为要分割的对象或域。然后,可以选择插值曲面作为用于分割的工具对象。在某些情况下,分割域 操作适用性更广,因为它允许从对象中分割选定的域,并且可以选择自动扩展平面、圆柱或球形工具面,当这些平面与要划分的域不相交时。
最后,使用 删除实体 删除不需要的域,如下图所示。
现在可以对该实体进行网格剖分,并用于任何类型的仿真。在这种情况下,我们可以创建仅有六面体的扫掠网格,如下图所示。
我们可以通过本页底部的链接下载本博客文章中使用的点云数据和文件。如果想生成自己的点云数据,使用任何表面。在下图中,如上例所示,使用了一个参数化曲面,并用圆柱体对其进行了修剪,用于 z 坐标的表达式为:
z = 0.25 * cos(s1)+ 0.2 * cos(1.5 * s2)* exp(-0.1 * s1 + 0.1 * 0.25 * s2)+ 0.1 * s2
实际上,这是用于生成第一个示例中使用的点云数据的表面。
现在,创建一个网格,然后右键单击 网格 节点并选择 绘图 在结果 下生成一个网格图。接下来,右键单击 网格图>网格,然后选择添加要导出的绘图数据 。在数据的设置窗口中,将1用作表达式。由此导出的常量值将不被使用。选择一个文件名,然后单击窗口顶部的导出 将数据写入文件。

用于以电子表格格式输出数据的输出设置。
如果在文本编辑器或电子表格软件中打开生成的文本文件,则会看到带有注释行和四列的标题。最后一列包含常量表达式1。

在电子表格软件(例如 Excel®)中,我们可以删除第 4 列,然后将文件再次保存为文本文件格式。生成的文件将采用与前面讨论的示例相同的格式。请注意,标题中的前导注释行是可选择项,可以删除。
这篇博客介绍的技术可用于多种用途。例如,可以导入两个以上的曲面来创建更加复杂的结构;可以使用非圆柱体对象修剪数据;在其他示例中,点云数据可以基于圆柱或球形坐标;可以将以上技术与坐标转换结合使用以生成圆柱或球形面切片。
有关在岩土工程应用中使用插值数据的真实示例,请参阅这篇博客:将地质模型整合到区域尺度的地下水模型中。
更多相关示例,请参阅这篇博客:如何基于高程数据模拟不规则形状并构建模型几何。
单击下面的按钮,您可以下载文中使用示例的 MPH 文件和数据文件。您还可以找到一个 MPH 文件,这个文件演示了如何将表达式定义的原始参数平面与点云定义的参数平面进行比较。
Microsoft 和 Excel 是 Microsoft Corporation 在美国和/或其他国家的注册商标或商标。
在使用 COMSOL 软件二次开发的过程中,你可能会遇到这样的问题:如何使用 App 开发器创建可以处理 CAD 导入并能让用户交互式选择边界条件的仿真 App?我需要了解编程吗?今天我们将为您介绍在COMSOL软件中创建包含CAD导入和选择的仿真App 的方法,通过这些方法,你不仅可以通过一系列简单的步骤来做到这一点,而且不需要任何编程!你只需在 COMSOL 软件附加的 App 开发器的表单编辑器中执行标准操作就可以轻松完成。
本文即将讨论的仿真 App 屏幕操作录像。
“选择”是创建本文开头演示的仿真 App 的关键。首先,我们来回顾一下选择的概念以及它们在 COMSOL Multiphysics® 软件中的用法。
在模型开发器中,指定选择可以在分配材料属性、边界条件和其他模型设置时,对域、边界、边或点进行分组。我们可以通过在组件>定义 节点下添加子节点来创建不同类型的选择。这些可以在整个模型组件中重复使用。
下面,我们以边界条件的选择为例来说明如何使用选择。当我们选择一些边界与某个边界条件关联时,可以直接在 COMSOL Desktop® 环境的 图形 窗口中单击那些边界。这是默认选项,称为手动选择。然后这些边界将被添加到该边界条件的局部选择中。
相反,指定选择可以让我们定义全局选择,只需从边界条件的下拉列表中进行选择即可将其重新应用。下图显示了显式 选择的定义和使用,将编号为 186 的边界定义为出口流边界。

定义显式选择,将编号为 186 的边界定义为出口边界。

对层流的出口边界条件使用出口边界选择。
我们将以 COMSOL Multiphysics 案例库中的 微混合器模型 教程为例,说明 CAD 导入和选择的用法。在案例库中,原始模型位于以下位置:COMSOL Multiphysics > 流体动力学 > 微混合器。
该模型模拟了一个静态层流微混合器,混合器具有两组平行的分离-再成形-重组混合单元。每个混合单元使流体层的数量增加了一倍,从而实现快速混合过程。以标量混合质量为输出结果,通过计算出口处的浓度曲线的相对方差来定义。

COMSOL Multiphysics® 案例库中的微混合器模型。
我们将对此模型稍做修改并作为仿真 App 的基础模型。尽管这是一个微流体模型,但这里使用的操作是通用的,适用于任何模型。
COMSOL 案例库中的模型都是通过使用 COMSOL Multiphysics 中的内置功能来构建几何结构的。但是,这里我们将其修改为基于 CAD 导入的版本。
首先,下载并打开相应的文件 micromixer_prepared.mph,该文件在与本博客文章相关的文件列表中可以查看:支持 CAD 导入和选择的 App。
该模型在几何 序列中具有一个 CAD 导入节点,如下图所示。

CAD 导入设置窗口,显示输入了一个本地的 COMSOL 几何结构。
如果我们拥有可访问 CAD 内核的附加产品(CAD 导入模块,设计模块或用于连接 CAD 的 LiveLink
产品之一),则该仿真 App 将允许我们导入各种行业标准的 CAD 格式文件。
为了使仿真 App 不依赖导入 CAD 格式文件的尺寸,该模型还添加了 缩放 操作,并设置参数为 geometryScale,如下图所示。

缩放操作的设置窗口。
geometryScale 的值 1 假定导入的 CAD 格式文件以微米为单位定义。 geometryScale 的默认值 1000 假定导入的 CAD 格式文件以毫米为单位定义。
如本文开头所述,模型 micromixer_prepared.mph 具有两个显式 选择,即入口边界 和出口边界。这些选择将应用于模型中的流量和质量传输的入口和出口。
现在,让我们基于微混合器模型创建一个仿真 App。在主屏幕 选项卡上,从模型开发器切换到 App 开发器,然后单击新建表单,打开新建表单向导。
在输入/输出页面,将表单标题 更改为 Main,并将表单名称 更改为 main。然后,双击左侧的树使以下参数在表单中可用(详请参见下图):
此外,双击全局计算 节点以显示计算出的混合质量。

表单向导中的输入/输出页面。
在图形 页面中,双击浓度,表面(tds)以将其作为默认图形输出。

表单向导中的 图形页面。
在按钮 页面中,双击计算研究1以添加计算 按钮。

表单向导中的 按钮页面。
单击确定 退出表单向导。
在表单编辑器中,根据下图使用拖放操作放置图形 对象和计算按钮。单击并拖动以调整图形 对象的大小,使其稍大一些。

表单编辑器中的初始应用布局。
下一步,将 App 布局模式切换为 栅格 模式。通过选择增长列,增长行,对齐>水平填充,以及 对齐>垂直填充,使图形 对象可调整大小。有关如何执行此操作的详细说明,请参阅COMSOL App开发器 简介(5.5版本)中第 116-117 页。

网格布局模式,其中 图形对象可调整大小。
现在,我们通过单击功能区中的测试 APP 来运行该仿真 App。此仿真 App 非常有趣,对于各种输入都可以轻松计算并获得结果。

微混合器仿真 App 的第一个版本。
在运行时最大化整个 App 窗口可能更为方便。在 App 开发器 中,单击 App 开发器模型树中的主窗口 节点,然后在设置窗口中的大小 部分,选择初始大小最大化,就可以启用这个功能。

将 初始大小设置为 主窗口的设置。
为将 CAD 导入仿真 App,我们需要添加一个专用按钮,使用该按钮打开文件浏览器并执行导入。为了给新添加的按钮留出空间,如下图所示,在最后一个输入框相对浓度方差,出口 下方添加新行。

在表格中添加另一行。
如下图所示,单击并选择新行中最左边的单元格。

主表单中一个选中的单元格会显示更深的蓝色。
选择空单元格后,在表单 选项卡中,选择插入对象>输入>按钮。在按钮的设置窗口,将文本 更改为导入,使用图像库中名为 import_32.png 的图标(单击图标右侧的+按钮),然后将大小更改为大(或使用另一个图标)。

导入按钮的设置窗口。
右键单击按钮,然后选择对齐>右对齐 以更好地放置按钮。

CAD 导入按钮,靠右对齐。
现在,按钮的布局已经准备就绪。下一步是将动作或命令关联到按钮。单击导入按钮查看其设置窗口。在选择要运行的命令 部分中,浏览并双击模型>组件1>几何1>导入1>文件名(文件名)。

将 导入文件添加到 导入按钮的命令序列中。
同样,浏览并双击模型>组件1>几何1和GUI命令>图形命令>缩放范围,以将这些操作添加到命令 序列中。此外,根据下图,使用命令 序列下方的编辑变元按钮,或在绘制几何1和缩放范围命令的变元字段中,手动键入 main/graphics1 。

变元 main/graphics1 将图形输出到仿真 App 中的相应的图形 对象。不管模型的尺寸有多大,缩放到窗口大小命令可以确保整个 CAD 模型在图形窗口中都是可见的。
现在,我们可以通过单击测试 App 来运行该仿真 App,然后导入在本篇博客相关文件中下载的 MPHBIN 文件。
为了能够使用缩放 参数轻松更改导入 CAD 模型的比例,我们需要在新比例下重建几何对象并对其进行可视化。为此,我们可以添加另一个按钮来显示和构建几何图形。使用编辑器工具 窗口可以很容易地做到这一点。通过单击功能区的表单选项卡中的相应按钮,可以打开编辑器工具 窗口。单击编辑器工具 窗口中的导入按钮右侧的空白单元格,浏览至模型>组件>几何,然后单击鼠标右键,选择按钮。

使用 编辑器工具窗口添加 绘制几何按钮。

主表单中的绘制几何按钮。
如果需要对导入缩放后的CAD模型自动调整图形 轴,请根据下图,在绘制几何 按钮的设置窗口中,向命令序列添加缩放范围命令。

绘制几何按钮 的 命令序列。
现在,我们添加两个按钮来选择边界:一个按钮用于入口边界,另一个按钮用于出口边界。
单击与计算 按钮相同的行中最左边的空白单元格。
使用编辑器工具窗口,浏览并右键单击模型>组件1>定义>选择>入口边界>按钮。

将绘图选择 按钮添加到所选单元格。右键单击并选择对齐>右对齐以更好地放置按钮。
双击绘图选择 按钮,然后在其设置 窗口中,将文本 更改为入口。

入口边界的 入口选择按钮。
根据下图,通过浏览并右键单击模型>组件1>定义>选择>出口边界>按钮,然后将按钮的相应文本更改为出口,重复上述步骤以创建出口 按钮。

用于边界选择的 入口和出口按钮。
与在 模型开发器 中一样,单击 出口 选择按钮,使图形 对象具有交互性,从而允许我们单击边界,以便为出口边界 选择一个或多个边界。如下图所示,在绘制出口边界 命令中将 graphics1 作为变元反映在命令 序列中。对于入口 按钮,也是如此。

出口按钮的命令顺序。
要查看单击选择按钮后用户界面的显示方式,请参阅本文末尾更高级版本的仿真 App 图示。
在使用新的选择按钮之前,我们还需要在用于计算混合质量的平均算子中使用选择。在模型开发器中,转到组件1>定义>平均值1和组件1>定义>平均值2,然后根据下图将选择 分别更改为入口边界 和出口边界。

边界平均算子 的选择设置。
为了使用户能够控制用于测量混合质量的入口边界处的浓度阶跃函数,我们需要将其参数化并将此表达式提供给用户。为了表示微流体通道的特征宽度(数量级),根据下图,以具有默认值 1400[um] 的全局参数 channelWidth 开始。

通道宽度的全局参数。
找到阶跃函数组件 1 > 定义 >阶跃 1 的设置窗口。在平滑部分中,在过渡区域 的大小 输入 channelWidth/10。这样可确保在从 0 增加到 1 时,阶跃函数的过渡区域为通道宽度的 10%。过渡过于尖锐可能会导致粗糙网格存在收敛问题。在本文的后面,我们将看到如何使用此阶跃函数来设置自定义浓度曲线。

阶跃函数的过渡区域设置。
接下来,在流入边界条件的浓度 设置中,将表达式替换为 cStep。

用于流入浓度的变量 cStep
在组件1>定义>变量,定义新的变量 cStep 使表达式 等于 c0*step1(-z[1/m])。

定义变量 cStep
在 App 开发器的主表单中,根据下图,在几何比 输入框下方添加两个新行,并使用编辑器工具 窗口分别为通道宽度参数和浓度阶跃 变量添加输入。为了放置和适应新的输入框,我们可能需要使用表单编辑器功能区中的合并单元格工具。使用 Shift + 单击以选择多个单元格,然后单击合并单元格。另外,我们可能还需要拖动以展开输入框的列,以适合浓度阶跃 的新变量表达式。有关更多信息,请参见模型开发器简介。

带有 通道宽度参数和浓度阶跃变量表达式的两个新行。

将 通道宽度参数添加到表单。

将浓度阶跃变量表达式添加到表单。
为了让用户控制单元的大小,请通过单击模型开发器的开发工具 选项卡中的相应按钮来启用数据访问。这样我们就可以访问单元大小的大小 属性,并在仿真 App 中使用它。

使启用数据访问按钮,访问预定义单元大小属性。
在主 表单中,在浓度方差输出下方添加另一行。单击新添加的行中最左侧的单元格,然后使用编辑器工具 窗口添加预定义大小输入。
在编辑器工具窗口中:

使用编辑器工具窗口为预定义大小添加组合框对象。
这样做将为预定义的大小 添加一组合框 对象,如下图所示。请注意,我们可能需要使用合并单元格 来获得所需的布局。

主表单中的预定义大小选项。
该仿真 App 的基本版本现在已经准备就绪。如果您不想执行所有步骤,可以从与此博客文章相关的文件集中下载该 App。文件名是 micromixer_basic_app.mph。
测试该仿真 App需要导入 CAD 文件 split_recombine_mixer.mphbin,并使用输入参数,如下图所示。这些参数将重现微流体模块中可用的教程模型的结果。

分离-重组微混合器模型的输入参数。
表达式 c0*step1((0.75[mm]-x)[1/m]) 定义了 x 方向上的浓度阶跃,过渡区域位于两个入口边界之间。具体地,过渡区域是 500 微米道宽度的 10%。这意味着在入口边界之间的区域中,浓度阶跃 表达式的值在宽度为 50μm 的区域内从 0 迅速增加到 1,从而确保左右入口的浓度值分别精确地为 0 和 1。单位表达式 [1/m] 确保阶跃函数的输入变元没有单位。
计算后的结果如下图所示。在这种情况下,相对浓度方差为 0.158。

使用具有用户定义的 CAD 导入和选择功能的临时设计仿真 App 模拟分离-重组微混合器。
启用任何格式的 CAD 导入取决于附加产品,我们需要在模型开发器中的几何 序列中为 CAD 导入节点显式启用任何文件格式。为此,需启用数据访问,操作与上述的启用用户单元大小控制时相同。在导入设置窗口中,选中源 旁边的复选框,然后更改为任何可导入文件,如下图所示。此处可用的选项将取决于可用的附加产品。

启用任何可导入文件以进行 CAD 导入。
在 App 开发器中,双击导入按钮以打开其设置窗口。双击模型>组件1>几何1>导入1>源(类型),然后输入文件 作为变元。反复使用上移 按钮将其上移到命令 序列的顶部。(可用变元为:文件、网格、本机、cad和ecad。)

为 CAD 导入启用任何文件类型。
在可下载文件列表中,我们会找到此仿真 App 的稍微复杂的版本,文件名为 micromixer_app.mph。此版本仿真 App 的界面组织得更好,所有按钮都作为功能区项来使用,各种输入和输出分别布置在 CAD、网格、传递,流动 和结果 的子表单中,并通过表单集合进行汇总,如下图所示。此外,在文件菜单中,还有保存,另存为,重置 和报告 选项。
但是,即使在此版本的仿真 App 中,也无需编程。使用表单编辑器,仅需要几步就可以创建它。为了使仿真 App 简洁明了,其中并未设置错误检查和文档。我们可以在 COMSOL Multiphysics 案例库中找到更多高级仿真 App,例如 螺旋静态混合器 App。

在微混合器几何结构中交互式地设置入口边界条件,该几何结构是使用仿真 App 中的 CAD 导入功能导入的。

此仿真 App 的设计更好,且仅使用表单编辑器创建而无需编程。
上使用仿真 App当然,我们可以使用 COMSOL Compiler
将仿真 App 编译为独立的应用程序,或者通过连接到 COMSOL Server
来运行它。使用 COMSOL Server 运行时,我们可以使用以下三种方式运行 App:

使用 COMSOL Client for Windows® 运行时,通过在用户界面中单击来执行选择的方式,与使用 COMSOL Multiphysics® 进行选择的方式相同。使用标准的网页浏览器或 COMSOL Client for Android
运行时,我们可以双击边界来选择它们。

通过连接到 COMSOL Server
,可在 Chrome
网页浏览器中运行的具有 CAD 导入和选择功能的仿真 App。
本文介绍了如何创建包含 CAD 导入和选择的仿真 App 而无需进行任何编程。仿真 App 有两种类型的入口和出口边界条件,使用本文介绍的技巧可以轻松扩展仿真 App 的其他边界条件。例如,仿真 App 还可以为其他类型的边界条件添加更多的选择,例如对于设置固定压力值或对滑移流进行建模。该仿真 App 演示了计算流体动力学和稀物质传递。您也可以轻松地为另一个物理领域创建类似的仿真 App,例如结构力学、声学、电磁学或传热。
单击下面的按钮,下载本文中讨论的仿真 App。通过学习该仿真 App,激发创建您自己的仿真 App(并添加专门功能)的灵感!
Android 和 Chrome 是 Google LLC 的商标。Microsoft 和 Windows 是 Microsoft Corporation 在美国和/或其他国家的注册商标或商标。
“图像到曲线”是 COMSOL Multiphysics 的一个产品插件,您可以将图像导入COMSOL中作为仿真分析的起点。借助此插件,您可以将导入图像的轮廓创建为插值曲线,然后将其转化为模型几何的一部分。这篇博客,我们将演示如何使用这项功能。
下图显示了根据一张用黑色标记线绘制轮廓的照片创建扫掠网格的不同步骤。在这个示例中,3D 模型是通过拉伸 2D 几何图形创建的 。
导入的照片(用智能手机拍摄),用黑色标记线画出了轮廓,并用绿色细线画出了叠加的轮廓线(绿色细线)。
删除了从图像转换模型几何的过程中产生的一些无关域后得到的实体几何轮廓。
基于黑色标记线轮廓创建的扫掠网格。
首先,选择模型开发器中的开发工具选项卡,单击插件库,然后从插件库启用“图像到曲线”插件。

插件库按钮。
从列表中,选择“图像到曲线”复选框,启用该插件。

插件库窗口。
单击 开发工具 选项卡上的插件按钮,软件界面显示“图像到曲线”插件。

通过开发工具选项卡访问插件。
“图像到曲线”插件的 设置 窗口如下所示。该窗口的顶部有 5 个工具栏按钮,以及5个包含不同设置的工具栏。

“图像到曲线”的设置窗口。
通过设置窗口顶部的工具栏在不同步骤之间导航。
![]()
“图像到曲线”插件的工具栏按钮。
“图像到曲线”插件的工具栏按钮包括:
“图像到曲线”插件的设置工具栏包括:
下面将详细描述各栏的设置项。
要导入图像,请在插件 设置 窗口的 图像 中单击 浏览 按钮,打开文件浏览器,可以在其中选择要导入的图像。

图像栏
导入的图像可以是一个物体的照片或一张图片,支持的格式为.png,.jpg,.jpeg,.bmp和.gif。 为了创建高质量的模型几何,导入的图像最好是浅色背景深色形状,或深色背景上浅色形状。导入图像时,彩色图像将被转换为灰度图像。
导入图像后,图像栏中将显示以像素为单位的图像尺寸(x和y),以当前长度单位(由几何节点确定)表示的图像宽度,文件名和用于处理图像的 过滤器 等信息。
通过更改图像宽度值,可以调整最终几何结构的尺寸。后续也可以通过在几何序列中添加比例特征节点来更改此设置。过滤器选项包括一些模糊过滤器和锐化过滤器,如下图所示。

过滤器设置
使用这些过滤器可减少导入图像中的噪点(模糊)或增强边缘(锐化),更改过滤器将更改从图像提取的曲线的形状,默认值为 高斯模糊 过滤器。如果有必要,请在导入之前使用专用的图像处理软件进一步处理图像。单击工具栏中的 绘图 或 过滤器 按钮分别渲染原始图像或过滤后的图像。
默认情况下,轮廓曲线会被自动放置在相对于过滤之后的图像中像素强度级别接近于平均阈值的位置。 如果需要手动控制轮廓阈值,请清除自动轮廓阈值复选框。

轮廓栏
单击工具栏中的 轮廓 按钮,将轮廓曲线和图像可视化,下图为一个导入的工字梁轮廓图。
如要检查像素值,请在“图像到曲线:图组中,选择表面节点,然后单击图形窗口。像素值和坐标将显示在一个二维计算表格中,如下图所示。
单击工具栏中的曲线按钮,以2D几何序列或3D工作平面生成插值曲线节点。默认情况下,曲线类型设置为开放,但是可以将其更改为闭合或实体。曲线容差设置确定了曲线应该与轮廓曲线接近的程度。

曲线栏
下图显示了一个工字梁示例,曲线 类型使用 实体,曲线容差 为 0.0。
在目标栏中,可以指定应该为其创建插值曲线节点的几何序列。可以指定模型组件,对于 3D 几何,还可以指定 工作平面。

目标栏
在 高级 栏,可以更改用于可视化图像的插值方法,在 线性 和 最近邻 插值之间选择。逐像素细化 设置用于确定表示图像每个像素的网格单元数:小于1.0的值表示用于表征图像的网格插值点数少于图像中的像素数,大于 1.0 的值表示网格将对图像进行过采样。

高级栏
显示 x 和 y 度量复选框可控制是否显示轮廓曲线的尺寸。
如您需要查看与插件相关的动态帮助,请单击模型树中的图像到曲线节点,然后单击COMSOL Desktop®用户界面右上角的问号图标(与获取其他设置窗口的文档一样)。
您可以下载以下示例模型和上文展示的图像。
示例模型文件image_to_curve_h_beam.mph包含一个具有分布式载荷的简单结构分析,如下图所示。
示例模型文件hand_drawn_image_geometry_and_mesh.mph包含本文开头所描述的黑色标记线轮廓的几何形状和扫掠网格。 除了显示如何使用图像到曲线插件之外,还演示了如何删除在从图像到几何的转换中创建的一些无关的域。
请注意,您可以通过COMSOl中提供的所有几何建模功能,如与其他几何零件、钻孔等联合等,继续使用生成的2D或3D拉伸几何结构。以上示例中的网格是扫掠网格,但也可以使用非结构化的四面体或三角形网格。
如需了解如何创建此插件,您可以通过从 COMSOL 安装目录加载相应的MPH文件来查看,甚至修改其 App 开发器设置。对于 Windows® 操作系统的标准安装,该文件位于:
C:\Program Files\COMSOL\COMSOL55\Multiphysics\addins\COMSOL_Multiphysics\image_to_curve.mph
如需了解有关通常使用APP开发器创建插件和仿真APP的更多信息,请参见:
您还可以通过帮助和文档工具在 COMSOL Multiphysics 安装访问这些文档。
插件或插件程序是对 COMSOL Multiphysics 软件中的用户自定义功能的扩展,即用户可以创建和打包自定义功能。通过使用插件自动执行常见的仿真任务,可以降低仿真错误,提高仿真效率。用户可以使用 App 开发器中强大的用户界面和编程工具创建插件。
编者注:本博客更新于 2024 年 7 月 22 日,以反映 COMSOL Multiphysics® 软件 6.2 版本的新特征和新功能。
插件由三部分组成:方法、表单和功能区选项卡,这三部分都是通过 App 开发器创建的。在早期版本的 COMSOL® 软件中,方法编辑器只包含创建仿真 App 的功能,但经过最近几次版本更新后,新版本软件中的方法编辑器也可以创建插件,即使用方法和表单创建插件。这样就能创建从用户自定义界面访问的用户自定义功能,从而增强模型开发器中的建模工作流程。接下来让我们简要回顾一下什么是方法和表单,先从方法开始。
方法是用户在 App 开发器中使用方法编辑器创建的基于 Java® 编程语言的程序。通过这些程序,用户能够创建执行复杂操作的自定义功能,例如结果评估和可视化。若想要学习如何使用方法,用户不必阅读用户手册,只需在用户界面上单击 录制代码,然后在模型开发器中执行想要的操作,最后停止录制,并修改自动生成的编程代码。

方法编辑器可用于编写模型开发器树节点的标准用法中未涵盖的操作。
当然,您可以使用多个方法来表示自定义工作流程中的各种任务。您还可以在 App 开发器中使用表单编辑器创建自己的专用用户界面来规划您的工作流程。这样的用户界面可以在模型开发器中以 设置表单 或模态框的形式使用。

表单编辑器可用于创建包含表单和表单对象(如输入框、按钮和组合框)的用户界面。
在这些精选的博客中了解更多有关创建方法、表单和仿真 App 的内容。
早期版本的 COMSOL Multiphysics® 不允许用户在会话之间或不同用户之间重复使用模型开发器中使用的方法和表单。当然,这样的需求可以通过创建一个仿真 App来实现。现在,在新版本的软件中用户可以创建插件、方法集合、表单和功能区选项卡,并将它们存储在一个插件库中,以便在新的仿真会话中重复使用。COMSOL Multiphysics 还提供了一些内置的插件库。对于内置的插件,您可以通过查看其 App 开发器的设置,包括表单、方法和功能区选项卡,来快速了解如何创建自己的插件。接下来,让我们来看看如何基于方法和设置表单创建插件。
创建插件与创建仿真 App 类似,但有一些区别。插件没有自己的 图形 窗口,而是使用模型开发器中的主 图形 窗口。对于任何类型的模型,插件都应该能够正常工作或者能给出受控的错误信息。要创建一个插件,您可以从在 App 开发器中创建表单开始,然后单击功能区中的 插件定义 来创建插件,如下图所示。

功能区中的 插件定义 按钮。
右键单击 App 树中的 插件定义 节点,然后选择 表单定义。

为插件创建表单定义。
下图为 表单定义 的设置窗口。在这里,您可以为插件表单添加标签,也可以选择插件使用的表单。标签 将显示在用户定义的插件库中。您可以选择将该表单作为模型树中的 设置表单 显示,还是作为 对话框 显示。允许多个设置表单 复选框用于允许在模型树中有多个 设置表单 实例。描述 框中的内容将显示在插件库中,并在功能区中选择插件时作为工具提示显示。

表单定义 的设置窗口
单击 插件定义 节点,查看其 设置 窗口,如下图所示。

插件定义 的设置窗口。
文件名 是插件的 MPH 文件在用户自定义的插件库中的位置。如果您希望与同事共享该插件,可以将其放在共享网络驱动器上。 标签 将显示在 插件库 窗口中。唯一标识符 是插件的标识,对于任何 COMSOL Multiphysics 会话都是唯一的。唯一标识符建议采用类似于 < company name > . < Add-in name > 的格式,例如, my_company.my_add-in。您可以在创建的插件中应用 编辑密码,该密码与插件根节点 设置 窗口中的编辑密码不同。
要创建插件(一种特殊类型的MPH 文件),请单击 创建插件 按钮。

创建插件 按钮。
要使用 插件库 中的插件,首先需要启动它。在模型开发器的 开发工具 选项卡中,单击 插件库 即可。

插件库 按钮。
在插件列表中,选择要启用的插件的复选框。

插件库 窗口。
启用插件后,单击 开发工具 选项卡中的 插件 按钮时,就会显示相应的插件。

从 开发工具 选项卡访问插件。
下图显示了一个内置插件的 设置表单。

图像到曲线 插件的设置窗口。
如果您需要查看和编辑某个内置插件的 App 开发器设置,可以打开相应的 MPH 文件。在 Windows® 系统的安装文件中,内置插件库位于:
C:\Program Files\COMSOL\COMSOL62\Multiphysics\addins.
单击 插件库 窗口底部的 添加用户插件库 按钮,即可浏览用户定义的插件库。

添加用户插件库 按钮。
用户自定义的插件库将与软件内置的插件库一起显示,如下图所示。

用户定义的插件库。
在创建和编辑插件时,您会发现同时打开两个 COMSOL Multiphysics 会话非常有用:
在使用模型开发器测试插件时,请确保测试多种模型,包括不同空间维度的模型以及包含多个模型组件的模型。使用 刷新插件 按钮可以确保您使用的插件始终是最新版本。

刷新插件。
仿真 App 和插件之间有许多相似之处,但也有一些重要的区别,下表对二者之间的差别进行了总结。
| 条目 | 仿真 App | 插件 |
|---|---|---|
| 目标对象 | 任何人 | 仿真专家 |
| 开发工作 | 简单(适用于简单的 App) | 更详细 |
| 模型 | 嵌入式模型 | 任意用户定义的模型 |
| 图形 | 多个图形窗口 | COMSOL Desktop® 图形窗口 |
| 可与…一起使用 | 已编译的独立仿真 App, COMSOL Server , COMSOL Multiphysics | COMSOL Multiphysics |
仿真 App 通常是围绕一个您可以完全控制的嵌入式模型构建的,而插件则需要适用于用户提出的任何模型和仿真场景。因此,创建插件通常比创建仿真 App 需要更多的工作。当然,这也取决于所处理的仿真任务的复杂程度。
例如,一个插件的维护需要检查诸如以下这些项目:
内置插件库中的示例也说明了这一点。
软件内置的插件库提供了多个插件示例,您可以从这些示例开始,快速学习如何创建自己的插件。这些示例演示了如何创建包含自定义方法、设置表单和功能区选项卡的插件。如果您想要查看和编辑内置插件的设置,可以打开相应的 MPH 文件,在 Windows® 安装系统中,该文件位于:C:\Program Files\COMSOL\COMSOL62\Multiphysics\addins.
您可以查看 App 开发器简介 文档 ,了解有关创建插件的更多信息。
Microsoft 和 Windows 是微软公司在美国和/或其他国家的注册商标或商标。
Oracle 和 Java 是 Oracle 和/或其关联公司的注册商标。
递归定义的几何结构在工程应用中可能很有用,比如宽带天线和超材料。关于一些应用的简要概述,请查看之前一篇关于分形的博客。本篇博客,我们将看看如何通过算法快速生成这种几何对象。
我们可以使用 App 开发器中的方法编辑器创建可以执行几乎任何类型的建模任务的方法,包括几何建模。我们很容易忽略这样一个事实,那就是方法可以通过在递归循环中调用自身的方法来支持递归。
本文,我们将通过两个著名的递归结构的例子来演示递归:二维的 Sierpinski 地毯和三维的Menger 海绵。这些例子的代码很短,因此我们可以完整地将它们列出,并且在文末有下载这些示例子的链接。
下图中显示的方法,create_carpet,根据一个输入参数层 将递归运行到某个递归层。它将限制设置为 5 个层,以避免创建过大的几何图形。(如果你认为你的计算机可以处理大的几何图形,你可以更改这个限制。)
if (level < 1) error("Carpet level needs to be at least 1."); if (level > 5) error("Carpet level needs to be at most 5."); counter = 0; model.component("comp1").geom("geom1").feature().clear(); model.component("comp1").geom("geom1").autoRebuild("off"); double cx0 = 0, cy0 = 0; double si0 = 1; carpet(level, cx0, cy0, si0); model.component("comp1").geom("geom1").runPre("fin"); 输入在方法的设置 窗口中定义的参数层,如下所示。

反过来,方法 create_carpet 调用下面列出的主要递归函数——地毯,使用了四个输入参数:递归层、中心 x 坐标和 y 坐标,以及当前的边长。
输入参数在方法的设置 窗口中被定义,如下所示。

下图所示是方法地毯 的代码:
int l = level; double posx, posy, si1; String strix; int l1; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { posx = cx+i*si-si; posy = cy+j*si-si; strix = toString(i)+toString(j); if ((Math.abs((i-1))+Math.abs((j-1))) > 0) { if (l == 1) { counter = counter+1; model.component("comp1").geom("geom1").create("sq"+strix+"C"+toString(counter), "Square"); with(model.component("comp1").geom("geom1").feature("sq"+strix+"C"+toString(counter))); set("base", "center"); set("size", new double[]{si}); set("pos", new double[]{posx, posy}); endwith(); model.component("comp1").geom("geom1").feature("sq"+strix+"C"+toString(counter)).label("Square"+strix+"C"+toString(counter)); } else { l1 = l-1; si1 = si/3; carpet(l1, posx, posy, si1); } } } } 为了获得方形对象的连续编号,使用整数变量计数器(位于声明下),如下所示。

上述两个函数的代码在方法编辑器中并排显示如下:
为了运行 create_carpet,首先将其添加为方法调用。相应的菜单按钮在开发工具 选项卡中可用。

添加后,我们可以更改递归层,并单击运行 按钮。

下图显示了设置递归层为3时得到的地毯的最终几何图形。
请注意,为第 3 层地毯定义的方形几何对象数为 512。第 N 层地毯的几何对象数为 8N。这意味着,使用 create_carpet 方法设置的最大层数 5 ,生成的几何图形有 32,768 个几何对象!如果你想尝试 5 层地毯,请确保你的计算机足够强大!
前面我们已经讨论了二维递归定义的几何对象,那么三维对象呢?Sierpinski 地毯的三维几何称为 Menger 海绵。Sierpinski 地毯的方法很容易推广到三维。但是,在三维中,我们需要注意不要生成超出计算机处理能力的对象。
使用以下方法 create_sponge 启动递归。
if (level < 1) error("Carpet level needs to be at least 1."); if (level > 5) error("Carpet level needs to be at most 5."); counter = 0; model.component("comp1").geom("geom1").feature().clear(); model.component("comp1").geom("geom1").autoRebuild("off"); double cx0 = 0, cy0 = 0; double si0 = 1; carpet(level, cx0, cy0, si0); model.component("comp1").geom("geom1").runPre("fin"); 由上面的方法调用并递归创建一个 Menger 海绵,得到如下所示的方法海绵。
int l = level; double posx, posy, si1; String strix; int l1; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { posx = cx+i*si-si; posy = cy+j*si-si; strix = toString(i)+toString(j); if ((Math.abs((i-1))+Math.abs((j-1))) > 0) { if (l == 1) { counter = counter+1; model.component("comp1").geom("geom1").create("sq"+strix+"C"+toString(counter), "Square"); with(model.component("comp1").geom("geom1").feature("sq"+strix+"C"+toString(counter))); set("base", "center"); set("size", new double[]{si}); set("pos", new double[]{posx, posy}); endwith(); model.component("comp1").geom("geom1").feature("sq"+strix+"C"+toString(counter)).label("Square"+strix+"C"+toString(counter)); } else { l1 = l-1; si1 = si/3; carpet(l1, posx, posy, si1); } } } } 下图显示了 2 层海绵的最终几何形状。
使用这种方法创建的几何对象的数量随着层数 N 增加为 20N,上面显示的 2 层海绵有 400 个块几何对象。
根据关于创建 Koch 雪花的迭代方法的这篇博客,我们也不可以不是使用递归来创建这种类型的结构。
如果你有任何用于附加的 CAD 功能的附加产品,都可以将这些几何对象导出为标准的 CAD 格式。如果没有附加产品,也可以将网格几何导出为任何支持的网格格式,例如 STL。
单击下面的按钮进入 COMSOL 案例库,尝试使用本文中介绍的模型。
COMSOL 软件最新版本中的附加产品 —— AC/DC 模块可以创建将导线、表面和实体结合的静电模型。这一技术被称为边界元法,它可以单独使用,也可以与基于有限元法的模型结合使用。在本篇博客中,我们介绍了如何使用新功能方便地建立一个包括许多极细螺旋线的模型。
边界元法(BEM)是有限元法(FEM)的补充,COMSOL Multiphysics® 软件中内置了基于该方法的接口。下表总结了基于边界元法的三种不同类型的接口:
| 接口 | 适用的物理场 | 带接口的产品 | 是否能够模拟导线 |
|---|---|---|---|
| 静电,边界元 | 二维和三维中的静电 | AC/DC 模块 | 是 |
| 电流分布,边界元 | 二维和三维电化学应用中的电流 | 电镀模块,腐蚀模块 | 是 |
| 偏微分方程,边界元 | 二维和三维中的拉普拉斯方程 | COMSOL Multiphysics(无需附加产品) | 否 |
这些接口非常相似。尽管本文重点介绍静电接口,但是如果你对其他两个接口感兴趣,其中的某些技术也同样适用。
与有限元法相比,边界元法不需要在整个计算域中生成一个体网格,这很难实现而且需要耗费大量资源。使用边界元法,我们仅需要一个极易生成的表面网格就可以解决这个问题。但是,这项优势需要付出相应的代价。COMSOL Multiphysics 中的边界元法不能用于例如非线性或一般非均质材料的模型中。下表总结了边界元法和有限元法在 COMSOL Multiphysics 中的优缺点。
| 建模任务 | 使用边界元法 | 使用有限元法 |
|---|---|---|
| 无限域 | 简单 | 通过使用大的封闭截断域,需要无限元或一个无限域的近似值 |
| 任意距离的后处理 | 简单 | 需要使用更大的截断域进行重新计算 |
| 导线 | 容易,可以用曲线模拟 | 需要对导线的直径进行网格剖分,以避免依赖于网格的解 |
| 体网格 | 不需要 | 需要 |
| 各向同性材料 | 简单 | 简单 |
| 各向异性材料 | 无法使用 | 简单 |
| 非线性材料 | 无法使用 | 简单 |
将有限元法模拟的域和使用边界元法模拟的域结合使用,我们可以获得两全其美的效果。例如,我们可以使用 AD/DC 模块中的静电 接口对一个各向异性的材料域进行建模,同时使用静电,边界元接口对周围的各向同性材料域进行建模。
下面,我们以创建一个静电沉淀过滤器的简化模型为例,来说明如何使用静电,边界元 接口。这种类型的过滤器用于各种工业环境中的颗粒过滤,如过滤燃煤电厂排出的废气中的颗粒。首先,高压线阵列在其周围产生电晕放电区域,从而为不需要的粒子充电。然后,带电粒子在电场中朝着接地的金属板(集电极)迁移,并在粒子层变得太厚而使过滤器的性能下降时,被定期刮除。
模拟电晕放电、电离和带电粒子迁移的整个物理过程非常复杂,这超出了本文讨论的范围。下面,我们仅从纯静电的角度模拟滤波器模,这使模型简单但也相当普遍。此外,我们还介绍了一种适用于多种其他电气设备的建模方法。如果您想进一步了解该静电沉淀过滤器模型的详细信息,请参见COMSOL News 2012 第 21 页的文章。
如下图所示,本例中的过滤器由 6 个接地板和 60 根导线组成。导线被模拟为参数曲线,并保持电压在 50kV。

静电沉淀过滤器示例。
在实际情况中,此过滤器将被装置在一个框架中。为了简化建模过程,我们在这里忽略了该框架。假设板之间和板外的空间充满了空气,这是此模型中唯一的材料属性。在此示例中,我们假设该组件“悬挂在空中”,以获得理想的静电性能。如果要将模型指定为空气,请注意这里没有要单击的域,而是通过在空气材 料的设置窗口中的选择列表中选择所有空域 来选择模型周围的空气区域。如下图所示,在此示例中唯一可用的空域称为无限空域,它表示板之间一直到“无限远”的区域。
获取有关实体域和空域之间差异的更多信息,请参见COMSOL Multiphysics® 5.3 发布亮点 。
在使用边界元方法时,为了模拟无限区域,必须以这种方式选择无限空域。如果使用有限元法对此模型进行模拟,那么我们需要将几何模型封装在有限大小的盒子(或其他形状)中。为了提高计算的准确性,我们还需要在盒子周围添加具有无限空域的额外层。
首先,需要在两种维度上设置边界条件:面边界和线边界。下图显示了指定给接地板的接地边界条件。
然后为导线指定条件。这些导线被指定为终端的线边界条件,其终端类型为电压,电压值为 50kV。此外,如下图所示,边半径 被设置为 1mm。
接下来,我们将介绍如何在物理方面而不是在 CAD 方面将导线的半径输入到模型中。导线的 CAD 模型由参数化曲线组成,这些曲线没有径向范围,但从数学上来讲属于一维对象。这种模拟方法显示了边界元法的主要优势。如果模型已经建立了基于有限元的静电接口,则必须将导线模拟为有限尺寸半径的细螺旋管,从而生成包含许多单元的网格。尽管这可能实现,但通过边界元法更容易实现。
有限元法生成大型的稀疏矩阵,而边界元法生成大型的填充矩阵。这就需要专门求解这种问题的求解器。实际上,边界元法生成的系统矩阵非常繁琐,以至于甚至无法完全形成,而只能生成当前求解器所需的矩阵部分。更具体地说,仅执行当前所需的矩阵向量乘法。在 COMSOL Multiphysics 中实现的用于快速矩阵向量乘法的方法称为自适应交叉逼近方法,当我们使用边界元法接口之一时会自动使用该方法。如果您有兴趣,可以阅读COMSOL 5.3 版本的相关求解器选项的更多信息。
一方面,与有限元法相比,边界元法需要更少的自由度就能产生准确的结果;另一方面,边界元法对计算的要求更高。因此最终通过在计算需求与准确性方面对两种方法进行对比和取舍。
对于基于有限元方法建立的模型,通过体积有限元网格,使用切面图、等值面图、箭头图、流线等可以使建模体积中的计算场可视化。使用边界元法时,没有可用的体积网格,因此为了使空间变化的场可视化,使用规则栅格作为替代。规则栅格被定义为三维栅格数据集,可以让我们定义一个矩形框,其矩形范围在 x,y 和 z 轴方向上具有最大值和最小值。另外,x-,y- 和 z- 分辨率的设置对应于单元大小,并决定了可视化的粒度。在下图中,分辨率被设置为 100x 200x 200,对应于 4,000,000 个六面体网格单元。

设置“三维栅格”数据集
边界元场可能很难实现后处理和可视化,而关闭自动更新绘图 可能是一个好主意。如下图所示,在结果 节点的设置窗口中有对应的复选框。

“结果”节点设置当中的自动更新绘图复选框。
下面的绘图显示了导线周围、极板之间以及极板周围的电势场。通过增加三维栅格框 的大小,我们可以将可视化扩展到更大的体积,而无需重新计算解。这是边界元法的另一个好处,因为如果使用有限元法,我们将需要扩大截断域并重新计算。

静电沉淀过滤器示例中的电势场仿真结果。
边界元法的局限性是要求每个模拟域都必须具有恒定的且各向同性的材料属性。在静电的情况下,每个域必须具有恒定的介电常数。我们可以创建具有不同介电常数值的多个域的模型。下图显示了具有两个介电常数值的MEMS电容器模型:
为了能够模拟这种类型的模型,每个不同的介电域都需要在 静电,边界元 接口添加自己的电荷守恒 节点。在每个电荷守恒 域或一组域中,介电常数是一个常数。就像基于有限元的模型一样,使用预定义的变量在 派生值 下计算该类型设备的电容。
COMSOL Multiphysics 5.3 版本带有预定义的多物理场耦合功能,该功能可以耦合基于有限元和边界元的静电场。下图为另一种版本的 MEMS 电容器模型,其中介电材料被各向异性压电材料(PZT-5H)代替。由于静电,边界元接口不允许模拟各向异性材料,因此该区域使用了传统的基于有限元的静电接口。
此外,本文还使用基于有限元的接口对电容器周围的小盒子进行了建模。在此示例中,静电,边界元接口仅在外部无限空域中有效。有限元区域和边界元区域之间的耦合通过多物理场节点下的边界电势耦合来定义。
下图显示了在有限元和边界元区域中均可视化的电势。在有限元和边界元域之间的交界处可以看到一些由于插值引起的数值伪影。对于三维栅格 数据集,使用更细的网格进行计算并使用更高的分辨率进行可视化时,这类伪影将消失。
您可以通过单击下面的按钮,下载本博客中重点介绍的示例模型。
COMSOL 案例库中提供了其他两个基于边界元法建模的静电学模型教程:
“电容式位置传感器”模型教程演示了如何结合使用静电,边界元接口和变形几何接口模拟大的几何位移。此外,该模型还演示了如何使用 COMSOL Multiphysics 5.3 版本中新增的加速电容矩阵计算选项稳态源扫描。稳态源扫描研究类型也可以与基于有限元的静电接口同时使用。