网格自适应的 2 种方法——实现更高效的计算

2019年 1月 16日

网格自适应的目标是修正网格以更有效地解决问题。通常,我们希望使用尽可能少的单元来获得精确的解;并希望在不太重要的区域使用较粗糙的网格,而在感兴趣的区域使用较精细的网格。有时,我们甚至可能会考虑各向异性单元。从 5.4 版本开始, COMSOL Multiphysics® 软件内置了增强工具以适应网格的变化。今天,让我们来看看在 COMSOL 软件中,如何使用网格自适应方法实现更高效的计算。

确定所需网格单元的大小

为了调整网格,我们必须知道实际所需的网格单元大小。但是,在实际工作中,需要进行大量的研究才能找到合适的尺寸。在 COMSOL Multiphysics 中,我们可以在研究中使用 自适应和误差估计 功能(用于稳态和特征值问题),基于内置误差估计自动调整网格。

在 COMSOL 软件中可以灵活地进行网格自适应,而不只是局限于内置误差估计。比如,我们可以先在粗网格上求解一个较简单的问题,然后基于该解通过计算的表达式来控制一个较难问题的单元尺寸。另外,还可以使用导入的插值函数或任何函数。

本文不涉及这方面内容,而是假设我们已经隐式或显式地知道所需的单元大小是 xy 和(在 3D 中)z 的函数。这意味着网格单元边长由该边中点坐标的函数表达式确定。通常,不可能完全满足此要求,即使是一个三角形也需要满足三角形不等式。但是,请记住:尺寸表达式表示空间中每个点上所需的单元边长。

根据尺寸大小函数适应网格的 2 种方法

在 COMSOL Multiphysics 中,从 网格 节点开始工作时,有 2 种本质上不同的方法来构建适应尺寸大小函数的网格。

第一种方法,我们可以在网格划分序列中使用大小表达式 属性来改变生成网格的大小。如果我们使用研究里的网格自适应,则相当于选择了 重建网格 选项,其中的自由网格生成器(自由三角形网格自由四边形网格自由四面体网格)会考虑这个尺寸大小。另一方面,结构化方法(例如映射扫掠,和某种程度上的边界层)忽略了大小表达式属性(根据定义,结构化网格不能遵循大小可变的字段)。简单来说,就是如果我们构建的是结构化网格,则可能无法使用此方法。

另一种方法是使用 自适应 操作。此操作通过单元细化和粗化修改现有的网格。我们可以在具有任何单元类型的网格上以及在导入的网格上使用自适应操作。这是一种更强大的方法,并且能够更好地遵循指定的大小表达式。但是,结果通常不如从头开始生成的网格平滑。

下面,我们将详细讨论这两种方法,看看结果有何不同。

使用大小表达式属性

如前所述,使用大小表达式属性方法通常能获得高质量的网格。但是,如果它产生的单元质量较差,则可能不遵守所需的大小(例如,进行快速大小转换时)。有关网格质量的讨论,请阅读 COMSOL 博客文章:如何检查 COMSOL Multiphysics® 中的网格。由于网格在每一次适应时是从零开始构建的,因此对于复杂的几何形状而言,此过程可能很耗时。

模型开发器的大小表达式属性设置窗口
使用大小表达式属性圆形几何的三角形网格应用一个表达式,结果具有高质量的网格单元和平滑的尺寸过渡。

如果我们具有已知的大小表达式(例如,全局插值函数),则在背景栅格上进行计算通常会很方便(上图中的栅格基础上计算)。我们需要确保栅格分辨率足够高以捕获大小表达式描述的所有特征。

当大小表达式取决于已知的空间变化量(例如材料)时,我们可以使用初始表达式计算选项。之后,可以使用模型中的任何表达式。软件将会在求解前计算表达式(对应于获取求解步骤的初始值命令,可用于研究步骤)。我们还可以指定某个研究步,因为一些表达式的值取决于研究。

最后,我们还可以在现有解上计算。表达式类型为错误指示器 用于内置错误估计,但我们也可以使用任何大小表达式——这可能依赖于现有的解。例如,我们可能想在应力较大的地方细化网格。

使用自适应操作

另一种方法是基于现有的网格,对其进行修改以匹配所需的大小。这就是自适应 操作的作用。它适用于所有尺寸,也可作用于导入的网格。它的许多选项和输入字段与大小表达式 属性相同。

该操作有三种适应方法:最长边细化常规细化通用修改。两种细化方法是基于单元边的二等分法,由于这些单元边太长,保留了所有现有的网格顶点,因此这些方法无法粗化网格。 自 5.4 版本开始,COMSOL Multiphysics 软件内置了通用修改 方法。顾名思义,即是以非常通用的方式修改网格:

  • 单元可以细化
  • 如果网格太细,可以删除顶点以粗化网格
  • 单元可以修改,网格顶点可以移动,以提高网格质量

COMSOL Multiphysics®中使用自适应操作
使用自适应操作的通用修改方法,对 大小表达式属性应用同一表达式。虽然对于大多数应用而言,网格单元质量足够高,但是大小过渡不如从头开始生成的网格平滑。

如果将适应方法更改为最长边细化,则结果如下所示。将太长的边一分为二,直到网格被充分细化。此网格操作非常快,但是即使输入网格的质量很高,该方法通常会产生低质量网格单元。

使用最长边细化作为其网格自适应方法的模型图像。
与上述模型相同,但是将自适应方法设置为 最长边细化。这里,我们可以看到原始三角形形状产生的图案。

支持所有单元类型

自适应 操作可用于所有单元类型的网格,也可以作用于结构化网格域(虽然,网格自适应后通常不再是结构化)。但是,当在复杂单元(二维中的四边形,三维中的六面体、棱柱、锥形)中使用此方法时,我们必须要小心,因为结果可能很差。下面,我们来看看在这种情况下单元尺寸大小是如何过渡的。在二维模型中,三角形插入到四边形网格中。

圆形几何中默认的网格
圆形几何中自适应后的网格

左:圆形几何中默认的自由四边形网格。以最大角度质量对单元进行着色。右:网格适应为与上面相同的大小表达式后的结果。请注意在尺寸过渡区域中三角形是如何使用的。

在三维结构中,通常将四面体和锥体用于尺寸过渡区域,在合适时也可以插入其他单元类型。下图显示了具有粗糙六面体网格的圆柱体,该圆柱体使用 0.02 + z*z 表达式进行适应。

默认的圆柱体网格
圆柱体模型的自适应网格

适应前后的圆柱体网格。

边界层网格的网格自适应

在以上所有示例中,指定的尺寸大小函数代表各向同性单元的大小;也就是说,一个理想形状单元的所有边都具有(大约)相同的长度。如果我们需要适应的网格是各向异性的(例如,沿边界伸展的边界层网格),则自适应会朝着各向同性方向修改网格。边界层单元甚至可能被完全删除!这不是我们想要的结果。一种解决方法是禁止粗化,则边界层会被保留。

带有边界层网格的矩形图示例
使用通用修改的自适应网格示例
使用禁用粗化的网格自适应示例

左:以原点为中心的矩形,含边界层网格。中:适应方法为通用修改, 大小表达式 0.04 + x*x。由于粗化操作,边界层被删除。右:禁用粗化操作的适应结果,边界层被保留。

构建各向异性网格

自适应 操作也可用于各向异性适应。各向异性网格单元是理想单元沿某个方向拉伸的单元。这种网格在 CFD 计算中很常见,一个典型的例子就是边界层网格。如果要进行各向异性适应,首先,选择 各向异性度量 作为表达式类型。然后,我们需要指定 2×2(二维)或 3×3(三维)对称矩阵。此操作意味着:代表单元边的向量在该点被矩阵转换,并测量了转换向量的长度。如果长度小于 1.0,则认为它太短。如果长度大于 1.0,则认为它太长。该措施用于控制适应。下图显示了如何使用此方法。

使用三角形单元剖分网格控制域
使用三角形单元剖分网格控制域。

具有各向异性网格自适应的控制域的图像。
应用各向异性适应方法。此时,度量由常数矩阵 \begin{pmatrix}10 & -10 \\-10 & 60\end{pmatrix}指定。

An image demonstrating the Free Triangular mesh operation.
通过自由三角形网格对周围的区域进行网格剖分

An image showing a mesh control domain merged with a larger model domain.
将网格控制域合并到较大的域中。

结语

综上,我们展示了如何使用 COMSOL Multiphysics 中的网格自适应工具来创建适合特定目的的网格。一种方法是选择网格 节点中的大小表达式 属性,用于控制生成三角形和四面体网格的大小,通常可以得到平滑且质量较高的网格。另一个方法是使用自适应操作,该操作会修改现有的网格。网格自适应是一个功能强大的工具,可以修改任何类型的网格也能生成各向异性网格单元。

下一步

了解有关 COMSOL Multiphysics 如何满足您的建模需求的更多信息,请单击下面的按钮,联系我们试用软件:

更多资源

 


评论 (0)

正在加载...
浏览 COMSOL 博客