做有限元分析时,我们经常会听到一句话:网格质量很重要。 软件也经常会提醒我们:单元质量差、元素畸变、Jacobian 异常、负体积、负 Jacobian,甚至求解不收敛。
刚开始学习有限元时,我一直有一个疑问:
网格不就是把模型切成一小块一小块吗?
那为什么有些单元只是看起来歪一点、扁一点、长一点,就会影响计算结果?这篇文章我们先不急着讲 Jacobian,而是先把逻辑链理清楚:有限元为什么会在意单元形状?坏网格到底破坏了什么?
在前面两篇文章里,我们已经分别讲过:有限元为什么要划分网格,以及 有限元如何用有限个节点去近似连续的真实世界。
这里不再展开,只抓最核心的一句话:
有限元先通过网格,把无限连续的真实世界变成有限个单元和有限个节点;然后再通过形函数,根据这些有限节点上的值,去近似单元内部原本连续变化的物理量。
也就是说,有限元一方面是在“降维”:把无限多个位置上的未知量,变成有限个节点上的未知量,让计算机能算;另一方面又是在“还原”:通过形函数,把有限节点上的结果重新扩展到单元内部,去近似连续世界。
这一点非常关键。因为接下来我们讨论“网格质量为什么会影响结果”,本质上就是在问:当单元形状变差时,有限元这套用节点和形函数近似连续世界的机制,会不会被破坏?
既然有限元要用形函数,根据节点值去推测单元内部的物理量,那一个自然的问题就来了:
形函数是不是直接定义在真实网格单元上的?
直觉上好像应该是这样。真实单元长什么样,软件就在这个真实单元上写一套形函数,然后利用真实节点上的位移、温度、压力等数据,去推测单元内部任意位置的值。
但实际上,有限元通常不是这么做的。为什么?因为真实模型里的网格单元太复杂了。有的是三角形,有的是四边形,有的是四面体,有的是六面体。即使是同一种类型的单元,也可能形状各不相同:有的比较规整,有的被拉长,有的被压扁,有的靠近复杂边界,被迫变得歪斜、扭曲。
如果每一个真实单元都要单独定义一套节点编号规则、形函数、积分点、求导规则和数值积分规则,那软件就很难通用,数学上也会变得非常复杂。
所以有限元采用了一个更聪明的办法:
先定义一套规整的标准单元。
所谓标准单元,可以理解成有限元里的统一计算模板。比如标准三角形、标准四边形、标准四面体、标准六面体。
这些标准单元本身不是某一个真实零件上的网格,它更像是一套提前设计好的模板。在标准单元上,软件已经规定好了:节点怎么编号、节点在标准单元里的位置、形函数怎么写、积分点放在哪里、如何求导、如何做数值积分、每个积分点对应什么权重。
也就是说:
标准单元提供的是一套统一的计算规则。
那真实单元提供什么?真实单元提供的是具体信息:这个单元在真实模型里的节点坐标,每个节点上的物理量,比如位移、温度、压力、电势,以及这个单元位于模型的什么位置、和周围哪些单元相连。
所以可以用一句话理解:
标准单元告诉软件怎么算,真实单元告诉软件在哪里算、用什么数据算。
这句话非常重要。因为有限元真正做的事情,就是把标准单元提供的计算规则,和真实单元提供的坐标、节点物理量结合起来,最终计算真实单元内部的物理量。
接下来就有一个关键问题:
标准单元和真实单元到底怎么对应起来?
这就要讲到有限元里的映射。
我们用一个四边形单元做例子。假设真实模型里有一个四边形单元。它可能不是一个规整的正方形,而是一个有些拉长、压扁或者歪斜的四边形。
有限元不会直接在这个真实四边形上重新发明一套计算规则。它会先拿一个规整的标准四边形作为模板,然后建立节点之间的对应关系:
标准节点 1 ↔ 真实节点 1
标准节点 2 ↔ 真实节点 2
标准节点 3 ↔ 真实节点 3
标准节点 4 ↔ 真实节点 4
但这个对应关系,不只是把四个角点对应起来。更重要的是:
通过这几个节点,建立标准单元和真实单元之间整块区域的对应关系。
也就是说,标准单元里的任意一个点,都可以映射到真实单元里的某一个点。反过来,真实单元里的某一个点,也可以找到它在标准单元中的对应位置。
这样,标准单元上的形函数、积分点、求导规则,才能被应用到真实单元上。
假设我们想知道真实单元内部某一点的温度、位移或压力。软件大致要做两件事。
第一步,先通过映射关系,找到这个真实点在标准单元里的对应位置。标准单元里通常用自然坐标表示,比如:ξ、η
真实空间里用真实坐标表示,比如:x、y
真实单元里的某个点:(x, y)
可以通过映射关系,找到它在标准单元里的位置:(ξ, η)
第二步,在标准单元里计算这个位置上的形函数值:
N1(ξ, η)、N2(ξ, η)、N3(ξ, η)、N4(ξ, η)
然后结合真实节点上的物理量进行插值。
比如温度:
T = N1 × T1 + N2 × T2 + N3 × T3 + N4 × T4
比如位移:
u = N1 × u1 + N2 × u2 + N3 × u3 + N4 × u4
所以真实单元内部任意一点的值,并不是软件随便猜出来的。它是通过:
标准单元到真实单元的映射关系
+
标准单元上的形函数规则
+
真实节点上的物理量
一起计算出来的。
讲到这里,网格质量的重要性就出现了。因为标准单元上的计算规则,要通过映射关系应用到真实单元上。
如果真实单元比较规整,标准单元映射过去比较自然。这时候:
但如果真实单元严重畸变,比如被拉得很长、被压得很扁、一个角特别尖、四边形严重歪斜、三维单元接近翻转、二阶单元中间节点位置异常,那么标准单元到真实单元的映射关系就会变差。
注意,这里不是说映射一定完全错了。只要单元没有翻转、没有退化,映射关系通常还是可以建立的。但问题是:
这个映射会变得很不稳定、很别扭、很病态。
标准单元上原本规整的计算规则,被强行拉扯到一个严重畸变的真实单元上,结果就可能不再可靠。
所以有限元不是怕单元有一点变形。有限元本来就允许标准单元映射成各种真实形状。真正危险的是:
单元变形到让标准单元的计算规则无法稳定地映射过去。
这也是为什么我觉得,理解网格质量,不能只盯着“这个单元好不好看”。更重要的是看:
标准单元那套计算规则,能不能稳定地映射到这个真实单元上。
有限元不是直接在每个真实单元上重新发明一套计算规则,而是先在标准单元上定义好形函数、积分点、求导和积分规则,再通过映射把这套规则应用到真实单元。
所以,网格质量差的本质问题,不是“网格长得不好看”,而是:
真实单元形状太差,会让标准单元到真实单元的映射关系变差。
而一旦映射关系变差,后面的形函数、积分点、导数转换和单元积分都会受到影响。
那么问题来了:
我们怎么衡量这个映射关系到底变形到了什么程度?
有限元里有一个非常关键的量,叫 Jacobian,也就是雅可比。
下一篇,我们继续讲:
Jacobian 为什么会影响应力、热流、积分结果,甚至导致不收敛?
FEAwiki, Chapter 2 - Isoparametric elements. 该资料介绍了等参单元、标准单元到真实单元的映射,以及高斯积分等基础概念。
https://www.feawiki.org/docs/chapter2/
Delft University of Technology, MUDE Textbook, Isoparametric mapping. 该资料说明常见有限元程序如何使用等参映射来关联形函数、积分方案和真实单元。
https://mude.citg.tudelft.nl/book/2024/fem/isoparametric_mapping.html
MIT OpenCourseWare, Finite Element Procedures for Solids and Structures, Lecture 8: Numerical Integrations, Modeling Considerations. 该课件涉及等参有限元中的位移插值、应变-位移矩阵、Jacobian determinant 与数值积分。
https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1780373963277_nqrcc6.pdf
University of Memphis, Chapter 10 – Isoparametric Elements. 该资料介绍等参单元及其在单元刚度矩阵构造中的作用。
https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1780373970263_oeqc94.pdf