Bjorn Sjodin – COMSOL 博客 - //www.denkrieger.com/blogs 发布博客 Fri, 08 Nov 2024 09:35:43 +0000 en-US hourly 1 https://wordpress.org/?v=5.7 批处理扫描功能的优势 //www.denkrieger.com/blogs/the-power-of-the-batch-sweep //www.denkrieger.com/blogs/the-power-of-the-batch-sweep#comments Thu, 18 May 2023 22:44:00 +0000 http://cn.staging.comsol.com/blogs?p=170991 你有没有过通宵运行大量参数化扫描,第二天早上发现仍未完成求解的经历?在等待最后几个参数收敛的时候,你可能希望先查看已经计算出的参数解。批处理扫描 功能是解决上述问题的有效方法,计算好的参数化解会自动保存为文件,便于打开进行可视化及结果评估。

编者注: 这篇博客最初发表于 2016 年 2 月 2 日,为呈现软件的新特征和新功能,对其进行了更新。

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

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

在求解器扫描过程中,希望查看部分解的情况很多,例如:

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

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

静电传感示例

为了演示批处理扫描,我们使用 COMSOL Multiphysics® 案例库中的 电传感器示例模型来展示批处理扫描的操作。此模型展示了如何通过在盒的边界施加电位差,获得盒内的图像信息。模型计算的表面电荷结果取决于盒内物体的介电常数,该结果也可用于判断例如盒内是否存在物体,甚至可以帮助确定物体的形状。电阻抗断层成像案例中也采用了类似的技术进行医疗诊断,但使用的是交流电。

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

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

原示例模型中将物体厚度拉伸为 0.8 米。本文示例中,物体厚度被拉伸为 0.5 米。

参数化扫描的输入数据

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

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

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

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

此模型在材料节点下定义了三种材料。材料3表示盒内的星形物体,材料 2表示其他物体。材料 1对应盒内物体周围的空气。我们通过适当调用材料3材料属性中定义的内插表 int1,来改变星形物体的介电常数,使用的语法为 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 博客,了解更多关于批处理扫描和集群扫描的文章:

]]>
//www.denkrieger.com/blogs/the-power-of-the-batch-sweep/feed/ 2
如何将点云数据转换为曲面和实体 //www.denkrieger.com/blogs/how-to-convert-point-cloud-data-to-surfaces-and-solids //www.denkrieger.com/blogs/how-to-convert-point-cloud-data-to-surfaces-and-solids#respond Thu, 28 Jan 2021 07:01:06 +0000 http://cn.staging.comsol.com/blogs?p=246681 在实际仿真过程中,并不是所有分析都是以 CAD 模型开始的。有时,我们唯一可用的数据仅是一系列点数据,也称为点云数据。在这篇博客中,我们将演示如何将点云数据转换为可在 COMSOL Multiphysics® 软件中进行仿真分析的几何模型。

什么是点云?

点云是指在 xyz 坐标上绘制的一系列三维点数据。这些点通常来自使用激光扫描仪、测量工具或雷达成像等技术对物体表面进行扫描所获得的信息。

下面的屏幕截图显示了一个文本文件中的部分点云数据,其中的 xyz 坐标以制表符分隔列的形式排列。

含点云数据的文本文件
含点云数据的文本文件屏幕截图。

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

蓝线代表一条2D曲线,曲线上的连续点标有数字,用于演示如何转换点云数据。
然而,在下图中,由导入的点云数据表示的对应曲线并不是那么明显。也许点 5、6 和 4 是曲线上的连续点?

一个带编号的点,但没有线的点云数据,显示了一条推测的但不明显的二维曲线。
点云数据可能具有内在的歧义。点 5、6 和 4 是不是曲线上连续的点?在这个示例中,它们没有连接,这可以从原始曲线看出,但不能从其相对稀疏的点云数据中看出。

如果一个导入的三维坐标列表带有相关的三角形表面连通性数据,例如 STL,PLY 或 3MF 文件格式,就可以解决这种歧义。比如,一个由两点之间的连通性定义的,并且仅定义了表面的三角形列表。如下所示,三角形表面数据文件

15 17 23

表示将索引为 15、17 和 23 的点作为三角形的顶点相连。

另一方面,如果只有点云数据而没有连通性信息,我们就需要做出其他假设来解决这种歧义。一种可能的假设是:表面数据以 的形式表示,也称为函数面。如果数据不在该表单 上,可以尝试将其分成几部分,使每一部分在表单 上。这里要注意的是,在表单 或者 上的数据在重新排列后同样有用。

可视化点云数据

将点坐标数据可视化的一种简单方法是将其作为表格导入到 多边形 几何对象中,然后使用 转换为点 操作,如下图所示。

COMSOL Multiphysics UI在图形窗口中以点云数据作为几何点对象的侧面视图。
COMSOL Multiphysics 模型开发器中点云数据的几何点对象的正面视图。

点云数据的可视化图,从两个不同的视角看到的几何点对象。

基于这个视图,可以假设点云数据定义了以 形式表示的函数面。为了方便以后使用,我们需要知道点云的范围。获取此信息的一种简单方法是右键单击几何 节点,然后选择 测量

“测量设置”窗口的屏幕截图,展开了“几何类型”、“选择”和“测量”部分。
测量设置窗口给出了有关点云范围的信息。

由点云范围显示的信息可以看到,有 958 个点在 xy 方向上都从 0.5 延伸到 9.5m,在 z 方向上从 -0.2 延伸到 +1.5m。本示例中使用的单位是米(m)。

现在,我们可以尝试使用 转换为曲面 操作将这组点数据转换为曲面。但是,这个操作不起作用。因为我们没有这些点的连接信息,所以系统将提示一条错误消息。我们需要以某种方式构建连接性数据。另外,还需要假设数据在表单 上。解决方案是将点云作为一个非结构化插值曲面导入。

创建一个插值曲面

接下来,我们在 全局定义 节点下添加一个 插值 函数,并将 数据源 设置为 文件。浏览点云文本文件,在本示例中为 C\ COMSOL \ point_cloud.txt,如下图所示。您可以点击文章末尾的链接下载此文件。

COMSOL Multiphysics 中的插值设置屏幕截图,展开了定义和插值和外推部分。
由点云定义的 插值 函数。

插值 功能将自动猜测该数据在表单 上,文件的前两列分别代表 xy 坐标,第三列代表函数值,即函数曲面的 z 坐标。我们可以从参数量中看到这一点,它被自动设置为2,分别对应于 xy 坐标。函数名称 被自动设置为 int1(可以更改以及 文件中的位置 被设置为 1 表示int1xy)的函数值,代表 z 坐标的将由输入参数列之后的第一列给出。换句话说,列数 2+1=3。在这个示例中,文件只有三列,因此 1 是唯一选择。如果数据采用其他形式,则可以在导入之前使用文本编辑器或电子表格软件(例如 Excel®)重新排列数据。

然后,单击 插值设置窗口顶部的 绘图创建绘图 按钮将插值函数可视化。绘图 选项将创建一个临时的可视化结果,创建绘图 选项将创建一个二维 网格 数据集,并在 结果 下的 二维绘图组 节点创建相关的 函数 绘图。

一个插值函数,由点云数据生成的以彩色表显示了插值函数绘图
函数设置窗口的屏幕截图,展开了部分数据和表达式。

结果 及其相关的 设置窗口下以 函数 绘图的形式显示的插值函数。

那么,软件是如何仅基于假设 来创建表面的几何表示呢?首先,插值函数在后台创建 xy 坐标的二维三角形网格,然后将函数值关联到每个点,最后在两个函数值之间进行线性插值。我们可以将这个过程看作在点云上放置一个渔网。请注意,这个三角形网格对用户不可见。在 插值和外推 部分的 插值设置 窗口中,可以看到设置 插值选项,它默认设置为 线性。另一个选项是 最近邻插值,它将创建一个分段常数函数插值,在这个示例中没有用。

这部分的另外一个设置是 外推。这个功能用于猜测函数定义范围之外的值,定义范围由 xy 坐标确定。在这个示例中,点云分布在 xy平面的一个圆内。当将数据可视化为 函数 图时,xy 数据取自一个矩形 二维栅格 数据集,并且插值函数将以辐射模式分配常数函数值,用于填充圆和矩形之间的空间,以限制点云数据。如下图所示,我们可以从点云数据中识别出圆形迹线。

 COMSOL 多物理场图形窗口中插值函数的俯视图,以彩色表的形式显示。
内插函数的俯视图,在定义原始点云迹线的圆形区域之外可以看到外推部分。

软件又是如何将这个插值函数转换为可以进行网格划分和仿真分析的几何表示呢?这是通过使用 参数化曲面 几何对象完成的,我们将在后面进行介绍。

创建一个参数化曲面

要创建一个基于上述插值函数的 几何表面,请根据下图在 几何 下添加 参数化曲面 特征。

参数化曲面设置窗口的屏幕截图,其中展开了参数、表达式和高级设置部分。
基于点云插值函数的表面的 参数化曲面 设置。

在这个 设置 窗口中,s1s2 分别被解释为 xy 坐标,int1s1s2)解释为 z 坐标。现在,我们需要使用之前通过 测量 工具获得的信息。我们将 s1 和 s2 的最小值和最大值设置为比点云数据的测量范围宽一点,以确保不会遗漏任何细节。

在这个示例中,参数化曲面 将在两个方向上被定义在 0 到 10 之间,以与测得的 0.5 到 9.5 之间的点云数据进行比较。

在内部,COMSOL 软件用 B 样条表面表示参数化曲面,该 B 样条曲线表面近似于计算以 xyz 表达式 定义的数学表面。 B 样条曲面是分段多项式曲面,所使用的分段多项式的数量由 数间接确定。结数越大,分段多项式的数目越多,近似效果越好,但是计算成本更高。B 样条曲面中的结数会自动增加,直到曲面近似值满足 相对容差 栏中指定的 容差 或直到达到 相对容差 栏中 最大结数 栏指定的结数为止。根据相对于参数化曲面的边界框的空间对角线测量容差。

在这个示例中,我们使用试错法得到 相对容差 为 5e-4,而 最大结数为 500。(默认值分别为 1e-5 和 20。)下图显示了生成的曲面。


参数化曲面几何对象。

我们可以在更早的时候就使用这项技术,以同时可视化点云和曲面,如下图所示。


参数化曲面几何对象和点云数据。

要更好地控制表面可视化的细节,可以单击 网格 节点并创建适当 单元大小 的网格。下图显示了使用 极细化 设置的网格。要获得更高的分辨率,请选择 用户控制网格 选项并设置 定制 单元大小。

模型开发器图形窗口中显示的网格点云和参数化曲面几何对象。
使用网格将点云数据和参数化曲面几何进行可视化。

修剪表面

在原始点云数据中心有一个圆心在x=5,y=5上,半径为 4.5 的圆形迹线。下图显示了添加一个圆柱体来拟合这些测量点,圆柱体高度位于 z 方向的最小值和最大值之间。

用一个圆形几何裁剪由点云数据生成的参数曲面几何。
用于修剪表面的圆柱体。

现在,使用 交集 操作通过选择曲面和圆柱体来修剪表面,如下图所示。

将参数化曲面与圆柱体相交后的模型几何形状。
表面与圆柱相交的结果。

修剪的表面,将点云数据覆盖在灰色几何上作为黑点。
点云数据和修剪的表面。

在两个曲面之间的空间创建实体

要在两个内插曲面之间的空间创建具有圆形迹线的实体,只需重复上述步骤导入第二个曲面即可,如下图所示。

The original parametric surface with another surface above that corresponds to another point cloud.
与第二组点云数据对应的第二个曲面。

然后,创建一个圆柱体来修剪表面,并对所有对象使用 转换为实体 操作,如下图所示。

COMSOL Multiphysics 中模型开发器的屏幕截图,由一个圆柱体和两个参数化曲面组成的紫色几何。
模型开发器图形窗口的灰色圆柱体几何。

使用圆柱体修剪两个表面。

我们可以使用 分割对象分割域 操作获得相同的结果。这些操作比 转换为实体 更复杂,并且允许选择圆柱作为要分割的对象或域。然后,可以选择插值曲面作为用于分割的工具对象。在某些情况下,分割域 操作适用性更广,因为它允许从对象中分割选定的域,并且可以选择自动扩展平面、圆柱或球形工具面,当这些平面与要划分的域不相交时。

最后,使用 删除实体 删除不需要的域,如下图所示。

通过导入点云数据和修剪两个插值曲面得到的实体模型几何。
通过导入和修剪两个插值曲面得到的实体。

现在可以对该实体进行网格剖分,并用于任何类型的仿真。在这种情况下,我们可以创建仅有六面体的扫掠网格,如下图所示。

一个带扫掠网格的圆柱体。
用于圆柱体的扫掠网格。

生成点云数据进行测试

我们可以通过本页底部的链接下载本博客文章中使用的点云数据和文件。如果想生成自己的点云数据,使用任何表面。在下图中,如上例所示,使用了一个参数化曲面,并用圆柱体对其进行了修剪,用于 z 坐标的表达式为:

z = 0.25 * cos(s1)+ 0.2 * cos(1.5 * s2)* exp(-0.1 * s1 + 0.1 * 0.25 * s2)+ 0.1 * s2

实际上,这是用于生成第一个示例中使用的点云数据的表面。

A parametric surface that was created via a mathematical expression and trimmed via a cylindrical object.
由数学表达式给出并由圆柱对象修剪的参数化曲面。

现在,创建一个网格,然后右键单击 网格 节点并选择 绘图结果 下生成一个网格图。接下来,右键单击 网格图>网格,然后选择添加要导出的绘图数据 。在数据设置窗口中,将1用作表达式。由此导出的常量值将不被使用。选择一个文件名,然后单击窗口顶部的导出 将数据写入文件。

A screenshot of the Data Settings window, with the Output section expanded to show the Spreadsheet option for exporting data.
用于以电子表格格式输出数据的输出设置。

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

屏幕截图显示了在文本文件中导出的模型数据。

在电子表格软件(例如 Excel®)中,我们可以删除第 4 列,然后将文件再次保存为文本文件格式。生成的文件将采用与前面讨论的示例相同的格式。请注意,标题中的前导注释行是可选择项,可以删除。

结束语

这篇博客介绍的技术可用于多种用途。例如,可以导入两个以上的曲面来创建更加复杂的结构;可以使用非圆柱体对象修剪数据;在其他示例中,点云数据可以基于圆柱或球形坐标;可以将以上技术与坐标转换结合使用以生成圆柱或球形面切片。

有关在岩土工程应用中使用插值数据的真实示例,请参阅这篇博客:将地质模型整合到区域尺度的地下水模型中

更多相关示例,请参阅这篇博客:如何基于高程数据模拟不规则形状并构建模型几何

动手尝试:转换点云数据

单击下面的按钮,您可以下载文中使用示例的 MPH 文件和数据文件。您还可以找到一个 MPH 文件,这个文件演示了如何将表达式定义的原始参数平面与点云定义的参数平面进行比较。

Microsoft 和 Excel 是 Microsoft Corporation 在美国和/或其他国家的注册商标或商标。

]]>
//www.denkrieger.com/blogs/how-to-convert-point-cloud-data-to-surfaces-and-solids/feed/ 0
如何创建包含 CAD 导入和选择的仿真 App //www.denkrieger.com/blogs/how-to-create-an-app-with-cad-import-and-selections //www.denkrieger.com/blogs/how-to-create-an-app-with-cad-import-and-selections#respond Thu, 30 Apr 2020 03:42:09 +0000 http://cn.staging.comsol.com/blogs?p=226391 在使用 COMSOL 软件二次开发的过程中,你可能会遇到这样的问题:如何使用 App 开发器创建可以处理 CAD 导入并能让用户交互式选择边界条件的仿真 App?我需要了解编程吗?今天我们将为您介绍在COMSOL软件中创建包含CAD导入和选择的仿真App 的方法,通过这些方法,你不仅可以通过一系列简单的步骤来做到这一点,而且不需要任何编程!你只需在 COMSOL 软件附加的 App 开发器的表单编辑器中执行标准操作就可以轻松完成。

CAD 导入和 仿真 App 选择演示

 

本文即将讨论的仿真 App 屏幕操作录像。

模型开发器中的选择

“选择”是创建本文开头演示的仿真 App 的关键。首先,我们来回顾一下选择的概念以及它们在 COMSOL Multiphysics® 软件中的用法。

在模型开发器中,指定选择可以在分配材料属性、边界条件和其他模型设置时,对域、边界、边或点进行分组。我们可以通过在组件>定义 节点下添加子节点来创建不同类型的选择。这些可以在整个模型组件中重复使用。

下面,我们以边界条件的选择为例来说明如何使用选择。当我们选择一些边界与某个边界条件关联时,可以直接在 COMSOL Desktop® 环境的 图形 窗口中单击那些边界。这是默认选项,称为手动选择。然后这些边界将被添加到该边界条件的局部选择中。

图片显示了带有手动选择出口流边界的微混合器模型。
使用编号为 186 的边界手动选择出口流边界。

相反,指定选择可以让我们定义全局选择,只需从边界条件的下拉列表中进行选择即可将其重新应用。下图显示了显式 选择的定义和使用,将编号为 186 的边界定义为出口流边界

设置窗口的屏幕快照,用于显式选择名称为出口边界
定义显式选择,将编号为 186 的边界定义为出口边界。

屏幕快照显示了名为“选择”的“出口边界”,用于层流边界条件
对层流的出口边界条件使用出口边界选择。

准备用于创建 仿真App 的模型

我们将以 COMSOL Multiphysics 案例库中的 微混合器模型 教程为例,说明 CAD 导入和选择的用法。在案例库中,原始模型位于以下位置:COMSOL Multiphysics > 流体动力学 > 微混合器

该模型模拟了一个静态层流微混合器,混合器具有两组平行的分离-再成形-重组混合单元。每个混合单元使流体层的数量增加了一倍,从而实现快速混合过程。以标量混合质量为输出结果,通过计算出口处的浓度曲线的相对方差来定义。

来自模型生成器中的 COMSOL Multiphysics 案例库中的微混合器模型。
COMSOL Multiphysics® 案例库中的微混合器模型。

我们将对此模型稍做修改并作为仿真 App 的基础模型。尽管这是一个微流体模型,但这里使用的操作是通用的,适用于任何模型。

COMSOL 案例库中的模型都是通过使用 COMSOL Multiphysics 中的内置功能来构建几何结构的。但是,这里我们将其修改为基于 CAD 导入的版本。

首先,下载并打开相应的文件 micromixer_prepared.mph,该文件在与本博客文章相关的文件列表中可以查看:支持 CAD 导入和选择的 App

该模型在几何 序列中具有一个 CAD 导入节点,如下图所示。

“ CAD导入设置窗口图。
CAD 导入设置窗口,显示输入了一个本地的 COMSOL 几何结构。

如果我们拥有可访问 CAD 内核的附加产品(CAD 导入模块,设计模块或用于连接 CAD 的 LiveLink™ 产品之一),则该仿真 App 将允许我们导入各种行业标准的 CAD 格式文件。

为了使仿真 App 不依赖导入 CAD 格式文件的尺寸,该模型还添加了 缩放 操作,并设置参数为 geometryScale,如下图所示。

缩放操作设置窗口的屏幕截图
缩放操作的设置窗口。

geometryScale 的值 1 假定导入的 CAD 格式文件以微米为单位定义。 geometryScale 的默认值 1000 假定导入的 CAD 格式文件以毫米为单位定义。

如本文开头所述,模型 micromixer_prepared.mph 具有两个显式 选择,即入口边界出口边界。这些选择将应用于模型中的流量和质量传输的入口和出口。

将出口边界选择应用于出口边界条件的微型混合器模型
出口边界选择应用于稀物质传递接口的 出口边界条件。

使用新表单向导创建第一个仿真 App

现在,让我们基于微混合器模型创建一个仿真 App。在主屏幕 选项卡上,从模型开发器切换到 App 开发器,然后单击新建表单,打开新建表单向导。

输入/输出页面,将表单标题 更改为 Main,并将表单名称 更改为 main。然后,双击左侧的树使以下参数在表单中可用(详请参见下图):

  • 入口浓度
  • 扩散系数
  • 平均速度
  • 几何比例

此外,双击全局计算 节点以显示计算出的混合质量。

表单向导中的输入/输出页面
表单向导中的输入/输出页面。

图形 页面中,双击浓度,表面(tds以将其作为默认图形输出。

打开图形页面的表单向导
表单向导中的 图形页面。

按钮 页面中,双击计算研究1以添加计算 按钮。

打开按钮页面的表单向导
表单向导中的 按钮页面。

单击确定 退出表单向导。

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


表单编辑器中的初始应用布局。

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

具有初始应用程序布局的表单编辑器演示了表单对象的拖放功能
网格布局模式,其中 图形对象可调整大小。

现在,我们通过单击功能区中的测试 APP 来运行该仿真 App。此仿真 App 非常有趣,对于各种输入都可以轻松计算并获得结果。

微混合器仿真 App 是在第一次设计迭代中内置于 COMSOL Multiphysics 的仿真开发器中。
微混合器仿真 App 的第一个版本。

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

打开“初始大小”选项的“主窗口设置”窗口的屏幕快照。
初始大小设置为 主窗口的设置。

启用 CAD 导入

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

屏幕截图显示了如何在表格中添加另一行
在表格中添加另一行。

如下图所示,单击并选择新行中最左边的单元格。

屏幕快照显示了主窗体,选中的单元格显示了较深的蓝色
主表单中一个选中的单元格会显示更深的蓝色。

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

混合模型开发器中导入按钮的设置
导入按钮的设置窗口。

右键单击按钮,然后选择对齐>右对齐 以更好地放置按钮。

屏幕截图显示了如何在仿真App中布局的右侧对齐CAD导入按钮。
CAD 导入按钮,靠右对齐。

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

导入按钮设置窗口的选择要运行的命令部分的屏幕快照。
导入文件添加到 导入按钮的命令序列中。

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

屏幕快照显示了如何编辑“缩放范围”和“绘制几何1”命令的参数。

变元 main/graphics1 将图形输出到仿真 App 中的相应的图形 对象。不管模型的尺寸有多大,缩放到窗口大小命令可以确保整个 CAD 模型在图形窗口中都是可见的。

现在,我们可以通过单击测试 App 来运行该仿真 App,然后导入在本篇博客相关文件中下载的 MPHBIN 文件。

为了能够使用缩放 参数轻松更改导入 CAD 模型的比例,我们需要在新比例下重建几何对象并对其进行可视化。为此,我们可以添加另一个按钮来显示和构建几何图形。使用编辑器工具 窗口可以很容易地做到这一点。通过单击功能区的表单选项卡中的相应按钮,可以打开编辑器工具 窗口。单击编辑器工具 窗口中的导入按钮右侧的空白单元格,浏览至模型>组件>几何,然后单击鼠标右键,选择按钮。

编辑器工具窗口的屏幕快照,用于将“绘图几何”按钮添加到仿真 App
使用 编辑器工具窗口添加 绘制几何按钮。

突出显示了“绘制几何图形”按钮。
主表单中的绘制几何按钮。

如果需要对导入缩放后的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变量的定义表达式。
定义变量 cStep

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

主要形式带有两个新变量,分别是浓度阶跃和通道宽度
带有 通道宽度参数和浓度阶跃变量表达式的两个新行。

打开编辑器工具,其中显示了如何将“通道宽度”参数添加到表单。
通道宽度参数添加到表单。

将打开“编辑器工具”,其中显示了如何将“浓度阶跃”变量表达式添加到表单
将浓度阶跃变量表达式添加到表单。

使用数据访问控制单元大小

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

应用程序构建器中数据访问按钮的屏幕快照,用于允许访问称为“预定义”的元素大小属性。
使启用数据访问按钮,访问预定义单元大小属性。

表单中,在浓度方差输出下方添加另一行。单击新添加的行中最左侧的单元格,然后使用编辑器工具 窗口添加预定义大小输入

编辑器工具窗口中:

通过“编辑器工具”窗口将预定义大小的组合框对象添加到仿真 App。
使用编辑器工具窗口为预定义大小添加组合框对象。

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

主表单中“预定义大小”组合框的屏幕截图
主表单中的预定义大小选项。

该仿真 App 的基本版本现在已经准备就绪。如果您不想执行所有步骤,可以从与此博客文章相关的文件集中下载该 App。文件名是 micromixer_basic_app.mph

测试仿真 App

测试该仿真 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 导入节点显式启用任何文件格式。为此,需启用数据访问,操作与上述的启用用户单元大小控制时相同。在导入设置窗口中,选中 旁边的复选框,然后更改为任何可导入文件,如下图所示。此处可用的选项将取决于可用的附加产品。

导入设置窗口,带有选择导入任何可导入文件的选项。
启用任何可导入文件以进行 CAD 导入。

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

选择一个选项以导入任何类型的文件以进行 CAD 导入。
为 CAD 导入启用任何文件类型。

整理仿真 App

在可下载文件列表中,我们会找到此仿真 App 的稍微复杂的版本,文件名为 micromixer_app.mph。此版本仿真 App 的界面组织得更好,所有按钮都作为功能区项来使用,各种输入和输出分别布置在 CAD网格传递流动结果 子表单中,并通过表单集合进行汇总,如下图所示。此外,在文件菜单中,还有保存另存为重置报告 选项

但是,即使在此版本的仿真 App 中,也无需编程。使用表单编辑器,仅需要几步就可以创建它。为了使仿真 App 简洁明了,其中并未设置错误检查和文档。我们可以在 COMSOL Multiphysics 案例库中找到更多高级仿真 App,例如 螺旋静态混合器 App

通过添加到应用程序的CAD导入功能以交互方式应用带有入口边界条件的微型混合器模型几何
在微混合器几何结构中交互式地设置入口边界条件,该几何结构是使用仿真 App 中的 CAD 导入功能导入的。

具有专用用户界面的交互式模拟应用程序,允许cad导入和选择
此仿真 App 的设计更好,且仅使用表单编辑器创建而无需编程。

通过网页浏览器在 COMSOL Server™ 上使用仿真 App

当然,我们可以使用 COMSOL Compiler™ 将仿真 App 编译为独立的应用程序,或者通过连接到 COMSOL Server™ 来运行它。使用 COMSOL Server 运行时,我们可以使用以下三种方式运行 App:

  1. COMSOL Client for Windows®
  2. 标准网页浏览器
  3. COMSOL Client for Android™

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

具有CAD导入功能的微型混音器仿真 App 可通过COMSOL Server™在Web浏览器上运行。
通过连接到 COMSOL Server™,可在 Chrome™ 网页浏览器中运行的具有 CAD 导入和选择功能的仿真 App。

仿真 App 的潜在扩展

本文介绍了如何创建包含 CAD 导入和选择的仿真 App 而无需进行任何编程。仿真 App 有两种类型的入口和出口边界条件,使用本文介绍的技巧可以轻松扩展仿真 App 的其他边界条件。例如,仿真 App 还可以为其他类型的边界条件添加更多的选择,例如对于设置固定压力值或对滑移流进行建模。该仿真 App 演示了计算流体动力学和稀物质传递。您也可以轻松地为另一个物理领域创建类似的仿真 App,例如结构力学、声学、电磁学或传热。

下载仿真 App 文件

单击下面的按钮,下载本文中讨论的仿真 App。通过学习该仿真 App,激发创建您自己的仿真 App(并添加专门功能)的灵感!

Android 和 Chrome 是 Google LLC 的商标。Microsoft 和 Windows 是 Microsoft Corporation 在美国和/或其他国家的注册商标或商标。

]]>
//www.denkrieger.com/blogs/how-to-create-an-app-with-cad-import-and-selections/feed/ 0
如何将图像转换为模型几何 //www.denkrieger.com/blogs/how-to-use-an-add-in-to-convert-images-to-geometry-models //www.denkrieger.com/blogs/how-to-use-an-add-in-to-convert-images-to-geometry-models#comments Thu, 23 Jan 2020 05:28:50 +0000 http://cn.staging.comsol.com/blogs?p=212361 “图像到曲线”是 COMSOL Multiphysics 的一个产品插件,您可以将图像导入COMSOL中作为仿真分析的起点。借助此插件,您可以将导入图像的轮廓创建为插值曲线,然后将其转化为模型几何的一部分。这篇博客,我们将演示如何使用这项功能。

“图像到曲线”插件简介

下图显示了根据一张用黑色标记线绘制轮廓的照片创建扫掠网格的不同步骤。在这个示例中,3D 模型是通过拉伸 2D 几何图形创建的 。

COMSOL Multiphysics UI的屏幕截图,其中包含手绘的导入照片和叠加的轮廓图。

导入的照片(用智能手机拍摄),用黑色标记线画出了轮廓,并用绿色细线画出了叠加的轮廓线(绿色细线)。

导入手绘轮廓后的实体几何轮廓的屏幕截图。

删除了从图像转换模型几何的过程中产生的一些无关域后得到的实体几何轮廓。

该图像显示基于导入的照片的扫掠网格,如COMSOL Multiphysics UI中所示。

基于黑色标记线轮廓创建的扫掠网格。

启用“图像到曲线插件”

首先,选择模型开发器中的开发工具选项卡,单击插件库,然后从插件库启用“图像到曲线”插件。

外接程序库按钮的屏幕快照。

插件库按钮。

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

外接程序库窗口的屏幕截图。

插件库窗口。

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

开发工具选项卡的屏幕快照,其中包含图像到曲线加载项。

通过开发工具选项卡访问插件。

“图像到曲线”设置窗口

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

图像到曲线设置窗口的屏幕快照。

“图像到曲线”的设置窗口。

通过设置窗口顶部的工具栏在不同步骤之间导航。

图像到曲线加载项的工具栏按钮的屏幕快照。
“图像到曲线”插件的工具栏按钮。

“图像到曲线”插件的工具栏按钮包括:

  • 重置
    • 将所有值重置为出厂设置
  • 绘图
    • 渲染原始导入的图像,不包含任何过滤器
  • 过滤器
    • 使用 图像 栏中指定的 过滤器 渲染过滤的图像
  • 轮廓
    • 使用轮廓栏中的阈值设置绘制图像轮廓
  • 曲线
    • 2D几何序列或3D工作平面中创建插值曲线节点
    • 可以在 曲线 栏中调整曲线插值容差

“图像到曲线”插件的设置工具栏包括:

  • 图像
  • 轮廓
  • 曲线
  • 目标
  • 高级

下面将详细描述各栏的设置项。

图像栏

要导入图像,请在插件 设置 窗口的 图像 中单击 浏览 按钮,打开文件浏览器,可以在其中选择要导入的图像。

“图像到曲线插件的“图像”部分的屏幕快照。"
图像栏

导入的图像可以是一个物体的照片或一张图片,支持的格式为.png,.jpg,.jpeg,.bmp和.gif。 为了创建高质量的模型几何,导入的图像最好是浅色背景深色形状,或深色背景上浅色形状。导入图像时,彩色图像将被转换为灰度图像。
导入图像后,图像栏中将显示以像素为单位的图像尺寸(xy),以当前长度单位(由几何节点确定)表示的图像宽度,文件名和用于处理图像的 过滤器 等信息。

通过更改图像宽度值,可以调整最终几何结构的尺寸。后续也可以通过在几何序列中添加比例特征节点来更改此设置。过滤器选项包括一些模糊过滤器和锐化过滤器,如下图所示。

图像到曲线插件的过滤器设置的屏幕快照。
过滤器设置

使用这些过滤器可减少导入图像中的噪点(模糊)或增强边缘(锐化),更改过滤器将更改从图像提取的曲线的形状,默认值为 高斯模糊 过滤器。如果有必要,请在导入之前使用专用的图像处理软件进一步处理图像。单击工具栏中的 绘图过滤器 按钮分别渲染原始图像或过滤后的图像。

轮廓栏

默认情况下,轮廓曲线会被自动放置在相对于过滤之后的图像中像素强度级别接近于平均阈值的位置。 如果需要手动控制轮廓阈值,请清除自动轮廓阈值复选框。

“要弯曲的图像”加载项的“轮廓”部分的屏幕快照。
轮廓栏

单击工具栏中的 轮廓 按钮,将轮廓曲线和图像可视化,下图为一个导入的工字梁轮廓图。

该图显示了导入到COMSOL®中的工字梁图像的轮廓。
工字梁图像的图像轮廓(绿色)。

如要检查像素值,请在“图像到曲线:图组中,选择表面节点,然后单击图形窗口。像素值和坐标将显示在一个二维计算表格中,如下图所示。

该图像显示具有显示的像素值的I型光束。
表格中显示了包含像素灰度值的工字梁图像。

曲线栏

单击工具栏中的曲线按钮,以2D几何序列或3D工作平面生成插值曲线节点。默认情况下,曲线类型设置为开放,但是可以将其更改为闭合或实体。曲线容差设置确定了曲线应该与轮廓曲线接近的程度。
图像到曲线插件的曲线部分的屏幕快照。
曲线栏

下图显示了一个工字梁示例,曲线 类型使用 实体曲线容差 为 0.0。

工字梁的2D实体几何的屏幕截图。
从工字梁图像转换为图像轮廓的2D实体几何。

目标栏

在目标栏中,可以指定应该为其创建插值曲线节点的几何序列。可以指定模型组件,对于 3D 几何,还可以指定 工作平面

图像到曲线插件的目标栏的屏幕快照。
目标栏

高级栏

高级 栏,可以更改用于可视化图像的插值方法,在 线性最近邻 插值之间选择。逐像素细化 设置用于确定表示图像每个像素的网格单元数:小于1.0的值表示用于表征图像的网格插值点数少于图像中的像素数,大于 1.0 的值表示网格将对图像进行过采样。
“图像到曲线”加载项的“高级”部分的屏幕快照。
高级栏

显示 x 和 y 度量复选框可控制是否显示轮廓曲线的尺寸。

屏幕截图显示了轮廓曲线的标注尺寸。
轮廓线尺寸的标注。

寻求帮助

如您需要查看与插件相关的动态帮助,请单击模型树中的图像到曲线节点,然后单击COMSOL Desktop®用户界面右上角的问号图标(与获取其他设置窗口的文档一样)。

如何将图像转换为几何模型的示例

您可以下载以下示例模​​型和上文展示的图像。

示例模型文件image_to_curve_h_beam.mph包含一个具有分布式载荷的简单结构分析,如下图所示。

显示如何将图像转换为几何模型的示例。
基于图像几何拉伸形成的 H 型梁的分布式载荷。

屏幕快照显示von Mises在H型钢中的应力。
H型梁中的von Mises应力。

示例模型文件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 安装访问这些文档。

]]>
//www.denkrieger.com/blogs/how-to-use-an-add-in-to-convert-images-to-geometry-models/feed/ 4
如何使用插件自定义模型开发器的工作流程 //www.denkrieger.com/blogs/how-to-customize-your-model-builder-workflow-using-add-ins //www.denkrieger.com/blogs/how-to-customize-your-model-builder-workflow-using-add-ins#respond Fri, 03 Jan 2020 05:43:10 +0000 http://cn.staging.comsol.com/blogs?p=290841 插件或插件程序是对 COMSOL Multiphysics 软件中的用户自定义功能的扩展,即用户可以创建和打包自定义功能。通过使用插件自动执行常见的仿真任务,可以降低仿真错误,提高仿真效率。用户可以使用 App 开发器中强大的用户界面和编程工具创建插件。

编者注:本博客更新于 2024 年 7 月 22 日,以反映 COMSOL Multiphysics® 软件 6.2 版本的新特征和新功能。

设置表单和方法调用

插件由三部分组成:方法、表单和功能区选项卡,这三部分都是通过 App 开发器创建的。在早期版本的 COMSOL® 软件中,方法编辑器只包含创建仿真 App 的功能,但经过最近几次版本更新后,新版本软件中的方法编辑器也可以创建插件,即使用方法和表单创建插件。这样就能创建从用户自定义界面访问的用户自定义功能,从而增强模型开发器中的建模工作流程。接下来让我们简要回顾一下什么是方法和表单,先从方法开始。

方法是用户在 App 开发器中使用方法编辑器创建的基于 Java® 编程语言的程序。通过这些程序,用户能够创建执行复杂操作的自定义功能,例如结果评估和可视化。若想要学习如何使用方法,用户不必阅读用户手册,只需在用户界面上单击 录制代码,然后在模型开发器中执行想要的操作,最后停止录制,并修改自动生成的编程代码。

COMSOL Multiphysics 中 App 开发器的方法编辑器的截图。
方法编辑器可用于编写模型开发器树节点的标准用法中未涵盖的操作。

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

 App 开发器中的表单编辑器的截图。
表单编辑器可用于创建包含表单和表单对象(如输入框、按钮和组合框)的用户界面。

在这些精选的博客中了解更多有关创建方法、表单和仿真 App 的内容。

早期版本的 COMSOL Multiphysics® 不允许用户在会话之间或不同用户之间重复使用模型开发器中使用的方法和表单。当然,这样的需求可以通过创建一个仿真 App来实现。现在,在新版本的软件中用户可以创建插件、方法集合、表单和功能区选项卡,并将它们存储在一个插件库中,以便在新的仿真会话中重复使用。COMSOL Multiphysics 还提供了一些内置的插件库。对于内置的插件,您可以通过查看其 App 开发器的设置,包括表单、方法和功能区选项卡,来快速了解如何创建自己的插件。接下来,让我们来看看如何基于方法和设置表单创建插件。

在 COMSOL Multiphysics® 中创建插件

创建插件与创建仿真 App 类似,但有一些区别。插件没有自己的 图形 窗口,而是使用模型开发器中的主 图形 窗口。对于任何类型的模型,插件都应该能够正常工作或者能给出受控的错误信息。要创建一个插件,您可以从在 App 开发器中创建表单开始,然后单击功能区中的 插件定义 来创建插件,如下图所示。

插件定义按钮的截图
功能区中的 插件定义 按钮。

右键单击 App 树中的 插件定义 节点,然后选择 表单定义

App 开发器的特写视图,显示了插件定义按钮下的表单定义被选中。
为插件创建表单定义。

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

表单定义的设置窗口的截图,描述框的内容已展开
表单定义 的设置窗口

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

插件定义设置窗口的截图
插件定义 的设置窗口。

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

要创建插件(一种特殊类型的MPH 文件),请单击 创建插件 按钮。

创建插件按钮的截图
创建插件 按钮。

插件库和插件的使用

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

插件库按钮的屏幕截图
插件库 按钮。

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

插件库的特写视图,图中显示已选中了colored_selections,image_to_curve 和 planar_cut selected。
插件库 窗口。

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

从开发工具选项卡选择插件后的屏幕截图
开发工具 选项卡访问插件。

下图显示了一个内置插件的 设置表单

模型开发器的特写视图,突出显示了图像到曲线插件的设置窗口,并在设置窗口中展开显示了 Image 和 Contour 的部分。
图像到曲线 插件的设置窗口。

如果您需要查看和编辑某个内置插件的 App 开发器设置,可以打开相应的 MPH 文件。在 Windows® 系统的安装文件中,内置插件库位于:

C:\Program Files\COMSOL\COMSOL62\Multiphysics\addins.

单击 插件库 窗口底部的 添加用户插件库 按钮,即可浏览用户定义的插件库。

添加用户插件库按钮的屏幕截图
添加用户插件库 按钮。

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

用户定义的插件库的屏幕截图
用户定义的插件库。

创建和编辑插件的工作流程

在创建和编辑插件时,您会发现同时打开两个 COMSOL Multiphysics 会话非常有用:

  1. 一个会话用于显示原始插件的 MPH-文件,在这个会话中您主要在App开发器中工作
  2. 另一个会话用于在模型开发器中测试插件

在使用模型开发器测试插件时,请确保测试多种模型,包括不同空间维度的模型以及包含多个模型组件的模型。使用 刷新插件 按钮可以确保您使用的插件始终是最新版本。

刷新插件按钮的截图
刷新插件。

仿真 App 和插件之间的一些区别

仿真 App 和插件之间有许多相似之处,但也有一些重要的区别,下表对二者之间的差别进行了总结。

条目 仿真 App 插件
目标对象 任何人 仿真专家
开发工作 简单(适用于简单的 App) 更详细
模型 嵌入式模型 任意用户定义的模型
图形 多个图形窗口 COMSOL Desktop® 图形窗口
可与…一起使用 已编译的独立仿真 App, COMSOL Server™, COMSOL Multiphysics COMSOL Multiphysics

仿真 App 通常是围绕一个您可以完全控制的嵌入式模型构建的,而插件则需要适用于用户提出的任何模型和仿真场景。因此,创建插件通常比创建仿真 App 需要更多的工作。当然,这也取决于所处理的仿真任务的复杂程度。

例如,一个插件的维护需要检查诸如以下这些项目:

  • 是否有多个模型组件
  • 当前组件的空间维度:0D、1D、 2D 或 3D
  • 某些项是否为空
  • 名称是否唯一,以避免命名冲突

内置插件库中的示例也说明了这一点。

内置插件库

软件内置的插件库提供了多个插件示例,您可以从这些示例开始,快速学习如何创建自己的插件。这些示例演示了如何创建包含自定义方法、设置表单和功能区选项卡的插件。如果您想要查看和编辑内置插件的设置,可以打开相应的 MPH 文件,在 Windows® 安装系统中,该文件位于:C:\Program Files\COMSOL\COMSOL62\Multiphysics\addins.

一个平面切割插件的屏幕截图
一个使用了内置的平面切割插件的模型。

在模型开发器中使用了内置的图像到曲线插件的屏幕截图
一个使用了内置的图像到曲线插件的模型。

您可以查看 App 开发器简介 文档 ,了解有关创建插件的更多信息。
 

Microsoft 和 Windows 是微软公司在美国和/或其他国家的注册商标或商标。
Oracle 和 Java 是 Oracle 和/或其关联公司的注册商标。

]]>
//www.denkrieger.com/blogs/how-to-customize-your-model-builder-workflow-using-add-ins/feed/ 0
递归和递归定义的几何对象 //www.denkrieger.com/blogs/recursion-and-recursively-defined-geometry-objects //www.denkrieger.com/blogs/recursion-and-recursively-defined-geometry-objects#respond Wed, 17 Jul 2019 03:40:07 +0000 http://cn.staging.comsol.com/blogs?p=309411 递归定义的几何结构在工程应用中可能很有用,比如宽带天线和超材料。关于一些应用的简要概述,请查看之前一篇关于分形的博客。本篇博客,我们将看看如何通过算法快速生成这种几何对象。

使用方法和 App 开发器创建递归定义的几何对象

我们可以使用 App 开发器中的方法编辑器创建可以执行几乎任何类型的建模任务的方法,包括几何建模。我们很容易忽略这样一个事实,那就是方法可以通过在递归循环中调用自身的方法来支持递归。

本文,我们将通过两个著名的递归结构的例子来演示递归:二维的 Sierpinski 地毯和三维的Menger 海绵。这些例子的代码很短,因此我们可以完整地将它们列出,并且在文末有下载这些示例子的链接。

Sierpinski 地毯

下图中显示的方法,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 方法设置的屏幕截图。

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

输入参数在方法的设置 窗口中被定义,如下所示。

显示carpet_method的输入参数列表的屏幕截图。

下图所示是方法地毯 的代码:

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);
      }
    }
  }
}

为了获得方形对象的连续编号,使用整数变量计数器(位于声明下),如下所示。

屏幕截图显示了整数变量计数器的设置窗口。

上述两个函数的代码在方法编辑器中并排显示如下:

COMSOL Multiphysics® 中方法编辑器的屏幕截图,显示并排的代码。

为了运行 create_carpet,首先将其添加为方法调用。相应的菜单按钮在开发工具 选项卡中可用。

屏幕截图显示了如何通过方法调用按钮运行 create_carpet 方法。

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

屏幕截图显示了如何在调用方法时更改递归层的。

下图显示了设置递归层为3时得到的地毯的最终几何图形。

3 层 Sierpinski 地毯的几何图形。

请注意,为第 3 层地毯定义的方形几何对象数为 512。第 N 层地毯的几何对象数为 8N。这意味着,使用 create_carpet 方法设置的最大层数 5 ,生成的几何图形有 32,768 个几何对象!如果你想尝试 5 层地毯,请确保你的计算机足够强大!

Menger海绵

前面我们已经讨论了二维递归定义的几何对象,那么三维对象呢?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 层海绵的最终几何形状。

COMSOL Multiphysics®中递归定义几何对象的图像。

使用这种方法创建的几何对象的数量随着层数 N 增加为 20N,上面显示的 2 层海绵有 400 个块几何对象。

根据关于创建 Koch 雪花的迭代方法的这篇博客,我们也不可以不是使用递归来创建这种类型的结构。

如果你有任何用于附加的 CAD 功能的附加产品,都可以将这些几何对象导出为标准的 CAD 格式。如果没有附加产品,也可以将网格几何导出为任何支持的网格格式,例如 STL。

下一步

单击下面的按钮进入 COMSOL 案例库,尝试使用本文中介绍的模型。

]]>
//www.denkrieger.com/blogs/recursion-and-recursively-defined-geometry-objects/feed/ 0
如何使用导线、表面和固体创建静电模型 //www.denkrieger.com/blogs/how-to-create-electrostatics-models-with-wires-surfaces-and-solids //www.denkrieger.com/blogs/how-to-create-electrostatics-models-with-wires-surfaces-and-solids#respond Tue, 08 Aug 2017 03:23:24 +0000 http://cn.staging.comsol.com/blogs?p=230481 COMSOL 软件最新版本中的附加产品 —— AC/DC 模块可以创建将导线、表面和实体结合的静电模型。这一技术被称为边界元法,它可以单独使用,也可以与基于有限元法的模型结合使用。在本篇博客中,我们介绍了如何使用新功能方便地建立一个包括许多极细螺旋线的模型。

COMSOL Multiphysics® 软件中基于边界元法的接口

边界元法(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 发布亮点

COMSOL Multiphysics® 中空气材料属性的设置窗口
设置空气材料属性。

在使用边界元方法时,为了模拟无限区域,必须以这种方式选择无限空域。如果使用有限元法对此模型进行模拟,那么我们需要将几何模型封装在有限大小的盒子(或其他形状)中。为了提高计算的准确性,我们还需要在盒子周围添加具有无限空域的额外层。

施加边界条件

首先,需要在两种维度上设置边界条件:面边界和线边界。下图显示了指定给接地板的接地边界条件。

接地边界条件,通常用于静电模型。
“接地”边界条件的设置。

然后为导线指定条件。这些导线被指定为终端的线边界条件,其终端类型为电压,电压值为 50kV。此外,如下图所示,边半径 被设置为 1mm。

GUI 中终端边缘条件的“设置”窗口截图
“终端”边条件的设置。

接下来,我们将介绍如何在物理方面而不是在 CAD 方面将导线的半径输入到模型中。导线的 CAD 模型由参数化曲线组成,这些曲线没有径向范围,但从数学上来讲属于一维对象。这种模拟方法显示了边界元法的主要优势。如果模型已经建立了基于有限元的静电接口,则必须将导线模拟为有限尺寸半径的细螺旋管,从而生成包含许多单元的网格。尽管这可能实现,但通过边界元法更容易实现。

边界元法的求解器

有限元法生成大型的稀疏矩阵,而边界元法生成大型的填充矩阵。这就需要专门求解这种问题的求解器。实际上,边界元法生成的系统矩阵非常繁琐,以至于甚至无法完全形成,而只能生成当前求解器所需的矩阵部分。更具体地说,仅执行当前所需的矩阵向量乘法。在 COMSOL Multiphysics 中实现的用于快速矩阵向量乘法的方法称为自适应交叉逼近方法,当我们使用边界元法接口之一时会自动使用该方法。如果您有兴趣,可以阅读COMSOL 5.3 版本的相关求解器选项的更多信息。

一方面,与有限元法相比,边界元法需要更少的自由度就能产生准确的结果;另一方面,边界元法对计算的要求更高。因此最终通过在计算需求与准确性方面对两种方法进行对比和取舍。

后处理和可视化

对于基于有限元方法建立的模型,通过体积有限元网格,使用切面图、等值面图、箭头图、流线等可以使建模体积中的计算场可视化。使用边界元法时,没有可用的体积网格,因此为了使空间变化的场可视化,使用规则栅格作为替代。规则栅格被定义为三维栅格数据集,可以让我们定义一个矩形框,其矩形范围在 xyz 轴方向上具有最大值和最小值。另外,x-y-z- 分辨率的设置对应于单元大小,并决定了可视化的粒度。在下图中,分辨率被设置为 100x 200x 200,对应于 4,000,000 个六面体网格单元。

设置“三维栅格”数据集设置的屏幕截图
设置“三维栅格”数据集

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

显示了如何在COMSOLMultiphysics® 中关闭自动绘图更新设置
“结果”节点设置当中的自动更新绘图复选框。

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

静电沉淀过滤器模型的电势场的模拟结果。
静电沉淀过滤器示例中的电势场仿真结果。

具有多种介电材料的模型

边界元法的局限性是要求每个模拟域都必须具有恒定的且各向同性的材料属性。在静电的情况下,每个域必须具有恒定的介电常数。我们可以创建具有不同介电常数值的多个域的模型。下图显示了具有两个介电常数值的MEMS电容器模型:

  1. 外部无限空域的空气
  2. 两个电极板之间的介电材料

为了能够模拟这种类型的模型,每个不同的介电域都需要在 静电,边界元 接口添加自己的电荷守恒 节点。在每个电荷守恒 域或一组域中,介电常数是一个常数。就像基于有限元的模型一样,使用预定义的变量在 派生值 下计算该类型设备的电容。

模型开发器中的具有多个介电常数值的 MEMS 电容器模型。
具有多个介电常数值的 MEMS 电容器模型示例。

有限元与边界元耦合建模

COMSOL Multiphysics 5.3 版本带有预定义的多物理场耦合功能,该功能可以耦合基于有限元和边界元的静电场。下图为另一种版本的 MEMS 电容器模型,其中介电材料被各向异性压电材料(PZT-5H)代替。由于静电,边界元接口不允许模拟各向异性材料,因此该区域使用了传统的基于有限元的静电接口。

此外,本文还使用基于有限元的接口对电容器周围的小盒子进行了建模。在此示例中,静电,边界元接口仅在外部无限空域中有效。有限元区域和边界元区域之间的耦合通过多物理场节点下的边界电势耦合来定义。

高亮截图显示了有限元和边界元方法的静电场耦合。
基于有限元和边界元方法的静电场耦合设置。

下图显示了在有限元和边界元区域中均可视化的电势。在有限元和边界元域之间的交界处可以看到一些由于插值引起的数值伪影。对于三维栅格 数据集,使用更细的网格进行计算并使用更高的分辨率进行可视化时,这类伪影将消失。

A plot of the electric potential field for the MEMS capacitor, an electrostatics model example.
MEMS 电容器模型的电势场示例。

动手尝试

您可以通过单击下面的按钮,下载本博客中重点介绍的示例模型。

COMSOL 案例库中提供了其他两个基于边界元法建模的静电学模型教程:

  1. 具有单个电介质域的 MEMS 电容器
  2. 电容式位置传感器

“电容式位置传感器”模型教程演示了如何结合使用静电,边界元接口和变形几何接口模拟大的几何位移。此外,该模型还演示了如何使用 COMSOL Multiphysics 5.3 版本中新增的加速电容矩阵计算选项稳态源扫描稳态源扫描研究类型也可以与基于有限元的静电接口同时使用。

]]>
//www.denkrieger.com/blogs/how-to-create-electrostatics-models-with-wires-surfaces-and-solids/feed/ 0
模型求解完成后如何自动导出图像 //www.denkrieger.com/blogs/how-to-export-images-automatically-after-solving-your-model //www.denkrieger.com/blogs/how-to-export-images-automatically-after-solving-your-model#respond Tue, 11 Jul 2017 02:05:06 +0000 http://cn.staging.comsol.com/blogs?p=230011 上一篇博客中,我们探讨了如何在研究 节点下设置一系列程序化操作,用于求解模型、将模型保存到文件,以及将数据导出到文件。这篇博客,我们将在此基础上展示在 COMSOL Multiphysics® 软件中求解模型后,如何自动导出完整的图像序列。

示例:微混合器模型

为了展示这个功能,与之前的博客一样,我们首先从案例库中加载微混合器教程模型。该模型位于文件夹 COMSOL Multiphysics > 流体动力学中,演示了层流静态混合器中的流体流动和质量传输。

“案例库”中的微混合器模型。

该模型使用 层流 接口模拟流体流动。然后,将流体流动仿真结果作为输入,演示了如何使用 稀物质传递 接口计算混合效率。这些物质的种类将根据流体速度向下游输送。

该模型的计算时间仅为几分钟。在上一篇博客中,我们通过不求解 稀物质传递 部分来加快计算速度。本文,我们需要计算整个混合器的浓度曲线。为了能更快地运行计算,我们可以将预定义单元大小 设置为超粗化

微混合器模型的单元大小设置,可以加快计算时间。

在这个示例中,粗化网格的步骤是可选的,即使不选择更改网格大小,后面也可以正常求解。

现在,让我们看看如何使用参数化切面图和动画导出一系列图像,其中每个图像对应一个切面。

使用参数定位切面图

下图是模型库中已经求解的示例模型在 x 方向上 5 个不同 yz 平面的浓度切面默认图:

在 COMSOL Multiphysics® GUI 中求解的微混合器模型。

如下图所示,将质量分辨率设置为超细化,可以得到稍微清晰的视化图。

设置微混合器模型的质量的分辨率,可以增强图形的可视化效果。

我们可以将 平面数据 定义方法更改为 坐标,而不是 浓度切面 图中默认的 5 个均匀间隔的切面。例如,通过下图所示的设置可以生成x 坐标在 0.5mm 的单个切面。

A screenshot showing how to generate a single slice of plane data in COMSOL Multiphysics®.

结果如下图所示:

在“图形”窗口中显示一张平面数据切片的图像。

我们可以通过参数来参数化切面的位置。右键单击 结果 节点,然后选择 参数

在结果节点下的参数选择。

定义一个参数 xcut 值为 -3.5[mm]。(微通道在 x 轴上的 -3.5mm~8 mm 范围变化。)

如何在 COMSOL Multiphysics® 中定义一个参数。

平面数据 部分,在 x 坐标的编辑框中输入 xcut,设置 切面 绘图。

如何为平面数据特征添加一个参数。

上述设置对应的切面图如下:

使用一个参数集放置切面图。

使用动画导出图像序列

如果要导出与不同切面位置的值对应的一系列图像,可以使用一个基于文件导出的动画来实现。

如下图所示,可以从功能区工具栏的 动画 菜单中选择 文件 生成动画。

如何由仿真结果生成动画。

或者,可以右键单击结果 下的导出 节点,然后选择动画 > 文件

如何导出由仿真结果生成的动画。

在模型树 动画 节点的设置窗口中,选择 图像序列 作为 输出 类型。

在模型树中动画节点的设置窗口中,选择图像序列作为输出类型

输入文件名 ,如 C\ COMSOL \ my_image.png,前提是系统中有一个文件夹 C\ COMSOL,但也可以输入任何具有书写许可权的文件夹。

如何为一个图像序列设置文件名。

为了将导出的文件链接到参数 xcut,将 序列 类型更改为 结果参数。这可以在 动画编辑 部分中设置。

如何将导出的文件链接到一个已定义的参数。

选择 xcut 作为 参数,将 起始值 设置为 -3.5停止值 设置为 8,并将 单位 设置为 mm

参数设置、起始值和停止值设置,以及将单位设置为 mm 的选项。

动画 的设置窗口顶部,单击导出 开始生成图像。图像将获得与序列号相对应的后缀。在 部分设置帧数或图像数。

动画设置窗口的帧设置。

这样就会生成一系列名称为:my_image01.png,my_image02.png,…,my_image25.png 的图像,如下图所示。

使用动画生成的一系列图像的文件夹。

求解模型后自动导出

现在,我们来看一下在 COMSOL Multiphysics 中求解模型后如何自动生成图像。

为了在研究节点定义一些列操作,我们可以启用高级研究选项。该选项位于模型开发器工具栏的菜单选项,单击“眼睛”符号可以查看菜单。

如何在模型开发器窗口启用高级研究选项。

在出现的 作业配置 节点下,选择 序列。我们在 关于如何使用作业配置的博客中 对此过程进行过描述。

在作业配置节点选择序列。

求解方案 的设置窗口中,选择 全部,确保所有研究步骤都在运行。

在作业配置中运行所有的研究步骤的设置。

右键单击 序列,然后选择 结果 > 导出到文件

序列节点下的导出文件选项。

导出到文件 设置窗口,运行 选项选择 动画1。在这个简单的示例中,输出 下仅有一个节点。我们也可以保留默认选项 全部

导出到文件设置窗口。

要使用 序列 求解,请右键单击并选择 运行。或者,单击设置窗口顶部的 运行 按钮。

求解模型后使用自动导出图像的设置窗口。

使用截面导出二维图像

上文我们使用导出操作生成了一系列三维图像。如果要为每个切面生成一系列二维图像该怎么操作?这可以使用参数化的 截面 来实现。

右键单击 数据集 节点,然后选择 截面

数据集节点下的截面特征。

截面 的设置窗口中,输入 Xcut 作为 X 坐标

截面的设置窗口。

已经存在的三维绘图组不能生成二维绘图,因此右键单击 结果 并选择 二维绘图组

结果节点下的二维绘图组。

二维绘图组 的设置窗口中,选 择截面1 作为 数据集

设置窗口的二维绘图组。

二维绘图组 下添加一个 表面 绘图节点,并将 表达式 更改为 c,对应于浓度。

表面绘图节点设置,高亮部分为更改后的表达式。

要整理绘图组列表,请将二维绘图组 的名称更改为 Cut Plane Concentration(截面浓度)

更改为切面浓度的二维绘图组名称

现在,转到模型树中的 动画 节点。在相应的设置窗口中,将目标 更改为 Cut Plane Concentration”。

如何在动画节点更改目标的设置。

单击 导出 生成二维图像序列,如下图中的文件浏览器视图所示:

文件夹浏览中的二维图像序列。

要使用 Windows® Explorer 获得此视图,请将视图更改为大图标

与之前的示例一样,现在我们可以继续运行作业序列 求解,就可以自动生成图像集并将其保存到文件中。

 
想自己动手尝试模拟文中的示例模型吗?请单击上方按钮获取 MPH 文件。

Microsoft 和 Windows 是 Microsoft Corporation 在美国和/或其他国家的注册商标或商标。

]]>
//www.denkrieger.com/blogs/how-to-export-images-automatically-after-solving-your-model/feed/ 0
在 COMSOL 中求解模型后,如何使用作业序列保存数据 //www.denkrieger.com/blogs/how-to-use-job-sequences-to-save-data-after-solving-your-model //www.denkrieger.com/blogs/how-to-use-job-sequences-to-save-data-after-solving-your-model#comments Wed, 21 Jun 2017 01:42:22 +0000 http://cn.staging.comsol.com/blogs?p=273431 COMSOL 软件中的 研究 节点有一项鲜为人知的功能:它能够执行一系列程序化操作,包括求解、保存模型到文件,以及生成和导出绘图组、结果和图像。今天这篇博文,我们将进一步研究这项功能。如果你正在使用 COMSOL Multiphysics® 软件,那么了解这项功能将对你的建模工作很有帮助。

示例: 微混合器模型

为了演示这项功能,我们将首先从应用程序库加载微混合器模型教程。这个模型可以在 COMSOL Multiphysics > 流体动力学文件夹中找到,它演示了层流静态混合器中的流体流动和质量传输。

COMSOL Multiphysics 中 App 库的屏幕截图,其中选择了微混合器教程

此模型使用层流 接口进行流体流动模拟。接下来的步骤中,模型演示了如何使用流体流动模拟的结果作为输入,通过 稀物质传递 接口计算混合效率。组分将根据流体的流速被输送到下游。

这个模型的计算时间是几分钟。为了简化模型以更快地运行计算,我们不求解物质传递。为了实现这一点,我们将对第二步研究步骤(步骤2: 稳态2)的设置窗口进行一次修改,清除“稀物质传递”复选框。

COMSOL Multiphysics 的屏幕截图,其中“稳态研究设置”窗口已打开

为了使模型运行得更快,我们可以对模型做一个额外的更改。将序列类型设置为物理场控制的网格,并把单元大小设置为极粗化

COMSOL Multiphysics 中模型开发器的裁剪屏幕截图,其中突出显示了网格节点

现在,我们可以计算研究1 来确保一切正常。所得绘图显示了沿混合器几何形状的几个切片上的速度大小。

The COMSOL software GUI with a micromixer model in the Graphics window.

使用作业序列保存数据

接下来,我们重点研究作业配置的一个重要部分: 序列 选项。

为了能够在 研究 节点下定义一系列操作,我们启用了高级研究选项。这是 模型开发器 工具栏下的一个可用菜单选项。点击“眼睛”符号就可以看到这个菜单。

显示在 COMSOL Multiphysics 中启用的高级研究选项的裁剪屏幕截图

启用这个设置会在模型树中显示隐藏的作业配置 节点。在传统的建模工作中,我们不需要担心这个节点。本质上它适合于存储用于修饰或说明解决方案流程运行顺序的低级信息。通常情况下,这是由一项研究的顶层间接控制的,不需要启用 高级研究 选项。

右键单击“作业配置”,选择“序列”。

右键单击作业配置节点后 COMSOL Multiphysics 的裁剪屏幕截图

接下来,右键单击序列,在运行 选项下面可以看到各种选项,这些选项可以作为运行序列时执行的有序操作序列添加:

  • 作业
  • 其他
  • 将模型保存到文件
  • 结果

作业 指的是要从此序列运行的另一个序列,而 可以运行在求解配置 节点中存在的 节点,该节点在 研究 树中可用。

其他 下,我们可以选择 外部类 选项来调用外部 Java® 类文件。在几何 选项下构建 几何 节点。例如,可以与参数扫描结合使用,生成具有不同几何参数的mph文件序列。另外,在 网格 选项构建 网格 节点。

选择将模型保存到文件 将求解后的模型保存到mph文件中。

结果 选项下,我们可以选择 绘图组 来运行全部或一组选定的绘图组。这对于求解后自动生成绘图组很有用。我们也不必手动单击所有的绘图组来生成相应的可视化效果。这里建议使用计算派生值 选项。该选项将在结果>派生值下评估节点。导出至文件 选项运行 输出 节点下任何进行数据导出的节点。

现在,让我们创建一个简单的序列。右键单击 序列 节点并选择

右键单击序列节点后 COMSOL Multiphysics 的屏幕截图。

一个序列中 节点的默认选项是运行所有解节点。常规 部分中的运行 选项允许我们指定应该计算哪些 数据结构。在求解器配置下,数据结构可以作为子节点与其他节点一起使用。可以通过括号内的短名称来识别它们,例如(sol1)和(sol2)。解数据结构是解的低级表示。

在本例中,我们可以为 数据结构保留默认的所有

COMSOL Multiphysics 的屏幕截图,其中打开了“解决方案设置”窗口

当求解完成后我们想保存文件时,可以右键单击 序列 节点并选择 将模型保存到文件

COMSOL Multiphysics 的屏幕截图,其中打开了将模型保存到文件设置窗口

设置 窗口中,我们可以看到许多选项,这些选项与保存一系列mph文件的功能有关,其中这些文件的参数被添加在文件名的末尾。这对于参数扫描(如批处理扫描)非常有用。但是,在这样一个简单的示例中,我们不需要这样做,所以我们将选项将参数添加到文件名 更改为。在这一阶段,我们还需要为具有写入权限的位置指定一个文件名。在此例中,文件名和路径为 C:\COMSOL\myfile.mph。

COMSOL Multiphysics 的屏幕截图,其中“序列设置”窗口已打开

要运行这些操作,请选择序列节点并单击运行

求解模型后,将数据写入文件

我们可以在 结果 > 派生值 > 全局计算 下面看到,从模型库开始已经定义了一个派生值。该变量被命名为S_outlet,是出口处的相对浓度方差。它被定义为组件>定义>变量下的一个变量。

COMSOL Multiphysics 的屏幕截图,其中“全局评估设置”窗口已打开

S_outlet 的值被发送到表1。通过更改表1设置 窗口中的设置,我们可以选择将这个值存储到文件中。将存储表 更改为 On 文件,并键入文件名;例如, C:\COMSOL\ my_data.txt。

COMSOL Multiphysics 的屏幕截图,其中“表设置”窗口已打开。

现在,向序列添加一个计算派生值 操作。

COMSOL Multiphysics 的屏幕截图,其中“评估派生值设置”窗口已打开

常规 部分中,我们可以将计算 设置更改为全局计算 1。但是,在本文这个简单的示例模型中,我们可以省略此步骤。注意,模型树中的节点名称更改为计算:全局计算1。

现在,我们可以再次运行该序列。然而,为了让最后一步有意义,我们需要在步骤2:稳态2 的设置窗口中启用稀物质传递 接口。

从命令行运行作业序列

如果我们希望在 Windows® 或 Linux® 操作系统或 macOS 中从命令行运行作业序列,就不能使用上面所示的方法,而是需要使用一个虚拟参数添加参数扫描。然而,如果我们已经运行了参数扫描,那么一个参数扫描就是一种特殊类型的作业序列,然后按照上面的指示,使用作业配置>参数扫描 节点替换作业配置 > 序列 节点。

这是由于软件的不断更新,使得 研究 节点功能不断改进。操作系统命令接口不允许我们运行任何不受顶层控制的 研究 节点下的内容。我们只能指定要运行哪个研究,例如,在 Linux® 操作系统中:

comsol batch-inputfile mymodel.mph——study std1

用 std1 标记进行研究1

我们不能以这种方式运行序列,因为顶层的研究步骤不知道我们在作业配置 节点下的编辑。要使研究节点树顶层的研究步骤“意识到”作业配置节点下的编辑,最简单的方法是添加一个参数扫描,其中包含在全局定义>参数下定义的任意参数。假设虚设 值为1。扫过此参数之后,增加额外的顶层需求来得到一个句柄以从研究 节点的顶层控制作业配置 节点。然后,您可以发出一个命令行批处理命令来运行它。

下图为相应的“虚设”扫描设置

COMSOL Multiphysics 的屏幕截图,其中“参数化扫描设置”窗口已打开

对于虚设参数,下图显示了相应的扫描参数值。

COMSOL Multiphysics 的屏幕截图,显示了虚拟参数的参数化扫描 1 设置

现在,我们知道参数扫描1 节点只是序列 节点的一种特殊类型,解1将模型保存到文件1计算:全局计算1 子节点就像上面使用的 序列 例子中一样。

通过从模型树节点文本 菜单中选择标记,可以在模型开发器 工具栏中显示模型树标记。

COMSOL Multiphysics 中模型开发器的裁剪屏幕截图,其中选择了标签选项

现在,研究标签 std1模型树中可见:

COMSOL Multiphysics 中模型树的屏幕截图放大了研究标签 std1

前面显示的 Linux® 命令现在将运行求解、将模型保存到文件并最终计算全局计算 节点的操作序列。注意,如果模型中只有一个 研究 节点,那么可以跳过输入参数研究 std1

请注意,如果我们的模型中已经有一个参数扫描,它可以是两种类型,可以不严格地称为“内部扫描”和“外部扫描”。在上面的例子中,使用 虚设 参数的扫描是“外部扫描”。研究节点将自动检测使用哪种类型的扫描以获得最佳性能,但如果需要,我们可以手动进行控制。为了从命令行使用作业序列,我们的清除需要的是“外部清除”。

或多或少,所有类型的扫描都可以从内部扫描变为外部扫描,但不能反过来。内部扫描可以更快,因为它们将使用一些计算的底层结构来加快速度。然而,并不是所有类型的清除都可以是内部清除。例如,对一个几何参数的扫描总是需要是外部扫描;同样,这是由求解器自动处理的。要确保参数扫描是外部扫描,请将参数扫描设置中的“使用参数求解器”更改为“关闭”,然后执行“显示默认求解器”操作,并从那里继续。

总结

在求解一个模型之后,作业序列可以用来自动化许多常见的任务。在这篇博文中,我们列举了以下例子:

  • 求解后将模型保存为 mph 文件
  • 求解后自动输出 派生值 至文档

还有其他使用作业序列的任务,我们可以自己尝试练习,包括:

  • 在求解后再生成所有的绘图
  • 导出数据到文件
  • 导出图像数据到文件

希望大家能够发现,作业序列对于我们的日常建模工作是一个非常有用的特性!

Oracle 和 Java 是 Oracle 和/或其附属公司的注册商标。微软和 Windows 是微软公司在美国和/或其他国家的注册商标或商标。Linux 是 Linus Torvald 在美国和其他国家的注册商标。macOS 是 Apple Inc. 的商标,在美国和其他国家注册。

]]>
//www.denkrieger.com/blogs/how-to-use-job-sequences-to-save-data-after-solving-your-model/feed/ 2
如何生成随机非均匀材料数据 //www.denkrieger.com/blogs/how-to-generate-randomized-inhomogeneous-material-data //www.denkrieger.com/blogs/how-to-generate-randomized-inhomogeneous-material-data#respond Tue, 20 Jun 2017 07:49:05 +0000 http://cn.staging.comsol.com/blogs?p=316401 使用 COMSOL Multiphysics® 软件中结果 节点下的工具,可以生成并可视化具有由谱密度分布决定的、指定统计属性的随机材料数据。这篇博客中,我们将介绍一些常见的例子,它们在许多领域都有潜在的应用,包括热传导、结构力学、地下水流等。

合成随机非均匀材料数据

我们已在博客“如何在 COMSOL Multiphysics® 中生成随机曲面”中讨论过如何通过将 sumif 运算符与均匀分布和高斯随机分布函数相结合来生成外观随机的几何表面。我们的思路是,通过仔细选择振幅和相位角,对一组空间变化的波进行求和,可以模仿自然材料和许多自然现象中经常发现的随机类型。

为了生成二维的合成材料数据,我们可以使用上一篇博客中用来创建随机 CAD 表面数据的双重求和表达式。

f(x,y)=\sum_{k=-K}^{K} \sum_{l=-L}^{L} a(k,l) cos(2 \pi(kx+ly)+\phi(k,l))

请注意,这个求和也可以用来生成随机数据,用于三维模型中表面的边界条件。

对于三维模型,我们需要三重求和:

f(x,y,z)=\sum_{k=-K}^{K}\sum_{l=-L}^{L}\sum_{m=-M}^{M}a(k,l,m) cos(2 \pi(kx+ly+mz)+\phi(k,l,m))

对于二维和三维模型,与频率相关的振幅将将分别根据下列等式

a(k,l) = g(k,l) h(k,l)=\frac
{g(k,l)}{\vert k^2+l^2\vert^{\beta}}=\frac{g(k,l)}
{(k^2+l^2)^{\frac
{\beta}{2}}}

a(k,l,m) = g(k,l,m) h(k,l,m)=\frac{g(k,l,m)}{\vert k^2+l^2+m^2 \vert^{\beta}}=\frac{g(k,l,m)}{(k^2+l^2+m^2)^{\frac{\beta} {2}}}

从一个随机分布中取值。

函数 g(k,l)g(k,l,m) 具有随机高斯或正态分布,h(k,l)h(k,l,m) 是与频率有关的振幅函数,其值根据频谱指数 β 在较高频率下逐渐变小,频谱指数的值越高,生成的数据就越平滑。由于各种原因,许多自然过程具有这种特性,其特点是较慢的变化比快速的变化更多。

相位角 φ 从函数 u 中取样,该函数在  之间具有均匀的随机分布:φ(k,l) = u(k,l) 和 φ(k,l,m) = u(k,l,m)

在一组离散的频率上进行求和。求和中更多的非零项意味着有更多的高频贡献,从而使数据包含更多的细节。每个方向上的最大频率分别由整数 KLM 决定。这些类型的求和与离散反余弦变换密切相关。它们基本上对应于振幅系数 g(k,l)g(k,l,m) 的反余弦变换,并对相位角做了一些额外的处理。详见之前的博客文章:如何在 COMSOL Multiphysics 中生成随机曲面。

双重和三重求和的表达式

在 COMSOL Multiphysics 中,可以在各种编辑字段中输入以下双重求和表达式,例如二维材料属性或三维边界条件。

0.01*sum(sum(if((k!=0)||(l!=0),((k^2+l^2)^(-b/2))*g1(k,l)*cos(2*pi*(k*s1+l*s2)+u1(k,l)),0),k,-N,N) ,l,-N,N)

也可以用类似的表达方式来表达三重求和,用于三维材料数据、载荷、源和汇:

0.01*sum(sum(sum(if((k!=0)||(l!=0)||(m!=0),((k^2+l^2+m^2)^(-b/2))*g1(k,l,m)*cos(2*pi*(k*x+l*y+m*z)+u1(k,l,m)),0),k,-N,N),l,-N,N),m,-N,N)

这里,我们设定 K=L=M=N

关于这里使用的基础理论和语法的更多细节,请参见上面提到的博客文章。

处理包含三重求和的模型的计算代价相当高。更有效的做法是比如在一个单独的模型中,首先生成数据并将其导出到文件,然后作为插值函数再次导入。然后,这个插值函数可以以各种方式使用,我们将在后面对此进行解释。另外,还可以使用外部软件通过反 FFT 的方式来生成数据。

现在,让我们来看看如何生成三维材料数据。

在 COMSOL Multiphysics® 中生成一个随机插值表

创建一个随机数据的三维体积矩阵出乎意料的简单。它相当于创建几个随机函数、一些参数、一个网格数据集和一个导出节点。

首先,为振幅创建一个具有 3 个输入参数的随机函数,该函数基于正态分布或高斯分布。这对应于上述数学描述中的函数 g(k,l,m)。在这个案例中,我们任意使用随机函数的默认设置,将平均值设为 0,标准差设为 1。

COMSOL Multiphysics 中设置高斯随机分布函数的屏幕截图。

接下来,我们根据上述在  之间均匀分布的函数 u(k,l,m),为相位角创建一个具有 3 个输入参数的随机函数,并与之对应。

COMSOL Multiphysics 中设置均匀分布的函数的屏幕截图。

现在,创建一个三维栅格 类型的数据集,引用随机函数作为源。我们需要这个数据集给三重求和表达式提供一个评估环境,这个表达式我们稍后将在导出 节点中定义。

在 COMSOL Multiphysics 中设置三维格栅的屏幕截图。

我们将使用两个结果参数,N 和 b,分别用于空间频率分辨率和光谱指数。

在COMSOL Multiphysics中参数设置的屏幕截图。

为了更容易处理生成的大数据集,可以关闭自动更新图的选项。这个设置在结果 节点的设置窗口中可用。关闭它可以避免在每次点击结果 下的绘图组时重新计算表达式。

COMSOL Multiphysics 用户界面中显示了自动更新绘图选项的屏幕截图

要在导出文件之前实现数据的可视化,可以添加一个切面图并输入(或粘贴)表达式:

0.01*sum(sum(sum(if((k!=0)||(l!=0)||(m!=0),((k^2+l^2+m^2)^(-b/2))*g1(k,l,m)*cos(2*pi*(k*x+l*y+m*z)+u1(k,l,m)),0),k,-N,N),l,-N,N),m,-N,N)

COMSOL Multiphysics GUI的截图,包含图形窗口中的切面图。

为了导出数据,在导出 下添加一个数据 节点,并键入与上述切面 图相同的表达式。在 数据 节点的设置窗口中,确保将数据集设置为三维格栅,并指定数据将被写入的文件名。在这里,我们可以让这些点以独立于网格三维数据集的方式进行评估。

对于要计算的点 节点的设置,选择规则格栅。对于数据格式,选择格栅。可以自由选择要计算的 xyz 点的数量。在下图中,这些点都被设置为 50。注意,对应于高于 50 的数据生成可能需要很长的时间。对于一个 50x50x50 的网格,我们已经得到了 125,000 个数据点。

屏幕截图显示了COMSOL Multiphysics中的数据设置。

生成并导出的文本文件现在可以导入到一个新的文件中,目的是设置物理场分析,并在材料属性中使用生成的数据。这可以用于任何类型的物理场,包括电磁学、结构力学、声学、CFD、传热学和化学分析。例如,通过在方法或应用程序中使用 COMSOL® API,这种导出和导入操作可以自动化,并在 for-loop 背景下设置,以便在更大的样本集上生成统计数据。在这个例子中,我们只生成了一组数据。

在传热分析中使用生成的数据

为了说明如何使用这种类型的数据,我们基于传热分析创建了一个最简单的测试模型。

首先,使用固体传热 接口创建一个新的三维模型。

显示了 COMSOL Multiphysics 中三维示例模型的几何设置的幕截图。

然后,从文件中导入数据作为插值函数。这个函数将在全局定义 节点下可用。

显示了 COMSOL Multiphysics 中的函数设置的屏幕截图。

插值函数被命名为 cloud,以后可以用 cloud(x,y,z) 这样的表达式来访问。

为了便于单位处理,在使用这个插值函数时,我们将输入参数变元单位设置为 m函数单位 设置为 1。 该函数单位对应于 f(x,y,z)=cloud(x,y,z) 的单位,设置为 1 使其无量纲。

显示 COMSOL Multiphysics中插值、外推和单元设置的截图。

为了简单起见,让我们使用一个与导入的数据完全匹配的 几何对象,其角在原点,边在 1,与之前用于生成数据的三维格栅 数据集的大小和位置相对应。

显示块几何对象设置的 COMSOL 屏幕截图。

对于一个“真实的”案例,也可以导入或创建一个 CAD 几何体,它可以被用来以适当的方式截断插值函数。这种数据的截断在COMSOL Multiphysics 中是自动的。下图显示了在一个扳手的 CAD 模型上的随机数据的这种内插。当在一个任意的几何体上进行评估时,在三倍求和中对坐标值进行缩放可能是有用的。在扳手的例子中,不是像上面的表达式那样使用 k*x+l*y+m*z,而是使用缩放的表达式 k*(x/0.05)+l*(y/0.05)+m*(z/0.05)。

一个使用比例表达式的COMSOL扳手模型。

这类不规则材料数据可用于材料的统计建模,例如在增材制造中使用的那些材料,即 3D 打印部件完美的材料均匀性可能并不总是可能实现。这些数据可用于任何类型的材料特性,如传导性、渗透性和弹性,等等。

回到我们的单位立方体示例,现在我们添加一个空材料节点。随意地将密度设置为 2000 kg/m3,恒压热容设置为 1 J/kg/K。由于我们正在进行瞬态分析,热容量是不相关的。导热系数的表达式被设置为 1+2[W/m/K]*cloud(x,y,z)。我们可以从之前的可视化切面图中看到,插值表的数值大致在 -0.2~0.2。这意味着这个表达式将产生一个有趣的热导率值的空间分布,大约在 0.6~1.4。

COMSOL软件的截图,突出显示了热导率设置。

系数 2[W/m/K] 是用来为表达式分配一个一致的单位。常数1将被自动转换为正确的单位:[W/m/K]。

让我们定义一些简单的边界条件。设置顶面的温度为 393.15[K],底面的温度为 293.15[K],对应于 100K 的温差。

在 COMSOL 模型中定义简单边界条件的演示。

现在,我们来生成一些默认的网格。

在 COMSOL 模型中生成默认网格的说明。

COMSOL Multiphysics 将自动从导入的插值函数中向这个非结构化网格插值,比如材料属性的值。另外,我们可以用与原始数据相同大小的六面体单元生成一个扫面网格,即 50x50x50。这样的表示方法会更 “真实”地反映原始数据。

可以尝试使用不同的单元阶数,比如线性和二次元类型。除非使用一个非常细的网格来“过度采样”数据,否则结果将在一定程度上取决于单元顺序。

运行研究 将产生2个温度图,其中第二个是等值面 图。

在 COMSOL Multiphysics 中运行研究以生成温度图的一个示例。

注意到,等值面 图看起来有点像锯齿状,这是由于材料数据的不规则性造成的。我们可以创建另一个切面图,再次将数据可视化。这一次,我们根据热导率,通过使用变量 ht.kmean 来实现,它相当于前面定义的表达式 1+2[W/m/K]*cloud(x,y,z)。

创建的切面图用于可视化 COMSOL 模型数据的一个例子。

这里,数据的采样密度比原始插值函数低,因为我们使用了默认的网格,单元大小 设置为默认的正常 设置。连续细化这个非结构化的网格,最终将以与原始合成数据差不多的细节水平对数据进行采样。

如前所述,这里用于传热的方法几乎适用于任何其他类型的仿真。例如,在多孔介质流动仿真中,随机的数量是渗透率而不是导热系数。对于多孔介质流,可能需要一个更高级的随机分布,我们将在后面的博客中进行讨论。

二进制数据和渗流效应

我们还可以用另一种方式来使用合成的数据:通过使用布尔表达式将其转换为二进制数据。这种方法可用于模拟两种或多种材料,这些材料界面是随机的,材料特性从一点到另一点会突然发生变化。COMSOL Multiphysics 将自动处理这种情况下需要的尖锐插值。

下图显示了布尔表达式 cloud(x,y,z) > -0.03 的可视化图,该表达式在不等式为真的点上计算为 1,在其他点上计算为 0。

COMSOL Multiphysics 中某个布尔表达式的可视化

为了得到一个更漂亮的图,可以将切面图的分辨率设置为超细化。这个设置可以在切面 图设置窗口的质量 部分找到。

我们现在想在仿真中使用这种类型的二进制信息。例如,在传热仿真中使用它来观察所谓的渗流 效应可能很有趣。对于某些阈值,会在材料中得到一个大的连接分量,这样整个材料板块开始更有效地传导。

要尝试这一点,可以将导热系数的表达式改为 1-0.9[W/m/K]*(cloud(x,y,z)>thold),其中 thold 是一个全局参数。首先在全局定义 下的参数 中定义 thold

模型开发器的屏幕截图,突出显示了参数节点。

然后,相应地改变材料数据。

COMSOL GUI 中材料属性部分的屏幕截图。

对于空间内每一个点,导热系数 将会以二进制方式计算为 1 或者 0.1。这取决于不等式的值。

现在,让我们看看这个布尔阈值的不同值将如何影响仿真。为此,在参数 thold 从 -0.2 到 0.2 之间运行参数扫描。

COMSOL Multiphysics中参数扫描设置的屏幕截图。

派生值 下添加一个表面积分节点,对通过其中一个表面的总热通量进行积分。这将由 -ht.ntflux 或 +ht.ntflux 的表面积分给出,取决于是对顶面还是底面进行积分。在下图中,我们使用的是顶面。


屏幕截图显示了 COMSOL Multiphysics 中的表面积分设置。

产生的结果 图显示了热功率转移的量(以瓦特为单位)。可以看到,对于 0 左右的阈值,传导率从低值迅速上升到高值。这是由于突然出现了一个或多个大的连接部件,其表达式 1-0.9[W/m/K]*(cloud(x,y,z)>thold)被计算为1。

COMSOL Multiphysics 中的一个热功率转移示例模型的图表绘图。

下面的数字显示了在 0 左右的三个阈值下带有过滤器 属性的体积图。过滤器显示了 cloud(x,y,z)<thold 的域的部分,对应于较高的电导率位置。

我们可以从这些数字中看到高导电性的部分是如何开始连接较高的阈值的。

相应的过滤器设置如下图所示。

屏幕绘图显示了 COMSOL Multiphysics 中的过滤器设置。

类似的渗滤效应,在这里看到的是二进制数据,在前面显示的连续数据情况下也发生了。然而,当使用二进制数据时,其效果更容易看到。

点阵图的可视化

最后,让我们看看将这种类型的随机数据可视化的另一种方法。我们将使用大量的随机点(或者说,小球体)来可视化数据集,并让这些点的半径和颜色根据插值函数 cloud(x,y,z) 而变化。此外,我们将只允许 cloud(x,y,z) 的正值的点被可视化。这种技术使我们以一种用其他方法难以实现的方式 “看到数据内部”。请注意,这种可视化技术适用于任何类型的数据,包括真实的测量数据。

首先,生成三个均匀分布的随机变量,范围设置为 1,平均值设置为 0.5

屏幕绘图显示了 COMSOL Multiphysics 中的一个随机变量设置。

为了生成这种类型的绘图,我们使用散射体图类型。这可以通过右击三维绘图组 并选择更多绘图>散射体 来实现。

散射体图 的设置窗口中,分别设置 XYZ 分量的表达式:rn1(x)、rn2(x) 和 rn3(x)。在这里,我们以一种不寻常的方式使用 x 坐标,因为我们只是把它作为一个任意值的长矢量。

接下来,在计算点 部分,将 X 网格点的点数设置为 100,000;1,000,000 或更多,这取决于你的计算机能处理多少个点。这是一个获得长数值矢量的技巧,我们可以将其输入随机函数,以便在单位立方体中产生大量的随机点。

COMSOL 的灰阶随机材料数据绘图。

为了使绘图出现在上图中,进入半径部分,将表达式 设置为 cloud(rn1(x),rn2(x),rn3(x))半径比例因子 设置为 0.3。此外,在颜色部分,将表达式设置为cloud(rn1(x),rn2(x),rn3(x))颜色表 设置为 GrayScale。

关于这个图还有一个值得注意的事实:负值将被忽略。这有助于我们的可视化,因为生成的数据中大约有一半是负值,我们可以更容易地看透数据,对变化有一个直观的感觉。这种方法只对矩形块有效。如果要在一个任意的 CAD 几何体上生成这种类型的图,可以使用粒子追踪模块,它允许在任何类型的 CAD 模型内生成随机点。

点云图。

顺便说一下,在二维模型中,只需使用二重求和表达式创建一个二维表面图,就可以实现一个看起来类似的图,如上图所示。

]]>
//www.denkrieger.com/blogs/how-to-generate-randomized-inhomogeneous-material-data/feed/ 0