你有没有想过使用三维成像技术获得的数据创建网格?这篇文章,我们将讲解如何使用 COMSOL Multiphysics® 软件来实现这一目标,这个主题是对上一篇博客中讨论过的不规则形状模拟主题的扩展。今天我们将讨论的过程,一部分已经在为拓扑优化结果设置验证研究时使用过。这篇文章,我们将对此工作流程进行概括,以适用于通过三维成像技术获得的数据。
COMSOL Multiphysics® 支持导入不同格式的数据: txt 文件、Excel 文件、CSV 文件、图像、DEM 文件、MATLAB® 函数,以及用 C 语言编写的外部函数。扫描的数据通常以一组横截面图像的形式出现,比如接下来我们将要介绍的示例中的数据:人体股骨的一部分。这个模型中的某些数据来自 Visible Human 项目。但是,COMSOL Multiphysics 只支持导入一张图像生成二维数据。因此,在使用软件之前,通过以下步骤生成数据文件:手动挑选带有股骨上半部分的图像,手动识别包含一根股骨的像素以减少数据量。随后,将识别出的像素亮度,连同它在空间中的位置一起读取和写入一个 txt 文件。图像中的像素位置用 x 坐标和 y 坐标表示,图像编号用 z 坐标表示。这些数据适合使用电子表格的格式保存,因为每个像素都是从图像中读取并逐一写入 txt 文件的:
x1 y1 z1 data1
x2 y2 z2 data2
x3 y3 z3 data3
...
此外,还对这些数据进行了清理,以删除股骨以外的所有信息,并根据股骨的实际尺寸进行了调整。同时为了方便使用,还对数据进行了二值化处理。

用于创建网格的人类股骨的二值化数据的三个切面图。白色代表数据文件中的亮度值为 1,黑色代表亮度值为 0。
此模型的 MPH 文件可以点击文末链接下载,这里仅对需要采取的步骤做一个大致的描述。在这篇文章的最后,我们将给出两个包含周围域的人类股骨的网格,可用于进一步的计算。我们还将讨论如何添加其他计算域和划分表面网格,以便能够在网格上应用适当的边界条件。
首先,将数据导入软件的一个 插值 函数中,并将其命名为 human_femur。我们将通过两种可能的工作流程来获得股骨的网格:
我们先来看更快速的工作流程。在这个示例中,我们将使用 栅格 数据集表示数据,并使用 过滤器 数据集滤除数据来表示股骨。这个过程将产生一个比较大的表面网格,因此使用 自由三角形 操作对不平整的表面进行平滑处理。
在这个工作流程中,我们不需要 几何 节点,甚至不需要模型开发器中的 组件 节点,稍后我们将在添加额外的计算域和创建股骨的计算网格时添加一个组件。在 全局定义 节点下设置 插值 函数,然后直接进入 结果,定义 栅格 数据集。

添加 插值 函数后,直接设置栅格数据集。
COMSOL Multiphysics UI 显示了模型开发器,突出显示了网格数据集功能,相应的设置窗口与数据,参数边界和网格部分展开。
将 栅格 数据集作为一个规则的网格使用,并在这个网格上应用 插值函数。此处,大约一半的图像分辨率被用作数据集的分辨率。接着,添加一个过滤器 数据集,输入表达式 human_femur(x,y,z),并将 下限 设置为 0.99。这将创建一个值为 0.99 的等值面,并包含所有超过该值的数据。换句话说,就是创建一个人类股骨的等值面。如果最终想创建一个域,可以使用 过滤器 数据集。在第二种工作流程中,将使用 分割 数据集,你可以在其中定义多个值来创建多个等值面,这最终将产生多个计算域。

由 过滤器 数据集生成的等值面。请注意,由于坐标轴进行了缩放,股骨在 Z 方向上被压缩。
将 过滤器 数据集代表的网格导入网格划分序列中,并重新划分面网格以平滑粗糙度。通过右击 数据集 > 过滤器 节点,选择 创建网格零件 可以完成这个工作流程。

在第二个工作流程中,我们将使用 在新组件中创建网格 选项。选择创建一个 网格零件,因为稍后将使用这个网格作为构造几何。这一操作将在 全局定义 下自动设置一个网格零件,并添加一个 导入 节点,用于导入 过滤器 数据集的网格。过滤器 数据集的域单元质量通常较差,所以只导入三角形网格。然后,只要表面网格质量达到要求,将重新生成四面体网格。
在模拟中,经常需要进行特定的边界分割来应用边界条件。使用 与平面相交 操作切割平面,或者使用分割操作分割几何形状。 你可以通过阅读在 COMSOL Multiphysics® 中编辑和修复导入的网格,了解相交和分割操作的不同。这里,我们将使用 用球分割 操作来获得一个大致的圆形边界。

用 球分割操作(粉红色边)分割出一个大致的圆形边界(用蓝色突出显示),之后在这个边界上施加一个边界条件。为了便于观察,关闭了网格渲染。
由于单元大小不一,并且有许多长条状的三角形,导致表面不光滑不适合模拟。因此,在使用之前需要对网格进行重新划分。使用更大的网格大小重新划分面网格,也可以平滑形状。

导入的 过滤器 网格放大图片。由于网格数据集是六边形,网格形状呈明显的块状,包含大三角形、小三角形和长条形三角形。
使用 对面重新划分网格 操作对面重新划分网格。为了避免求解网格中的粗糙度,对网格进行均匀化操作,设置一个大于原网格不均匀度的单元大小。具体可以通过将 最大单元大小 和 最小单元大小 设置为 0.005m 来实现。如下图所示,现在的表面已经足够平滑,但仍然有些不均匀。在稍后工作流程中,我们将再次重新划分边界网格,以进一步提升不规则面的均匀度。

图片显示了重新对表面划分网格之后的股骨顶部。
如果你正在尝试对几乎相交的表面重新划分网格,或者正在对那些几乎与自身相交的表面重新划分网格,可以试试亥姆霍兹平滑方法。
现在,表面网格已经足够均匀,可以继续在这个网格上添加额外的几何体。
股骨域可能是你唯一感兴趣的区域,但假设你还希望在股骨周围再建立一个模拟域或一些螺钉来固定股骨中的裂缝,你会怎么做呢?这可以通过 几何 序列来实现。首先,在股骨模型上添加一个三维组件。然后,添加 几何>导入节点,在设置窗口中选择 网格零件 1。这个节点允许用户添加和定位新的几何体,并且应该被标记为 构造几何,因为我们将只使用股骨的面来定位新的几何体。一旦确定最终几何,构造几何对象就会被移除。你可以看到它是一个构造几何,因为它的边是虚线而不是实线。
将股骨作为 构造几何 对象导入几何序列,以定位与股骨有关的其他几何体。
将创建的几何体在网格划分序列中与网格相结合。在网格序列中,使用 并集 操作将几何体或导入的CAD与网格相结合通常是最稳健的方法, 这也是本文接下来要遵循的工作流程。
你可以画出在仿真过程中所需的任何几何形状,或者导入 CAD 设计。使用构造几何,可以很容易地绘制出所需的几何形状。在这个例子中,我们将添加两个螺钉来加固股骨,但无论是创建还是导入一个或多个几何对象,原理都相似。螺钉的几何形状和股骨的构造几何如下面的左图所示。创建完几何结构,并且已经构建完 形成联合体,股骨的构造几何就会从生成的几何结构中被移除,只剩下螺钉,如下图中间所示。对于导入的 CAD 设计,在将其与网格结合之前也可以添加 移除细节 或 虚拟操作 ,对几何体进行简化。关于如何将几何体和网格相结合的更详细的说明,请看查看STL 导入教程系列教程的第二部分。
在同一个 组件 中,转到 网格 序列。确保添加两个 导入 节点,一个导入螺钉的几何结构,另一个 导入 节点从网格部分(下图右)导入股骨的网格。使用网格 并集 操作将两个表面网格结合起来,并使用连接实体 节点将螺钉的域连接起来,因为它们被股骨的表面分成了两部分。
左图:螺钉的几何结构与股骨的构造几何对象。中间:构建 形成联合体 节点后的螺钉的几何形状。右图:导入到网格划分序列中的股骨和螺钉的网格。
使用 对面重新划分网格 节点重新划分股骨的表面,将 最大单元大小和 最小单元大小 设置为 0.005 m。请确保为 对面重新划分网格 操作添加一个 固定网格 属性,并选择保持螺钉孔边缘的网格固定(如下方左图中蓝色高亮部分所示)。这样可以提高螺钉孔周围网格的单元质量,并能进一步平滑股骨表面。
在保持螺钉孔周围边缘固定的情况下,第二次对股骨表面重新划分网格。
最后,添加一个 自由四面体 网格操作,用四面体单元填充整个域。若当前需要进行物理场分析,可以选择添加扫掠网格或边界层网格来优化。在设置和求解模拟时,将使用基于该网格定义的域和边界。
现在,网格已经构建完成,可随时进行仿真,如下左图所示。但是,如果通过高阶离散化添加物理场,会发生什么?比如,我们想使用 二次巧凑边点单元 离散化设置建立一个固体力学仿真。弯曲单元的二阶节点将被放置在网格表面的弯曲表示上,类似于有基础几何结构时的放置方式。为了查看弯曲单元在网格中的样子,可以将网格数据集的 几何形函数 设置为 二次拉格朗日,和将网格绘图的节点设置为 几何形函数。二次拉格朗日 绘图 的设置并不与模型中的任何物理场离散化相耦合,它只用于绘图。
左图:股骨和螺钉的体网格图。白色单元代表螺钉的域,股骨的单元被表达式 x> -0.015 过滤掉了。右图:在股骨的弯曲边界上显示的具有二阶节点的最终网格。绿色和黄色代表偏度。
可以通过以下方式对比生成的网格如何跟随数据:添加一个用 栅格 数据集的网格分辨率绘制的 human_femur(x,y,z) 表达式的等值面图。从下图可以看出,生成的网格很好地遵循了等值面。
生成的表面网格(灰色)和插值数据 human_femur(x,y,z) 的等值面(蓝色)的对比。
简单来说,在这个工作流程中,我们将添加一个应用股骨数据的规则块状域,然后通过求解亥姆霍兹方程对数据进行平滑处理,得到一个光滑的股骨表面网格。我们仍然需要对股骨表面重新划分网格,但这次只是为了提高网格单元的质量。
为了求解亥姆霍兹方程,我们需要定义一个域,可以是长方体、球体或其他一些简单的适用于股骨数据的几何形状,如这篇博客中所述。要确保这个域尽可能的小,这样就可以使用精细的网格来求解这个域。网格需要足够精细,以解析你想在表面网格中看到的任何数据中的细节。

定义了导入数据的规则域上的足够细的六面体网格。
接下来,我们来设置方程,添加一个瞬态研究并进行求解,以获得我们可以使用的解数据集。
为了避免数值伪影,并有可能使用较粗的网格,使用滤波的亥姆霍兹偏微分方程(PDE)对插值函数进行低通滤波:
其中,R 是滤波器半径,近似代表低通滤波器的宽度。添加一个 系数形式偏微分方程 接口,如下图所示。
这里,我们使用表达式 max((h[1/m])^2,R^2) 来表示扩散系数。COMSOL软件会对网格中的每个节点使用最大的网格大小 h 和参数R。在这个例子中,局部的网格大小 h 是恒定的,但是如果使用非结构化的四面体网格,h 会变化。请注意,因为所有操作都是在一个由网格(每个单元网格都是线性)表示的几何结构上进行的,所有的单元离散化阶次被都降低到线性单元。然后使用一个稳态求解器计算解。
在六面体网格上绘制的插值函数 human_femur 的切面图(左)和平滑处理后的解数据(右)。
在平滑的解数据中使用一个介于 0(蓝色)和 1(红色)之间的值来过滤股骨的表面网格。在这个例子中,假设我们也希望股骨外的区域成为我们模拟的一部分,因此应该选择添加一个 分割 数据集。如果只对模拟股骨域感兴趣,可以使用 过滤 数据集,就像第一个工作流程中那样。水平值 为 0.6的 分割 数据集就已经足够满足我们的目标了,如下图所示。

分割 数据集的图,水平值设置为 0.6。等值面将模拟域划分为两个域,一个是股骨域,一个是股骨周围的域。
当对水平值满意时,右击分割 或 过滤 数据集节点,选择 在新组件中创建网格。如果需要创建额外的模拟域,请使用 创建网格组件 选项,并按照第一个工作流程的步骤进行。

这将自动设置一个带有 导入 节点的新组件,用于导入 分割 数据集的网格。清除 导入域单元 复选框,并将 边界分割 设置为最小值,仅导入表面网格,形成尽可能少的边界;7 个平面边界和 1 个股骨边界。接下来,对这个表面网格进行改进,然后重新创建一个体网格。
导入的 分割 数据集网格。股骨的表面网格包含了大大三角、小三角和长条三角形,其质量需要提升以适用于模拟。为了便于观察,隐藏了一些边界。
使用 对面重新划分网格 操作对同一网格划分序列中的表面重新划分网格。为了得到大小基本相同的三角形,将最大单元大小 和 最小单元大小 都设置为 0.005m。
重新划分网格后的股骨和长方体表面。网格大小已经被修改,以生成一个大小基本相同的三角形表面网格。为了便于观察,隐藏了一些边界。
现在,我们可以用一个四面体网格来填充这些域。添加的物理场接口将被应用到这个网格所定义的域和边界上。这样,我们就有了高质量的体网格,可以用于仿真其他形状和应用,还可以在域中添加扫掠和边界层网格,但在这个例子中,四面体网格已经满足我们的需求了。
左图:股骨和周围长方体的体网格。白色的单元代表股骨域,周围的单元使用表达式 x > 0 过滤。右图:在股骨的弯曲边界上显示二阶节点的最终的网格。颜色代表偏度。为了便于观察,隐藏了一些边界起来。
在这个工作流程中生成的网格可以与导入的数据等值面 human_femur(x,y,z) 进行对比,该等值面与分割数据集使用的等值面相同,被绘制在原始长方体域的网格上。为了生成一个更接近导入数据的网格,可以在求解亥姆霍兹方程的原始长方体域中使用更细的网格,相应的也可以降低扩散系数。
生成的表面网格(灰色)和插值数据 human_femur(x,y,z) 的等值面(蓝色)对比。
至此,这篇由扫描的数据创建表面网格的文章就结束了。文中对表面网格进行了分割,使用了两种不同的方法对扫描数据进行了平滑处理,并介绍了如何将网格和几何结构结合起来。
如果您想要了解文中讨论的工作流程的更多细节,请点击下列按钮下载 MPH 文件。
文中介绍模型的一些数据来自 Visible Human Project,https://www.nlm.nih.gov/research/visible/visible_human.html,由美国国家医学图书馆提供。这些数据是截至 2023 年 4 月 21 日的最新数据,已经经过修改,可能无法映 NLM 提供的最新/最准确的数据。NLM 没有认可 COMSOL 的产品、服务或应用,并声明对数据的准确性或完整性不作任何明示或暗示的保证,包括对商业性或适用于特定目的的保证。数据的使用者应使 NLM 和美国政府不承担因数据错误而引起的任何责任。对于因使用、误用或解释数据中包含或不包含的信息而造成的任何后果,NLM 不承担任何责任。
MATLAB 是 The MathWorks, Inc. 的注册商标。
在一些情况下,修复导入的网格可能会很有用。今天这篇博客,我们将讨论在 COMSOL Multiphysics® 软件中编辑、修复和连接导入面网格的功能。我们将对不同操作的结果进行比较,讨论一些案例,并提供一些现有的教程和其他相关资源来帮助您了解更多信息。
编者注:这篇博文的最初发布于 2021 年 2 月 25 日。现在已经更新,以反映 COMSOL Multiphysics® 软件 6.0 版本中的新特性和新功能。
COMSOL Multiphysics 中的几何体和网格导入都支持导入三维表面网格格式。以下三种格式是最常见的,软件都支持:
由于使用的这些格式并不是来自有限元分析模拟,而是来自激光扫描和 3D 打印等应用,因此这类文件中生成的网格质量并不重要。这些格式通常包含质量较差的单元,从仿真的角度来看,网格质量差意味着:
对于质量较差的导入网格,通常需要修复和编辑,以及为了平滑小的不规则区域重新划分面。接下来,我们将对此进行更详细地讨论。
在 COMSOL 中有多种操作可以编辑导入的面网格:
接下来,让我们来研究一些案例和不同操作类型的区别。
如果要细化导入的网格,可以使用细化 操作。如果正在寻找一个同时支持粗化网格的操作,可以使用自适应 和自由三角形 操作。这三个操作都将新的或移动的网格顶点放置在输入网格的近似面上。这意味着如果输出网格比输入网格更精细,面通常会变得更平滑,如下面的示例所示。了解有关如何将新的和移动的网格顶点放置在面上的更多信息,请阅读博客文章“如何优化和调整导入的网格”。
为了解释细化、调整和重新划分面网格之间的区别,我们将使用下图所示的单位球体的粗化表面网格为例说明。

单位球体的粗化三角形网格。球体顶部的网格稍微细一些。
单位球体的粗网格被导入到三个不同的模型中,以方便我们比较细化、自适应 和自由三角形 操作的结果。导入网格中最大三角形的单元大小约为 0.6 m。对于细化 操作,我们可以指定单元被细化一次。这将用四个较小的三角形替换每个三角形。在自适应 操作中,如果从解 列表中选择无 并从表达式类型 列表中选择绝对值,就可以指定一个目标单元大小(在本例中为 0.3 m)来指导自适应。对于自由三角形 操作,我们可以设置最大单元大小;在本例中,设置为 0.3 m。运行这些网格操作时,一个光滑的几何表面会在后台中被创建,新的网格被放置在上面(这个步骤对用户来说是不可见的)。
使用 细化(左)对球体的粗面网格进行一次细化。使用 自适应操作后的结果(中间)。使用 自由三角形操作后重新网格化球体的表面(右)。
正如上图中所看到的,当使用细化 操作时,所有的三角形都被细化了,包括顶部的较小的三角形。自适应 操作在顶部粗化较细的网格并细化较粗的网格,从而产生更相似大小的单元。还可以使用自由三角形 来获取大小更加相似的单元。
由于自由三角形 操作会在后台中创建平滑几何表面,而自适应 操作可以修改现有网格以使其粗化,因此有时可以使用这些操作对网格中的过小的不规则部分进行平滑处理。对同一个边界选择添加多个相同的操作或这些操作的任何组合,会使网格更加平滑,因为操作没有存储网格,例如之前的不规则性。
对质量较差的导入 STL 网格(左)中的不规则部分进行平滑处理。中间的图像显示了运行两次 自适应操作后的结果。右侧的网格显示了运行一次 自由三角形操作后的结果。
创建顶点、创建边 和创建面 操作可用于在空白处创建网格。在下面的幻灯片中,我们将看到如何使用这些操作来弥合两个不相连的导入网格之间的间隙。有两种导入的、断开的管道网格,一种具有椭圆形横截面(左侧的 S 形管道),另一种具有圆形横截面(右侧的管道)。目标是连接蓝色突出显示的边缘。
我们首先使用创建顶点 来确保两个网格上的顶点数量相似。使用创建边 将顶点与网格边连接起来。创建的边始终是直的、网格状。然后使用创建面 操作在每个循环边中创建面。最后,使用自由三角形 连接和重新划分面。正如我们在最后一张图片中看到的,重新划分连接的表面使其更平滑,现在很难看出两根管道一开始就没有连接。
所创建的曲面总是尽可能的平面化,因此可能需要添加更多的网格顶点和边以解析面。为了使生成的曲面平滑并使用相似大小单元的高质量网格,可以对曲面进行调整或重新划分,如上一节所述。
如果有两个相交的导入面网格,请使用并集 使面相交并更新域信息。之后重新网格化或调整面以获得高质量的面网格通常很有用,如下所示。
使用 并集操作合并两个导入的面网格(左)和使用 自适应修改后生成的网格(右)。
有时,有必要对网格进行分割或相交以获得边界,方便之后分配边界条件。我们通过在 z = 1 处相交和分割下图中的面网格,来看看相交操作和分割操作之间的重要区别。如下右图所示,平面在三角形的中间相交。相交操作将分割平面所在的单元以添加直线几何边。分割操作将沿着最接近平面的现有网格边添加几何边。
与平面相交 操作仅被用于表面网格。它与网格单元相交,这意味着三角形将在平面位置处划分,并在需要的地方引入新的网格顶点、边和三角形。结果是相交的面被笔直的边隔开,如下左图所示。如果需要,可以使用 清理生成的网格算法,例如,删除可能在生成的网格中引入的短网格边和小单元。
注意:要查看与平面相交 操作的另一个示例并更详细地了解它,请查看 STL 导入系列教程模型。
显示 与平面相交操作之前和之后的网格的图像。左:平面网格位于 z = 1 中,以蓝色突出显示。该平面与蓝色区域上边的表面网格相交。右:生成的上边界(以蓝色突出显示)具有笔直的下边。
体积网格和面网格支持分割操作。可以使用不同的形状来划分网格的域或面,包括:
这里的分割 一词表示根据形状中是否包含单元形成新实体。网格单元和网格边不被分割。这意味着域和面上的网格单元数量保持不变,并且创建的边将遵循现有的网格边,如右图所示。
图像显示了构建 用框分割 操作之前和之后的网格。左:一个面网格,显示了一个放置在 z = 1 中的平面,以蓝色突出显示,框将划分网格。右:几何边尽可能接近 z = 1 的现有网格边。
虽然可以使用分割操作对面进行分割,但也可以使用创建边 操作。分割操作仅限于某些形状或具有各自设置的逻辑表达式,但可以快速分割网格。另一方面,创建边 操作更加灵活,因为每个网格边都是手动选择的。因此,这个操作通常在隔离较少数量的网格单元时使用。
注意:在 STL 导入系列教程中提供了创建边 操作的示例,您可以下载应用程序文件了解更多信息。
例如,我们可以使用用球分割 操作隔离在网格中形成尖峰的部分面,如下图所示。如果单元的部分或全部网格顶点位于球体内,我们可以设置分割条件以包含三角形单元。或者,如果想要更多地控制选择哪些网格边转换为界定新面的边,可以使用创建边 操作。
在左图中,如果所有顶点都在球内,则分割条件设置为包括网格单元;右图显示了相同的操作,如果只有一些它的顶点在球内,条件设置为包括网格单元。在这两种情况下,新面的边(以蓝色突出显示)都会变成锯齿状。
在这个示例中,鼠标右键单击选择 图形窗口(左)中的每个网格边,这是一个快捷操作,可以使所选面底部边的形状更加均匀(右侧,以蓝色突出显示)。
在编辑和修复导入的网格时,可能会比其他操作更多地使用某些操作,或者意识到每次设置新模拟时都会使用特定的操作序列。一种自动化建模工作流程或部分工作流程的方法是设置模型方法或使用插件。
例如,当使用代表多孔结构的导入网格进行工作时,通常会存在狭窄的“桥”将网格的一部分与另一部分连接起来。这些桥在创建几何图形或重新分割面网格时可能会出现问题,因为桥的面很容易变得自相交。因此,有时有必要将它从网格中删除。一种快速的方法是使用球分割插件,这个插件会在旋转中心创建一个 用球分割(如下左图所示)。我们可以通过用鼠标中键单击将旋转中心设置在边界处。
多孔结构的面网格。图像中间的柱状部分创建了一条从表面的一部分到另一部分的狭窄的桥。我们在桥上设置了旋转中心(左图),并使用球分割 插件根据旋转中心的位置(右图)来定位 用球分割操作的。
这个插件可以很容易地移除窄桥和修复孔。
桥被隔离为一个单独的边界,并被选中(左侧,以蓝色突出显示)以将它删除。右图显示了填充孔并调整网格后调整的网格。
如果要重新划分导入的体积网格,可以清除导入 操作设置中的导入域单元 复选框。另一种选择是删除域单元,同时保留面网格和未划分网格的域。为此,我们可以使用删除实体 操作,选择要删除其单元的域,然后选中保留为未划分网格的域 复选框。
要恢复域中的四面体网格,请使用 自由四面体操作。
编辑导入的网格有多种方法,COMSOL® 提供了多种功能,可以使这些更改成为可能。
如果您还没有准备好,可以查看 COMSOL 案例库中的两部分教程系列。在这个系列的第一部分中,几何对象是基于 STL 网格创建的,然后与块相交。在第二部分中,导入两个面网格并直接用四面体网格填充,而不基于 STL 网格创建几何形状。学习这些教程,可以让您深入了解修复和编辑任何类型的导入面网格。
查看下面列出的这些资源,了解有关网格的更多信息:
在进行有限元(FEA)仿真时,创建合适的网格是获得准确的结果的关键。在这篇博客中,我们讨论了如何检查网格 信息、警告 和 错误 节点中报告的实体;如何查看网格或部分网格的统计信息;以及如何绘制网格及其相关变量,并将这些绘图划分到选定区域。
编者按:这篇博客更新于 2022 年 7 月 6 日,以反映 COMSOL Multiphysics ® 软件 6.0 版本的新特征和新功能。
在COMSOL中创建网格时,有时会收到信息、警告和错误消息。遇到这种情况时,应该检查 信息、警告 和 错误 节点随附的报告列表。这些消息大多数是由于使用过粗的网格设置,导致无法正确解析薄区域和短边。
要找到这些几何实体的位置,可以单击 设置 窗口 选择 列表旁边的 缩放到选择 按钮,然后关闭 网格渲染 按钮,并打开三维网格中的 线框 按钮,就可以查看报告的内部几何体的位置,如下图所示。对于选定的实体,使用工具栏或者图形上下文菜单中的 测量 按钮,可以获得边的长度或点与点之间的距离。
一个山地车前叉的网格(左),其中一些边界处显示有狭窄的,在当前的网格大小设置下无法正确求解的区域。点击网格渲染和线框按钮后,用蓝色显示的边界(右)。
有了测量结果和实体信息,就可以设置 移除细节、虚拟操作 或 CAD 特征去除 来消除小的几何实体,或者当这些特征对模拟很重要时,用于减小网格大小。阅读 这篇博客以及系列教程,了解更多关于移除细节 和 CAD 特征去除的使用方法。调整非结构化网格生成器的单元大小教程模型演示了如何修改网格大小参数。
在 图形 窗口中,用红点表示信息中的一个或多个问题位置的坐标,单击 坐标中心 按钮,可以放大选定的位置。单击 绕坐标剪裁 按钮,可以在坐标周围添加一个剪裁球体,这样检查有问题区域附近的面网格就更加方便了。单击 移除剪裁 按钮可以移除剪裁球体,再次显示完整的网格。红色的点指示了有问题的位置,这样就可以对特定的区域进行详细的研究。
当有消息提示有一个或多个低质量的单元生成时,可能需要特别注意。出现这种情况时,消息旁边的设置窗口将显示网格的 最小单元质量。另一个检查 最小单元质量 的方法是在统计窗口。通过绘制质量最差的网格单元(在本文后面有进一步的详细解释),可以得到质量最差的单元的位置信息。
如果网格质量为负值或者为非常接近零的正值,说明报告的网格单元已经反转或者几乎反转。低质量的单元会导致求解器难收敛,或者使解对网格的微小变化很敏感。请注意,这里讨论的反转线性网格单元,与在求解时可能遇到的反转弯曲单元是不同的。我们将在文章的最后讨论检查弯曲单元。
一种快速了解所创建网格质量的方法是查看 网格统计信息 窗口中的统计信息,这可以通过工具栏或单击 网格 节点右键打开。

网格信息统计 窗口,显示了不同选择和网格质量评估的各种统计数据。
在 COMSOL 中,使用窗口顶部的 几何实体层 下拉菜单,还可以更改域、边界或边的选择的统计数据。在 质量测量 菜单中,可以选择各种网格质量测量,包括:
偏度 适用于大多数类型的网格,因此是一个默认选项。这种质量测试基于等角偏度,它会惩罚与理想单元的标准角度相比具有较大或小角度的单元。在生成网格的过程中报告不良单元质量时,也会用偏度这个质量指标。使用 最大角度 指标,仅惩罚具有大角度倾斜的单元,因此这个指标特别适合用来检查是否存在各向异性单元的情况,例如用来检查边界层网格的质量。
体积vs.外接圆半径 是基于单元体积与单元外接球体(或圆)半径的商。这种质量测量对大角度、小角度和各向异性单元都很敏感。对于需要各向同性单元的二维三角形网格和三维四面体网格,体积 vs. 外接圆半径 是一个合适的选项。另一方面,体积 vs.长度 基于单元边长和单元体积的商。这种网格质量测量主要用于各向异性单元。
条件数 选项基于将实际单元转换为理想单元的矩阵属性。增长率 基于局部单元大小与所有方向上相邻单元大小的比较。
弯曲偏度 质量测量是在生成高阶单元(弯曲单元)时对变形的测量。
对于所有的网格质量测量,质量 1 是最好,表示所选质量测量中的最佳单元。在区间的另一端,0 表示退化单元。尽管 COMSOL Multiphysics 中的网格划分算法希望避免低质量单元,但并对所有几何形状都使用。过高的几何纵横比、小的边和面、薄区域,以及高度弯曲的面都可能导致网格质量差。当几何体确实导致网格质量不佳时,网格生成器会返回质量较差的网格进行检查,而不是完全不生成网格。
根据使用的网格质量测量,最小单元质量、平均单元质量 和 单元质量直方图 部分相应地将会更改。要获得准确的结果,需要了解哪种 最小单元质量 和 平均单元质量 适合你的应用,这一点非常重要。
没有绝对的数字可用于说明质量应该是多少,因为所使用的物理场和求解器对需要的网格质量有不同的要求。如果你想验证结果的准确性,建议执行网格细化研究。
一般来说,质量低于 0.1 的单元在许多应用中被认为质量较差。如果质量差,网格生成器会自动通知用户;如果质量很差,则会警告用户,因为在大多数情况下应该避免质量很差的单元。在一些情况下,如果几个低质量单元位于模型中重要性较低的部分,可能没问题,而在其他情况,低质量单元可能会导致收敛问题。
网格信息统计 窗口中的直方图可以让我们直观地看到网格质量,这是一种快速查看是否需要以某种方式更改整体网格大小的方式。
如果想了解低质量单元的位置以及要更改哪些网格大小参数,最好绘制网格图。可以通过单击 网格 功能区中的 绘图 按钮或右键单击要绘制的网格的网格 顶部节点并选择 绘图 来执行此操作。这样就会在 结果 > 数据集 下得到一个 网格 数据集,还可以在其中添加 选择 以缩小图中显示的实体数量。网格 绘图功能也可以与其他绘图功能结合使用。
可以大致了解特定的网格是如何通过不同类型的网格单元设置的。例如对于体网格,可以将 层 设置为 体,并从单元颜色列表中选择 类型,这样软件就会根据网格单元的类型自动为它上色。下图显示了一辆跑车周围的边界层网格。

跑车的大涡模拟模型网格中用不同颜色表示的单元类型。四面体用绿色表示,金字塔形用洋红色表示,棱柱型用黄色表示。为了更详细地了解单元是如何连接的,使用表达式 y> 0 对其进行过滤。
正如前文提到的,了解低质量单元的位置非常重要。这将帮助我们了解是否需要更改几何形状,或者是否需要修改网格大小,以更好地处理有问题的区域。
首先,可以将 层 设置为 体,然后在 单元过滤 部分选择 启用过滤 复选框,接着输入一个布尔表达式,代表要检查的单元。下图中显示了 偏度 低于 0.04 的单元。可以使用 替换表达式 功能轻松地访问不同质量测量的名称。这些方法可用于发现生成的网格中的不同缺点,因此应该确保检查所有这些方法,看看哪些最适合我们的特定应用。

管壳式换热器模型显示了表达式 qualskewness 低于0.04的体单元。在 图形 窗口前面,可以通过替换表达式 窗口方便地访问不同的网格质量测量选项。
在网格质量测量选项中,增长率 稍有不同,它显示的是两个网格单元之间的关系,而其他网格质量测量显示的是每个单一网格单元的形状质量。在单元大小恒定的区域,增长率最大为 1。在从一个单元增加到另一个单元的单元增长率增大的区域,增长率较低。需要绘制的重要的图往往在域的网格内,添加一个包括空间维度的过滤表达式可能会有用。下图显示了一个这样的例子。
![]()
双锥形天线模型的网格增长率。图中显示了 PML 域中的边界层网格具有相似的大小,而中间域的四面体网格中的增长率变化更大。在这个示例中,通过使用 单元过滤器 选项显示 x > 0.01 mm 的网格单元。切面图显示了电场模(dB)。
最后,检查特别求解的一些弯曲单元或高阶单元时,可以使用网格质量测量 弯曲偏度。在网格 数据集中设置适当的 几何形状 函数。请注意,无论求解什么问题,都有可能选择任意形函数,所以如果你不确定该选择哪一个,请仔细检查物理场接口的 离散化 设置。在所有的网格质量测量中,都可以采用类似的方法过滤掉质量不好的单元,以更好地了解几何体或网格设置可能需要微调的位置。

显示 弯曲偏度 的绘图。在 网格 数据集中设置 几何 形函数。
在这篇博客中,我们讨论了检查网格质量的3种不同方法,这些方法可用于发现包含低质量网格单元的区域。现在,我们知道如何找出低质量网格单元的位置,并且可以手动调整这些区域中的网格或解决底层 CAD 几何本身的问题。如果想了解关于修改 CAD 几何以进行网格划分的信息,请参阅以下博客和网络研讨会视频:
想根据自己的模拟需求,评估 COMSOL Multiphysics 的网格划分功能吗?请单击以下按钮,联系 COMSOL:
在对感应加热过程进行三维建模时面临的一个挑战是:你经常需要通过一个薄边界层网格来解析被加热部件的集肤深度,但又不想将部件内部的其它部分包括在电磁学模型中。今天,我们将研究一种有效解决这种情况的网格划分技术。
考虑如下图所示的电感加热装置,即一个绕铝制汽车活塞头的线圈。为了简化计算,我们可以假设该装置对称,并仅对装置的四分之一进行建模,在对称平面上有磁绝缘边界条件。我们还通过理想磁导体条件 将边界近似为自由空间。

铝制气缸盖的感应加热装置和利用对称性创建的计算模型。
工作频率为 40kHz 的感应铜线圈可以通过两个均匀多匝线圈建模,不需要非常精细的划分网格。然而,在铝制活塞头内,集肤深度与较小的特征尺寸相当,因此我们知道需要使用边界层网格来准确计算损耗。
由于我们知道电磁场不会深入到材料内部,因此理想情况下,我们希望在电磁场计算中省略零件的所有内部体积。另一方面,我们确实知道圆柱体的内部体积会影响传热过程,因此我们不能完全移除该体积。我们需要根据边界层网格划分要求,将零件划分为两个子域。 事实证明,使用网格划分工具的组合可以快速轻松地建立这样的模型。下面,让我们了解更详细的内容!
从上图中的几何开始,我们定义网格。首先,在零件和周围空气中生成一个四面体网格,然后在活塞与空气接触的边界上定义一个边界层网格,该网格由四个单元组成,每个单元等于集肤深度的一半,如下图所示。

在活塞面上突出显示边界层的网格
当构建好了这个网格,我们希望根据集肤深度网格和零件内剩余体积之间的边界来划分几何体。这需要一些额外的步骤。首先,我们需要在模型中引入另一个 三维 组件。 在这个新 三维 组件的 网格 分支中,我们将导入之前创建的网格。

导入网格的操作,将网格从一个组件复制到另一个。
在将网格引入这个新的组件后,我们需要通过表达式:isprism 将一个分割 特征引入到网格和分区中,如下图所示。变量 isprism 是一个逻辑变量,它仅对边界层网格内使用的棱柱单元有效。因此,这个操作将圆柱体的网格体积划分为两个体积:
当我们开始向模型添加物理场时,可以使用这些不同的域。如果我们想返回并修改网格,我们要返回到组件1,修改网格,然后将网格重新导入到组件2 中。这里需要注意的是,你不能向组件2 添加额外的几何体 ,必须返回原始组件,修改源网格,然后重新导入。

分区操作,对网格本身进行操作,以及创建新的可视化域。
完成此操作后,可以在第二个组件中仅求解线圈、空气和边界层中的电磁场,同时求解整个零件体积中的温度场。在边界层域和零件剩余体积之间的边界中,应用阻抗边界条件是合理的,因为这将考虑边界层网格内的全部损耗。
在本案例中,仅线圈、空气和集肤深度区域的电磁学模型的自由度比我们求解零件内部深处的场减少约 20%,而我们已经知道自由度的减少看似微不足道。但对于其他零件来说,自由度的减少可能更明显。

在整个体积内计算的温度场,以及仅在边界层域内计算的感应加热。
如果想要了解有关感应加热建模和边界层网格划分更全面的介绍,请在 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 Multiphysics® 软件中,那么你很有可能会想知道是不是有什么方法可以在不返回源网格的情况下修改网格。COMSOL Multiphysics® 软件中的两个有用的工具:细化 和自适应 操作,可被用于优化导入的网格。在这篇博文中,我们将演示这些操作的工作原理以及如何使用它们来充分利用导入的网格。
细化 操作是降低导入的网格单元尺寸的一种方便、快速的方法。顾名思义,这个操作本质上是对网格中已经存在的单元进行分区。由下图所示的设置可以看到,我们可以选择要执行的细化次数 和操作的边界框,也可以对整个网格或域、边界或边的选择执行细化操作。但是,我们将在这篇文中讨论的选项是细化方式,有两种设置可供选择:

细化操作的设置窗口。可以指定细化方法和细化次数,以及操作的边界框和几何实体选择。
为了演示这些方法的工作原理和区别,我们来看一个四面体网格单元的例子。下面第二个图显示了使用拆分最长边 方法进行一个细化步骤后的基本单元。这个操作将基本单元的最长边分成两个相等的部分,然后使用新边将基本单元一分为二。但是请注意,当我们有多个连接的基本单元时,这将导致某些基本单元被拆分为两个以上的新单元以保留一致的网格。

构建细化操作之前和之后的单个四面体网格单元的三个网格图。左:未分区的单元。中心:使用拆分最长边设置分区的基本单元。右:使用常规细化设置对基本单元进行分区。中间和右侧图中的基本单元颜色表示网格单元质量。
使用常规细化设置,第三个图显示了相同四面体单元的结果。这一次,每条 边都被一分为二,然后被用来将单元分裂成几个相同类型的更小单元。对于四面体,这会产生八个新单元,而以前只有一个单元。常规细化 选项也有保存结构化网格结构的特征,因此,如果我们导入的是网状结构,这可能是需要考虑的问题。
现在,让我们来看看自适应 操作。虽然它包含许多功能,但在这篇博文中,我们将重点介绍如何使用绝对大小 表达式来修改导入网格单元的大小。
有关将自适应 操作与误差估计和解数据结合使用的更多信息,请查看之前关于使用自适应网格划分进行局部解决方案改进的博客文章以及文末列出的教程。此外,博客文章网格自适应的 2 种方法——实现更高效的计算展示了如何在处理各向异性单元时使用自适应操作。
首先,我们将了解如何应用自适应 操作来处理单元的大小。使用的网格已经被保存为 NASTRAN® 文件格式,可以在曲轴的特征值分析模型教程中找到。与细化 操作一样,自适应 操作要求所有网格单元都是线性的,因此,我们将确保在导入 操作中选择导入为线性单元。然后添加一个自适应 特征节点,选择绝对大小 作为表达式类型。

使用导入选项为线性单元并以 NASTRAN® 格式导入曲轴网格。 自适应节点已经添加到网格的 操作序列,解设置:无,表达式类型:绝对大小。
细化 操作简单的分区所有单元,以构建更细的网格,通过选择绝对大小,自适应 操作将尝试修改网格,以使基本单元的大小符合给定的表达式。以下三种不同的方法操作均可实现这个目的:
您可以在自适应方法 菜单中选择使用哪种方法。
您可能会从上面关于细化 操作的讨论中识别出最长边细化 和常规细化,并且做出正确的判断:它们的功能基本上基于相同的原理。但是,虽然细化 对网格中的所有单元进行分区,但自适应 操作将使网格符合大小表达式。因此,如果网格中的单元已经与表达式非常匹配,或者更小,这些单元通常会保持不变。
通过这种方式,自适应 操作不会细化分辨率已经非常好的网格部分,从而防止不必要的内存使用。例如,假设我们想让曲轴网格的较大单元更精细。使用设置为分割最长边 的细化 操作并将细化次数设置为 1,我们将网格中的单元次数增加了大约 3.5 倍。然而,使用最长边细化 和大小表达式设为 8[mm] 的自适应操作,我们可以在目标单元中实现相同的尺寸减小,而单元总数仅增加不到 2 倍。
使用最长边细化设置和将大小表达式设为 8[mm] 的自适应操作之前(左)和之后(右)的曲轴网格部分。需要注意的是,并非所有单元都已分区,只有那些大于表达式中指定大小的单元(在两个图像中均以绿色着色)才被分区。
使用常规修改 设置,除了通过分割单元创建新单元外,该操作还能够移动网格顶点和折叠太小而无法粗化网格的单元。因此,在尝试使网格符合大小表达式时,它往往会使单元保持各向同性,从而消除一些质量较差的单元。正如我们将看到的,这是一个非常通用和强大的工具。
应用 自适应的常规细化设置之前(左)和之后(右)的部分网格。颜色表示单元质量,可以看出随着小单元折叠和顶点移动,单元质量明显提高。
下图显示了选择常规修改 方法时自适应操作 通常如何修改网格。其中,使用常规修改 和大小表达式 为 8[mm] 的自适应操作之前和之后的部分曲轴网格如下图所示。为了对比差异,这个图还显示了使用具有相同表达式的最长边细化 的结果。需要注意的是,对于常规修改,操作已移动顶点。这会导致更多的各向同性和更高质量的单元。此外,假设您想运行一个快速仿真来估计结果。使用合适的大小表达式常规修改 可以粗化网格,减少单元数量,从而减少计算时间。
曲轴网格的一部分,左侧为未修改的版本。中间为使用了大小表达式为 8[mm] 的自适应操作。右侧使用了 最长边细化和 常规修改。请注意 常规修改如何粗化部分网格并移动顶点以更好地拟合表达式并提高质量。
在导入的 2D 或 3D 网格上使用细化 或自适应 操作时,该操作将为输入网格的每条边创建一条样条曲线。这个操作将使用这些样条来确定需要细化或调整的网格的边缘网格顶点位置。下图表明,出现在边界上的新网格顶点位于样条曲线上,而不仅仅位于输入边界网格上。
新网格顶点在细化网格边界(右侧)上的位置由使用基于输入网格边界(左侧)的网格顶点的样条曲线确定。
对于 3D 面上的网格顶点,细化 和自适应 操作不会创建任何样条曲面。这意味着对于细化或调整的网格,面网格顶点将被投影到输入面网格。下图表明,出现在面上的新顶点位于输入面网格上。
新网格顶点在细化网格(右侧)面上的位置通过投影到输入网格的面网格(左侧)来确定,而边上网格顶点的位置由样条曲线确定。
综上,我们已经向您介绍了如何使用细化 和自适应 操作来修改和改进您导入的网格。细化 提供了一种轻松减小网格单元大小的快速方法,而自适应 允许通过指定大小表达式 来获得更多粒度。常规修改 设置的功能特别强大,它能够细化和粗化网格,以及移动顶点,从而创建更多各向同性单元并提高网格质量。
自适应 操作还有很多有用的功能。如果您还想了解更多有关使用自适应 及其带来的所有强大功能,请尝试以下教程模型:
NASTRAN 是 NASA 的注册商标。
在 COMSOL Multiphysics® 软件中设置仿真时,你有时可能希望用自动方法来移除几何结构中一些能产生不必要的细化网格或质量较差网格的细节。这可以通过三维建模中的移除细节 操作来实现。通过深入地了解这一功能,你就可以获得单元数量更少、质量更高的网格。
需要CAD 导入模块、设计模块或任何用于 导入CAD 设计的 LiveLink
产品中包含的 CAD 去除操作,以及 COMSOL Multiphysics® 软件核心产品组件中包含的虚拟几何操作,都是为仿真准备几何结构的有用工具。你可以在在形成联合体/形成装配 之前,对几何对象使用CAD 去除操作,指定容差后就可以搜索和移除各种类型的小细节。虚拟操作是手动执行的,你可以选择并移除几何结构中不需要的几何实体。与 CAD 去除操作相比,虚拟操作更加灵活,这因为它作用于最终对象(即,在构建形成联合体/形成装配 之后),而且移除的是几何结构虚拟副本上的细节,这些细节不一定受实际几何结构的数学公式约束。
利用虚拟几何操作,移除细节 操作会选择适当的容差和虚拟几何操作来自动检测并移除小细节,这样你只需单击即可生成一个几何结构,用于划分网格。
下面我们深入讨论一个示例……
这个示例中讨论的几何结构包含山地自行车叉的两个部分:叉形冠和转向管。这个装配体是一个典型的使用导入的 CAD 设计创建的几何结构,包含许多小细节。但是,为了使教程相对简单,装配体中的大多数零件已经被移除。这里,我们将仔细研究一些较小的细节,包括窄面、短边和零件之间的重叠。

带悬架的山地自行车叉的叉冠和树管。
使用默认网格大小构建几何结构并对其进行网格划分,会导致出现多个网格警告。警告节点突出显示短边、窄面、具有窄区域的面(如下图所示)和薄域,并在创建低质量网格单元时进行报警。

对几何结构进行网格划分时,系统会发出有关小细节的警告,同时也会通过高密度网格点来指示这些细节。警告列出了短边、窄面和具有窄区域的面(在网格中以蓝色突出显示)以及薄域。
由于导入的几何结构有两部分,因此我们希望得到两个域(一个用于转向管,另一个用于叉形冠)。然而,由于各零件之间存在重叠,最终得到了三个域。如果仔细检查几何结构,可以看到孔和转向管半径之间的差异,如下图所示。这里,为了便于说明,我们夸大了重叠,在实际零件中重叠会小得多。重叠是为了使用过盈配合紧固技术将叉形冠牢固地安装在转向管上。这些零件要么通过力压在一起,要么是为了获得更大的干预以加热叉形冠,从而使孔在插入管之前膨胀。确定干预量后,就可以获得装配体所需的强度。
零件之间的重叠。两幅图中的转向管都是透明的,而左侧的叉形冠以蓝色突出显示。左图中的箭头突出显示了如何在导入 CAD 设计后直接发现重叠。右图突出显示了构建 形成联合体之后因两个 CAD 组件重叠而产生的薄域。
为了给转向管和叉形冠指定不同的材料,我们希望将它们保持为单独的域,但是额外的重叠域和其他报警的小细节是不需要的,所以应该去除。为此,我们需要结合使用 CAD 去除操作和虚拟操作,因为前者是不能用于移除由形成联合体操作创建的薄重叠域。接下来,我们看使用移除细节操作让我们的任务变得多么容易。
移除细节 中的“细节”是指短边、长条面、小面、薄域和不需要的顶点。所有这些项目通常都导致使用非常精细的网格尺寸和/或较差的网格质量。小细节也可能导致几何结构的网格划分操作失败。在由细节大小设置确定的容差范围内,操作会在几何结构中查找短边、小面、窄面和薄域,并使用虚拟操作将其移除。移除细节 操作旨在移除小细节,因此它会自动确定容差,以便在几何结构中仅移除较小的细节。在手动设置容差时,我们应该牢记这一点,因为移除太大的实体可能会导致几何结构扭曲。
默认容差设置为细节大小:自动,但可以通过手动设置切换到相对或绝对。下图显示了后一种设置,其中最大单元大小 接近重叠域的厚度:1 mm。信息 部分包含有关已移除实体的数量及其移除方式(忽略或塌陷)的信息。一般来说,设置较大的最大绝对大小 或最大相对大小 大概率会产生塌陷实体(域、面和边),而设置较小的大小会导致更多实体(面、边和顶点)被忽略。

完成操作后,移除细节的设置窗口。将 最大绝对大小更改为 1 mm 会导致移除多个被忽略和塌陷的实体,其中一个就是前面提到的重叠域。
在要移除的细节 部分中设置连续相切的顶点 ,将移除相邻边在参数 部分中给出的连续相切容差 内具有连续切线的顶点。如果顶点有两条以上的相邻边,则始终保持不变。
选中相应的复选框后,小于细节大小 的边、面和域将被移除。可以取消选中要移除的细节 部分中的复选框,来保留某些类型的实体,或者将移除操作集中在此操作的一个或多个实体上。还可以为实体设置一组特定的参数(例如,绝对最大细节大小)来去除短边和不必要的顶点。
使用菜单下第一部分的虚拟操作 将移除顶点、边、面和域。轮辋几何虚拟操作教程模型介绍了许多虚拟操作及其用途。

显示 移除细节使用的操作的 虚拟操作菜单。
从 COMSOL Multiphysics® 5.4 版开始引入的塌陷面区域 操作是用于检测和解析窄面区域的虚拟操作,窄面区域是移除细节 目前无法检测到的细节。回头看山地自行车前叉模型,我们可以看到这一点,因为在构建网格时仍有警告,如下图所示。警告 节点的选择 突出显示两个具有窄区域的面,这些窄区域不是通过为网格指定的最小单元大小 来解析的。我们可以看到这个区域中网格三角形的质量相对较差。

网格警告突出显示叉形冠下方带有窄区域的两个面。窄区域没有通过指定的 最小单元大小来解析,这意味着此区域中的网格单元质量较差。
根据示例几何结构,我们可以用不同的方式处理具有窄区域的面。一种方法是使用形成复合面 操作将面与相邻面连接起来。另一种方法是将面添加到塌陷面区域 操作。下面显示了两种方法的结果,其中形成复合面应用于圆孔右侧的面,塌陷面区域应用于圆孔左侧的面。

移除窄区域的两种方法:圆孔左侧的面显示了 塌陷面区域操作的结果,圆孔右侧的较大面是 形成复合面操作的结果。
通过修改塌陷面区域 操作的窄区域容差,可以确定有多少窄区域塌陷。较大的绝对或相对容差会导致较大的区域塌陷。
为了与第二幅图中显示的网格,以及移除所有小细节之前的几何结构的警告进行比较,下图显示了应用上述操作后的最终网格。

我们已经完成了示例的第一部分,下面我们继续看移除细节操作的幕后工程。该操作可能看起来像一个黑盒测试,但与 COMSOL Multiphysics 中的大多数功能一样,我们可以切换到手动模式并检查已完成的操作,甚至可以对其进行修改。运行移除细节 操作后应检查几何结构,以确保仅移除了不需要的细节。一种方法是逐步完成扩展的操作序列,然后逐个构建操作。
如果移除细节 操作使用操作模式:自动 设置至少一次,则可以切换到手动 设置来扩展已添加的虚拟操作序列。现在,我们可以检查每个单独的操作,修改每个单独操作中的实体选择,还可以删除序列中的操作或向序列中添加操作。再次构建几何结构时,如果操作模式 设置更改回自动,对扩展序列的更改将自动重置。
使用增加容差来移除越来越大的细节,从而在不同的过程中移除细节。简单的几何结构可能只需要一个步骤,但是对于较复杂的几何结构,移除细节 操作需要三个步骤和一个清理步骤,如下所示。第一步从忽略顶点 1 开始,第二步从塌陷面 2 开始,第三步从塌陷面 3 开始。最后,清除步骤从忽略顶点 3 开始。

操作模式设置为 手动后,展开 移除细节序列。这可用于检查和/或修改自动移除。操作序列显示,在最后三个清理操作之前执行了三个操作。
一个几何结构的不同部分具有不同大小的细节,这要求使用不同的容差。在这种情况下,使用不同的容差来处理多个移除细节 操作是合理可行的方法;甚至可以选中不同的要移除的细节 复选框。如有需要,不仅可以选择域,还可以选择边界和边。
对于同一个几何结构,我们添加一个移除细节 操作,将叉形冠域(域 1)的最大绝对大小 设置为 2 mm。然后,使用忽略边 操作手动移除某些边。最后,为重叠域(域 3)添加另一个移除细节 操作。如下图所示,只有薄域 复选框被选中进行移除,选择列表 显示,在此操作完成后只剩下两个域。
为了消除重叠域,这里移除的实体列表相当广泛,这是因为此过程涉及许多不同的虚拟操作。重叠域最终成为转向管域的一部分。我们将无法选择该域,它将成为之前域的一部分,但可以通过扩展移除细节 操作的序列并手动修改选择来实现。,重叠要小得多,因此它成为哪个域的一部分并不重要。但是,对于重叠多的情况,可以根据需要进行更改。

对不同的域选择使用具有不同容差设置的多个 移除细节操作。最后一个操作移除域 3,即重叠域。
本篇博客,我们讨论了移除细节 操作的功能和用法。这个操作是自动化的,且非常有用,我们建议您在 COMSOL Multiphysics 中处理较复杂的几何结构时使用。对于导入的 CAD 设计,移除细节 特别有用,这是因为你很少有机会直接修改导入的设计。在处理最终几何结构时,此操作还可以移除由相交对象创建的实体,这些实体在原始对象中无法处理。
单击下面的按钮进入案例下载页面,尝试操作本篇博客文章中的模型。请注意,你必须登录 COMSOL Access 帐户并拥有有效的软件许可证才能下载 MPH 文件。
阅读这篇 知识库 文章中有关使用形成联合体 和形成装配 的更多信息。
您想知道创建网格划分序列的最佳方式吗?比如通过单独的操作节点对域进行网格划分与使用同一操作对整体域进行划分有什么区别?本文我们将讨论创建网格划分序列的不同方法,以及这些方法如何影响生成的网格。您将深入了解,当按序列应用网格划分操作时,会产生什么结果。
网格划分操作有两类:结构化和非结构化。结构化操作是映射 和扫掠,用于生成结构化网格,非结构化操作是自由三角形网格、自由四边形网格 和自由四面体网格,用于生成非结构化网格。
非结构化操作的一个显著特征是,它们可以对任何几何结构进行网格划分,而结构化操作只能对满足特定标准的几何结构进行网格划分。生成非结构化网格时,单元质量和指定的大小参数都要考虑在内,以便在 COMSOL Multiphysics® 软件得到针对计算的优化网格。除了指定大小参数之外,创建网格划分序列的方式也将影响最终的网格。接下来,我们通过研究几个例子来探究这些影响。
首先,我们解释一下,网格划分序列与顺序相关。假设我们想要研究二维模式下的两个相邻正方形。在右侧的正方形中,我们想要使用较细化的网格,原因可能是材料要求,也可能是我们要研究的物理场需要。
我们通过创建两个自由三角形网格 节点来创建网格剖分序列。在第一个自由三角形网格 节点中,选择左侧域,在第二个节点中,选择右侧域(如下图所示)。接下来,将全局大小 节点设置为预定义的超粗化,这是因为,最好在第一个全局大小 节点中指定最粗化网格大小。
进一步阅读使用网格划分序列教程模型中关于使用局部和全局大小 节点的内容(特别是 PDF 文档的第 10 页)。
为了指定较细的网格,我们将一个局部大小 节点添加到第二个自由三角形网格 节点,并指定预定义的大小为超细化。

网格划分序列包含一个全局 大小节点、两个 自由三角形网格节点和一个 局部大小节点。
绘制生成的网格时,我们可以看到左侧域完全由粗化网格划分,而右侧域共享边界附近有一些粗化单元。这是因为共享边界的边界网格由第一个操作固定,因此在它附近不存在任何细化单元。此外,共享边界右侧的粗化单元质量低于其他单元。

首先对左侧域进行网格划分得到的网格。尽管指定右侧域的网格为 超细化,右侧域还是有一些低质量的粗化单元。
如果交换两个自由三角形网格节点 的顺序,以相反的顺序执行操作(首先对右侧域进行网格划分),我们会得到不同的结果。在结果图中,我们可以看到现在的共享边界由比之前更细的网格组成。右侧域现在完全由细化单元组成,而左侧域共享边界附近有一些细化单元。因此,网格中单元数量增加了,最小单元质量 几乎增加了一倍,这意味着网格的整体质量提高了。

首先对右侧域进行网格划分得到的网格。现在,右侧域只包含细化单元,整体单元质量得到提高。
这里需要注意的是,之前操作生成的网格将对任何后续操作创建的网格产生约束。本例中,这意味着在之前网格边界附近生成的网格将会受到该边界单元尺寸的影响。
现在,我们来研究一个稍微不同的例子。假设我们研究的是与上述设置相同的正方形,但每个正方形在共享边界附近有一个圆孔。在本例中,假设我们希望两个域具有相同的单元大小。与前面的示例类似,通过在网格划分序列中添加两个自由三角形网格 节点并将它们分别应用在左右两个域来创建网格划分序列。这次,将全局大小 节点设置为预定义的常规 大小,并且不添加任何其他大小 节点。
最终得到的网格图不像我们预期的那样令人满意。在研究这个绘图时,可以看到,共享边界和下部孔之间的窄区域中的单元质量较差。由于首先对左侧域进行网格划分,因此在生成边界网格时不会考虑右侧域的几何结构。因为下部孔与边界之间的区域很窄,所以需要生成比共享边界上更小的单元,从而避免产生低质量单元。

首先对左侧域进行网格划分得到的网格。首先对左侧域进行网格划分,不会考虑右侧域的几何结构。结果是共享边界与下部孔之间的窄区域包含低质量单元。
此序列设置将无法生成在几何结构的所有区域都具有高质量单元的网格。在这个示例中,交换操作的顺序没有起到作用,问题只会转移到上部窄区域。其实,这里仅使用一个自由三角形网格操作,并将它应用在两个域上,就可以同时包含整个几何结构,并创建适合两个域的边界网格。
阅读上一篇博客文章”改进的四面体单元网格剖分功能“,了解生成四面体网格的详细过程。
当我们用一个操作绘制由序列生成的网格时,可以看到下部窄区域中的单元质量有了很大的提升。

同时对两个域进行网格划分得到的网格。由于边界网格是针对两个域生成的,因此下部窄区域中的网格质量得到改善。
即使在两个相邻域中可能具有相同的大小,对这两个域进行划分的顺序也会对最终的网格产生很大的影响。需要注意的是,使用单个操作对多个域进行网格划分时,计算机能够并行生成网格。出于这些原因,建议使用尽可能少的操作。
最后,我们将在三维模式下研究一个盒子内的线圈,以了解这些效果如何体现在更高级的几何结构中。我们使用的是内置线圈几何单导线线圈 – 矩形导线、跑道型、闭侧,可在“AC/DC 模块”的零件库中找到。建模时,我们在线圈周围添加一个盒子,并调整线圈,使一对线圈之间的区域变得非常窄,这意味着线圈之间需要非常细化的网格,来避免低质量单元。本例中,我们希望生成的网格为:盒子周围的网格较粗,线圈中的网格较细,线圈之间窄区域的网格足够细。

线圈几何结构。放大视图显示了线圈匝之间的窄区域。
我们将全局大小 节点设置为预定义值粗化值,然后开始创建网格划分序列。为了在窄区域获得足够小的网格,我们必须调整最小单元大小 参数,以便可以解析间距约为 1.7e-4m 的窄区域。通过在全局大小 节点中选择自定义 并将最小单元大小 设置为 2e-4m,就可以完成此操作,如下图所示。接下来,添加两个自由四面体网格 操作,在第一个操作中选择线圈,在第二个操作中选择周围的盒子。在作用于线圈的第一个自由四面体网格 节点上,添加一个局部大小 节点,并将它设置为预定义值常规。

全局 大小节点设置为 粗化, 最小单元大小设置为自定义值 2e-4m。
在下图中,我们可以看到类似于二维示例的结果:即使指定了较小的最小单元大小,窄区域的单元质量仍然非常差。同样,这也是由网格划分操作顺序导致的。当通过第一个操作对线圈进行网格划分时,周围盒子中的窄区域不会对边界上的单元大小产生约束。因此,边界网格是根据线圈上指定的网格大小(即常规)生成的。对周围的盒子进行网格划分时,共享边界的网格是固定的,因此窄区域中的网格单元只能为偏斜形状。

首先对线圈进行网格划分得到的网格。请注意,已经删除了半个盒子和一个线圈,以方便查看。由于首先对线圈进行网格划分,因此窄区域(红色)中生成的四面体网格质量较差。
接下来,我们按照最佳实践创建一个新的网格划分序列。添加单个自由四面体网格 操作并将它应用在整个几何结构。我们在操作中添加一个局部大小 节点,默认值为常规,设置域选择为线圈(如下图所示)。全局大小 节点的设置与上一个序列相同。

局部 大小节点指定代表线圈的域 2-11 的单元大小。
在创建这个网格划分序列时,考虑到周围的几何结构,用非常细的网格对线圈边界的边界网格进行网格划分。这样,窄区域中生成的网格单元更细且质量更好。
同时对两个域进行网格划分得到的网格。由于整个几何结构在一个操作中进行网格划分,因此内部边界上的网格比以前细得多,从而使窄区域中的单元质量更好。
综上所述,我们已经看到,网格划分序列中的操作顺序会对最终网格产生影响,这是因为生成的网格是固定的,所以来自前一个操作节点的任何网格都是后续操作的基础。最佳的做法是使用尽可能少的操作,并添加全局或局部大小 节点。此外,如果您需要在序列中进行多个操作(例如,想要使用不同的单元类型),考虑它们的顺序非常重要。
如果您有兴趣了解相关主题的更多信息,推荐以下资源:
想象一下一架优雅的三角钢琴的弧形琴盖。曲线对应于琴弦的长度,琴弦的长度对应于音高的感知。这种视觉感知体现了声学的一个重要元素:我们对音调的感知是基于对数的。这意味着声学现象涉及到较大的频率范围。因而,在对声学问题进行建模时,我们需要对这较大的波长范围进行网格划分。那怎么操作呢?
需要计算较大的频率范围,这意味着需要通过网格来解析较大的波长范围。为了有效地对大范围频率进行网格划分,在 COMSOL Multiphysics® 软件中使用有限元法(FEM)接口时,我们可以通过对给定频率范围重新划分网格来优化其单元大小。
有限元法在 COMSOL Multiphysics 的大多数接口中都能实现,包括压力声学,频域 和压力声学,瞬态 接口。“声学模块”中的其他接口为针对特定目的进行快速有效的计算,而引入边界元法(BEM)、射线追踪或 dG-FEM(时间显式)。当使用压力声学 接口时,有限元法采用网格来离散几何结构,并在这些节点处求解声波方程。通过这些节点数据间的插值可以得到完整的连续解。

带有多孔衬里的汽车消声器,使用 COMSOL® 软件中的压力声学功能进行建模。
在对有限元模型进行网格划分时,我们需要获得具有与几何结构良好近似的网格,并包含物理细节。使用压力声学 接口时,我们总是需要解析声波。质量好的网格可以解析模型的几何和物理场特性,但质量极好的优质网格可以精确地解决问题,并且使用尽可能少的网格单元。在本篇博客文章中,我们将探讨如何用最少的网格点对自由场/开放式问题进行网格划分。
网格单元由节点组成。对于线性网格单元,节点位于顶点。二阶多项式插值是 COMSOL Multiphysics 中波动方程的默认形函数。二阶(或二次)单元在单元长度方向有一个额外的节点,可以精确地解析波。对于自由场的波动问题,我们需要每个波长大约有 10 或 12 个节点来解析。因此,对于使用二次单元的基于波的建模,我们每个波长需要 5 或 6 个二阶单元()。对于短波长(较高频率),单元大小需要比频率较低的情况小。
音频应用涉及人类感知,频率范围为 20Hz 至 20kHz。在室温下的空气中,音频问题的波长范围从大约 17 m 到 17mm。如果我们用一种网格计算整个人类听觉频率范围,我们需要解析对应于 20 kHz 的波长。在高频端,这导致最大单元大小,或空间分辨率,为(17mm / 5 =)3.2mm。对最高频率的网格进行解析会导致用于低频预测的网格过于密集。在 20 Hz 时,波长为 17 m,每波长有 5360 个节点,远远超过所需的 10 或 12 个节点。每个节点都对应于计算机的内存分配。虽然这种密集网格方法从精确度的角度来看是很好的,但是过于密集的网格占用了计算资源,并因此需要较长的时间进行计算。
为了避免低效的网格划分方法,我们可以将问题拆分成多个较小的频带;最初是一个倍频程,其中每个频带的网格根据其频率上限来解析。本例中,中心频率 是以指定频率
参考的,
,
其中 是来自参考频率的倍频带数(正
为高音调倍频程,负
为低音调倍频程)。
频带上限和下限由中心频带频率定义
,
请注意 是
(因此高一个倍频程)。

在模型参数中定义倍频程。
我们可以在频域研究中使用这些参数,使用 range() 函数定义每个频带内点的对数分布
,
对数频率间隔 由频率范围除以频率数
。

设置每个倍频带的求解频率。
然后,最大网格单元大小(传统上给定变量名 hmax)取自给定频带的上限
.
请注意,如果你不知道声速,可以使用 comp1.mat1.def.cs(23[degC]) 来获取组件 1 中定义的(列表中)第一种材料在 23°C 时的声速。如果你使用内置材料 Air,声速来自理想气体定律,因此必需输入流体温度。

参数 hmax 应用于 最大单元大小的定制网格序列。
大小 节点中的最大单元大小 将应用于网格上。如果需要解析较小的几何细节,单元可以小于此约束条件,如下图所示。最小单元由最小单元大小 设置控制。曲率因子 和狭窄区域分辨率 设置也是重要的网格设置。

两个倍频带的网格单元质量俯视图。
如果 COMSOL Multiphysics 模型设置如上所述,它将产生一个倍频程的频率。然而,我们的音频研究需要多达 10 个倍频程。

对 执行参数化扫描,使得每个值都对应一个倍频程,并且频率上限和下限相应进行改变。
为了在 COMSOL Multiphysics 中实现参数化扫描,将参数化扫描 研究步骤添加到研究中以改变频带。使用参数的好处是,当参数化扫描变量 发生变化时,所有频带限制都会自动改变。参数
是参数化扫描的自然选择,这是因为
对应于一个频带。以这种方式进行设置意味着原始频率现在是参考频率,必须适当选择。
对于下面显示的结果,使用最高频率网格在相同范围内计算相同的频率。根据倍频带数分割网格的研究需要 32 秒,而单网格方法花费 79 秒,明显节省了时间和计算资源。

不同频率和网格的瞬时压力的底部视图。
倍频带 节点类型用于计算所需的响应。确保线标记位于数据点中。如果要获得一条连续的线,请将 x 轴数据 更改为表达式,然后输入频率变量 freq。

绘制连续线。

选择 点图并确保绘图设置如上所示。
前面的讨论提出了倍频带问题。但是,你可以使用一般形式
,
,
来实现以分数形式表示的倍频带。在上面的设置中,对于第三个倍频带,6。频带越窄,网格划分序列运行的次数越多,因此需要达到平衡。
在任意倍频带中设置通用网格划分过程的参数可在频带的网格重新划分模型中找到。可以将必要的参数保存在 .txt 文件中,在建立新模型时加载它们,从而避免每次输入。
本文中介绍的方法采用规范几何结构来清楚地说明优化网格的过程。因此,网格划分花费的时间相对较少。对于真实的几何形状,网格划分可能需要更长时间,优势可能不太明显。在这种情况下,你应该简化几何结构或使用虚拟操作来减少任何物理上不相关的几何结构。
对于某些问题,流体的温度或密度可能在计算域内发生显著变化。如果出现这种情况,声速会发生变化,并且必须包含在模型中。网格必须足够密集才能反映这一点。
此讨论与射线追踪、压力声学,边界元 和声学扩散 接口无关。本文中的信息可应用于气动声学 和热粘性声学 接口或基于 dG-FEM 的超声波 接口的自由场问题。流动的对流效应改变了波长,应该在源的上游或下游使用复杂的网格来体现这一点。线性纳维-斯托克斯 和线性欧拉 接口具有默认的线性插值(单元),因此每个波长需要 10 或 12 个单元。热粘性声学 接口设计用于解析声学边界层。该层的厚度也与频率有关,可以使用与这里所讨论的类似的方法用于该层的高效网格划分和分辨率。
最后,本文中的讨论明确假设波长是已知的。这种假设通常适用于自由场建模,但是对于有界共振问题,总声场取决于边界条件值和边界位置。这意味着压力振幅可以具有明显短于自由场波长的类似波长的形状。要获得精确的解,必须执行网格收敛研究。
这篇博客文章证明,根据频带重新划分网格可以节省大量时间。在 COMSOL Multiphysics 中,这是通过参数化上限和下限频带来实现的。这里演示的方法适用于可实现有限元并具有二次插值(单元)的接口。
亲自尝试操作:单击下面的按钮访问本文讨论的模型的 MPH 文件。请注意,你必须登录 COMSOL Access 帐户并拥有有效的软件许可证才能下载该文件。
阅读 COMSOL 博客了解更多关于如何增强网格划分过程的信息:
你有没有想过,模型几何的拓扑结构,换句话说,将几何体分解为域、边界、边和顶点等几何实体,是否会在某种程度上影响COMSOL Multiphysics® 软件中网格生成对计算资源的使用?如果是这样,那么你可能会对本篇博客感兴趣……
以下操作使用共享内存的并行:
自由四面体 是跨域和面的并行操作。这意味着当此操作在一个具有四个域的几何上生成四面体时,它最多可以使用四个内核,而如果几何中有一个域,则相同的操作只能使用一个内核——不管有多少个内核可用。类似地,自由三角形、自由四边形 和映射 操作在二维域和三维面之间是并行的。
边界层 操作是部分并行的。与其他操作不同,这个网格操作在每个域内是并行的。
最后,作为扫描 操作的一部分,连接面的网格划分(通过映射 操作完成)是并行的。
请注意,在网格操作的序列中,网格的建立是自上而下,一次一个操作。因此并行化是在每个操作中一次完成的。
在实际建模场景中,并行化的网格划分能加快多少时间呢?我们取一个 6 m×1 m×1 m 的块,在一台有 6 个内核的普通台式电脑上进行网格划分。在网格 下添加一个自由四面体 操作。在整个测试过程中,使用以下网格单元大小参数。
0.02 m0.01 m
基准示例测试中使用网格的 大小设置。
这些设置提供了非常精细的网格,从而产生了大约 1300 万个四面体单元。
我们设置了三个测试示例,其中的模型分别具有:
左图:具有 1 个域的 6 m×1 m×1 m 块(情况 1)。右图:与情况 1 具有相同外部大小的几何图形,但分为 6 个大小为 1 m×1 m×1 m 的域(情况 2 和 3)。
为了限制软件仅在一个内核上运行,可以将选项 -np 1 添加到启动命令。也可以在首选项 对话框的多核与集群计算 页面上执行此操作。
3 次测试的结果汇总在下表中。情况 1 和 3 中的网格划分将仅在 1 个内核上运行,并且需要大约相同的时间来划分网格。含 6 个域的几何结构(情况 2 和 3)具有更多的边界,因此会产生更多的三角形单元,这也意味着该几何结构需要更多的网格划分工作。在情况 2 中,网格算法使用所有 6 个内核,但网格划分时间减少到仅使用一个内核时的 25% 以下。
| 情况 | 域 | 时间 | 三角形单元 | 四面体单元 |
|---|---|---|---|---|
| 1 | 1 | 136 s | 1.51e3 | 13.0e6 |
| 2 | 6 | 31 s | 1.81e3 | 13.0e6 |
| 3(1核) | 6 | 147 s | 1.81e3 | 13.0e6 |
在六核台式计算机上运行的基准示例测试结果。测试显示从一个核(表中的第一行和第三行)到六个核(表中的第二行)有明显的加速。
你可能想知道是否应该将几何体划分为与核一样多的域,假设开始时的域较少。答案是:没有必要…
对域进行分割会导致更多的边界。这就给网格设置了更多的约束,反过来,这可能会给网格带来更复杂的情况。边界增加将需要更长的时间进行网格划分,通过比较情况 1 和 情况3 中三角形单元的时间和数量,我们可以清楚的看到这一点。还应该考虑到,分割域会导致需要更精细网格大小的狭窄域。请注意,这个基准示例中的情况是理想化的,即六个核上有六个相等的域。在实际情况下,更有可能的是一些域更复杂,并主导了网格划分的时间,从而导致速度降低。
边界层 操作在插入边界层单元时是平行移动点的,甚至在单个域上操作也可以这样做。因此,分割域不会提高性能,相反,因为额外的分割面需要更多的处理时间。
我们使用上面基准示例中的情况2(在最多六个核上进行六个域的网格化)来说明。并行化是按网格操作进行的,因此如果我们现在再添加另一个自由四面体 操作,并在每个操作中对三个域进行网格划分,则最多可以使用三个核。一般来说,建议使用尽可能少的网格操作(相同类型)。这不仅可以尽可能的并行化,而且还可以很好地优化网格的质量。要在不同的域或边界上设置不同的尺寸,请使用多个全局或局部尺寸属性,并且只使用一个自由四面体 操作。使用网格划分序列教程模型中讨论了有关设置全局和局部尺寸属性的细节。
在这篇博客中,我们讨论了 COMSOL Multiphysics 中网格划分算法的并行化方式。一个简单的基准示例测试结果表明,并行运行的网格划分可以通过将域的网格分布在更多核上来明显加快算法速度。
有关自由四面体 操作的更多信息,以及修改几何的可能方法,请查看以下资源: