上一篇我们讲到,有限元真正怕的不是网格“长得丑”,而是坏网格会破坏一件更关键的事情:
标准单元到真实单元的映射。
有限元通常不是直接在每一个真实单元上重新发明一套计算规则。它更常见的做法是:先在一个规则、标准、容易计算的单元上定义好形函数、求导规则和积分规则,然后再通过映射,把这套规则搬到真实几何里的每一个单元上。
所以,一个真实单元长得好不好,最终不是审美问题,而是计算问题。真正要问的是:
标准单元上的那套计算规则,能不能顺利、可靠地搬到这个真实单元上?
这个问题,就引出了今天的主角:Jacobian,雅可比。
你可以先把 Jacobian 理解成:
标准单元到真实单元之间的一张“映射质量记录表”。
它记录的是:标准单元里的一小块区域,映射到真实单元之后,发生了什么变化。比如:

最常见到的 Jacobian 相关指标是下面三个:
这三个指标都和“映射好不好”有关,但关注点不一样。
Jacobian determinant 表示的是:标准单元里一小块面积 / 体积映射到真实单元后, 被放大或缩小了多少
如果是真实二维单元,可以把它理解成局部面积缩放;如果是真实三维单元,可以把它理解成局部体积缩放。它通常可以这样判断:
一个单元并不是只有一个位置需要计算。在有限元里,很多计算发生在积分点附近。同一个单元内部,不同积分点附近的 Jacobian 可能不一样。
Jacobian ratio 关注的就是这种差异,可以粗略理解成:
Jacobian ratio ≈ 单元内部最大 Jacobian / 单元内部最小 Jacobian
它通常可以这样判断:
Scaled Jacobian 可以理解成一个更工程化的、归一化后的网格质量指标。它不是只看原始的面积或体积缩放,而是把 Jacobian 和单元边长、边向量夹角、局部方向等几何尺度放到同一个相对尺度下比较,让不同尺寸的单元也能用一个相对统一的数值来判断质量。
不同软件的定义和范围不完全一样。有的软件显示 “-1 到 1”,有的软件则显示成 “0 到 1”:
所以,Scaled Jacobian 主要回答的是:
把不同形状、不同尺寸的单元放到一个相对统一的尺度下看,这个单元质量到底有多差。
因此,当我们说“Jacobian 变差”时,通常意味着下面这些情况:
这些指标越差,说明标准单元到真实单元的映射越不可靠。
有了上面的三个指标,坏网格为什么危险就更容易理解了。因为很多“形状不好”的网格,最后都会通过 Jacobian 指标表现出来。
比如一个四边形、三角形、六面体或四面体,本来应该有一定面积或体积。但如果它被压得很薄、很尖、很接近塌陷,那么标准单元映射过去以后,就会被压缩到非常小。
这时候 determinant 接近 0,单元接近退化。这种单元会让后面的导数转换和积分计算变得非常敏感。
单元长宽比很大时,不一定永远错。比如 CFD 边界层网格、薄壁结构、细长结构附近,高长宽比有时是有物理目的的。
但如果单元在不该拉长的地方被拉得过细过长,就可能让一个方向上的尺度特别大,另一个方向上的尺度特别小。这样一来,标准坐标到真实坐标的变换就会变得很不均匀。
它可能表现为: Jacobian ratio 变大,Scaled Jacobian 变低, 某些方向的导数转换变得敏感。
所以,长宽比本身不能脱离问题背景判断。真正要看的是:这种拉长有没有让映射质量变差,有没有让导数和积分计算变得不可靠。
如果一个单元角度很怪,或者四边形、六面体的面发生明显翘曲,标准单元映射到真实单元时,就不是简单的拉伸或压缩了。它还可能伴随剪切、扭转、局部方向变化。
这时常见的问题是:
同一个单元内部,不同位置的 Jacobian 差异很大。
也就是说,有的积分点附近还算正常,有的积分点附近已经很差。这种情况下,Jacobian ratio 往往会变差,Scaled Jacobian 也可能变低。这种单元即使没有立刻报错,也可能让单元内部的导数计算和积分计算变得不可靠。
最严重的情况,是单元局部发生翻转。二维里可以想象成一个四边形被扭成交叉或反折;三维里可以理解成局部体积方向反了。
这时最典型的表现是: Jacobian determinant 变成负值 Scaled Jacobian 可能出现负值 软件提示 negative Jacobian / negative volume / inverted element
这已经不是“网格质量差一点”的问题,而是几何映射关系本身出问题了。因为标准单元上的一个正常区域,映射到真实单元后,方向关系已经反了。很多求解器遇到这种情况会直接报错或停止。
有限元里,很多我们关心的结果不是直接算出来的原始量,而是由原始量进一步求导得到的。
结构分析里,经常是:
节点位移 → 位移在空间中的变化率 → 应变 → 应力
热分析里也类似:
温度 → 温度梯度 → 热流
所以,应力、应变、温度梯度、热流这类结果,本质上都和“空间变化率”有关。
问题是,形函数最开始通常定义在标准单元里。软件一开始容易得到的是形函数对标准坐标的导数,比如:
dN/dξ, dN/dη
但真实物理问题需要的是它对真实空间坐标的导数,比如:
dN/dx, dN/dy
这里要特别注意:
标准单元坐标 → 真实单元坐标的映射,用 J;
而标准坐标导数 → 真实坐标导数的映射,用 J 的逆,严格说常写成 J 的逆转置
为什么会这样?因为 Jacobian J 描述的是标准单元里一个很小的方向和距离,到了真实单元里会变成什么方向、什么长度。
而导数问的是另一件事:真实空间里沿着 x、y 方向变化一点点时,形函数变化多少。这个问题需要用链式法则“反过来”换算,所以会用到 Jacobian 的逆。
如果把梯度写成列向量,更常见的表达是:
真实坐标梯度 = J 的逆转置 × 标准坐标梯度
也可以写成:
∇x N = J⁻ᵀ ∇ξ N
如果把导数写成行向量,有些教材或程序会写成:
真实坐标导数 = 标准坐标导数 × J⁻¹
如果 Jacobian 指标比较好,比如 determinant 不接近 0、ratio 不大、Scaled Jacobian 不低,说明这个映射比较可靠。这时,标准坐标导数换算成真实坐标导数时,通常不会出现很夸张的放大。
如果 Jacobian 指标很差,比如 determinant 接近 0,说明某个局部区域已经被压得很厉害。这时Jacobian 矩阵接近奇异,矩阵的逆或逆转置会变得非常敏感,里面某些系数可能变得很大。
也就是说,当单元局部被压得接近退化时,真实空间里很短的一段距离,就可能对应标准坐标里明显的变化。软件在做导数转换时,就可能把一个原本不算夸张的位移变化,换算成很大的空间变化率。
于是,应变或应力就可能被放大。这就是为什么坏网格附近常常会先看到:
所以,“位移云图看起来还行,应力云图却突然乱跳”,并不奇怪。因为位移是原始量,应力是导数类结果。导数本来就比原始值更敏感。
Jacobian 的第二个关键作用,是影响积分。
有限元里很多量不是看一个点,而是要把整个单元内部的贡献加起来。比如结构分析里的:
热分析里的:
这些都离不开单元积分。但计算机不会真的把单元内部无穷多个点都算一遍。实际做法通常是数值积分:在单元内部选几个有代表性的积分点,在这些点上计算,再乘以权重加起来。
这些积分点,最初也是定义在标准单元上的。当标准单元映射到真实单元时,积分点也要跟着映射过去。同时,每个积分点代表的真实面积或体积贡献,也要通过 Jacobian 来换算。
可以粗略理解为:
真实单元积分 ≈ 积分点上的值 × 积分权重 × Jacobian determinant
这里就能看出 determinant 为什么重要。如果 determinant 合理,说明积分点代表的真实面积或体积权重比较正常。如果 determinant 接近 0,说明某个局部区域被压得很小,积分权重可能变得非常敏感。如果 determinant 变成负值,说明局部方向已经翻转,这时积分不只是“不准”,而是映射关系本身已经出错。
如果单元内部 Jacobian 变化很剧烈,也就是 ratio 变大,那么不同积分点代表的真实区域差异会很大。这会让数值积分的代表性变差。
所以,单元严重畸变时,积分上可能出现这些问题:
这样算出来的单元刚度、内力、质量、热传导矩阵等,就可能不可靠。也就是说,坏网格不只是让后处理云图不好看。它还可能影响单元矩阵和单元贡献本身。而这些单元贡献,最后会被组装进整体方程里。
到这里,我们可以把链条连起来。
前面讲的导数转换、积分权重、单元刚度和单元内力,最后都不是孤立存在的。有限元真正求解时,会把每个单元的贡献组装到一个整体方程里。也就是说,单个坏单元的问题,最后可能会变成整个模型求解过程中的问题。
为了让这个过程更好理解,我们先拿最常见、也最容易看清结构的例子来说:线性结构静力分析。
它的求解链条是:
单元贡献 → 组装成整体矩阵 → 求解整体未知量
这条链条常被粗略写成: K u = F
这里的 K 是整体刚度矩阵,u 是节点位移,F 是外力。整体刚度矩阵 K,正是由一个个单元刚度矩阵组装出来的。如果某些单元因为 Jacobian 指标很差,导致导数换算不稳定、积分贡献不可靠,那么这些问题就不只停留在那个单元内部。它们会进入单元刚度、单元内力等计算结果,再进一步进入整体矩阵和整体方程。
这就是为什么局部坏网格有时会影响整体求解。结果可能是:
对于非线性问题,这种影响会更明显。因为非线性求解不是一次算完,而是一步一步迭代。每一步都要根据当前状态更新刚度、内力、接触状态或材料响应。
如果某些单元已经严重畸变,后续迭代中它们可能进一步恶化,甚至出现:
这时候软件可能就不是“算得不够准”,而是“算不下去”。因为几何映射关系已经不成立,继续迭代没有可靠基础。
如果你看到这还是不太明白,没关系只需要记住下面这句话即可:
坏网格会让标准单元到真实单元的映射变差;映射一差,Jacobian 指标就会变差;Jacobian 指标一差,导数转换和积分转换都会受影响;这些异常进入整体方程后,就可能表现为应力乱跳、热流异常、结果不稳定,严重时甚至不收敛。
这里最关键的是,不要把 Jacobian 当成一个孤立的数学名词。它其实是在提醒我们:
这个真实单元还能不能可靠地承接标准单元上的计算规则。
如果 Jacobian determinant 为正且不接近 0,Jacobian ratio 不大,Scaled Jacobian 不低,通常说明映射质量还可以。
如果 determinant 接近 0、变成负值,ratio 很大,Scaled Jacobian 很低甚至为负,就说明映射已经变差,严重时会影响导数、积分和求解稳定性。
COMSOL Multiphysics Documentation, Mesh Element Quality. 该文档提到低网格质量会导致反转单元、高 Jacobian 条件数,并可能引起收敛问题。
https://doc.comsol.com/6.3/doc/com.comsol.help.comsol/comsol_ref_mesh.24.24.html
Altair HyperMesh Documentation, How Element Quality is Calculated. 该文档说明 HyperMesh 会在积分点或角节点处评估 Jacobian 矩阵行列式,并使用最小值与最大值的比值作为质量判断的一部分。
https://2021.help.altair.com/2021/hwdesktop/hm/topics/pre_processing/meshing/element_quality_how_its_calculated_c.htm
Autodesk Simulation Mechanical Help, Nonpositive Jacobian Errors or Distorted Elements. 该资料说明细长或畸变单元可能产生近零或负体积,从而导致 negative Jacobian、精度差或求解困难。
https://help.autodesk.com/cloudhelp/2018/ENU/SimMech-UsersGuide/files/GUID-62063F97-EC8B-408B-A5AA-6AD0A1662C92.htm
MIT OpenCourseWare, Finite Element Procedures for Solids and Structures, Lecture 8: Numerical Integrations, Modeling Considerations. 该课件涉及等参有限元中的位移插值、应变-位移矩阵、Jacobian determinant 与数值积分。
https://public.fangzhenxiu.com/fixComment/commentContent/imgs/1780302228968_8hdyct.pdf
FEAwiki, Chapter 2 - Isoparametric elements. 该资料介绍了等参单元、标准单元到真实单元的映射,以及高斯积分等基础概念。
https://www.feawiki.org/docs/chapter2/