4節点四面体要素(TET4)

分类: 構造解析 | 综合版 2026-04-06
CAE visualization for tet4 element theory - technical simulation diagram
4節点四面体要素(TET4)

理论与物理

TET4元素是什么

🧑‍🎓

老师,TET4是三维分析中最基本的元素吗?


🎓

虽然是最基本的,但它是不应该在实际工作中使用的元素。我先说清楚这一点。理由稍后会详细解释,但首先我们来理解理论。


🧑‍🎓

一上来就是“不要用”宣言啊…。


🎓

学习TET4的理论很重要。因为它是理解FEM基础的最佳元素。但是,如果实际工作中想要有精度的结果,就应该使用TET10。


形状函数

🎓

TET4是拥有4个节点的四面体,每个节点有3个自由度($u, v, w$)。总计12个自由度。


形状函数用体积坐标(barycentric coordinates)$L_1, L_2, L_3, L_4$ 表示:


$$ N_i = L_i \quad (i = 1, 2, 3, 4) $$

位移的插值:


$$ u(x,y,z) = \sum_{i=1}^{4} N_i u_i = L_1 u_1 + L_2 u_2 + L_3 u_3 + L_4 u_4 $$

🧑‍🎓

因为形状函数是线性(一次)的,所以位移在单元内也是线性变化的呢。


🎓

是的。位移是线性的,这意味着应变在单元内是恒定的。这是TET4的致命弱点。


恒定应变的问题

🧑‍🎓

应变恒定有什么问题呢?


🎓

在应力急剧变化的部位(应力集中部位、存在弯曲应力梯度的部位),完全无法表现应力的变化


🎓

例如,用TET4对承受弯曲的梁进行建模时:

  • 理论上,截面上面受拉,下面受压,呈线性分布
  • 而TET4在每个单元内应力恒定,所以只能得到阶梯状的粗略近似
  • 要得到精确的弯曲应力,需要极其精细的网格

🧑‍🎓

TET10(二次元)的话,应变在单元内线性变化,所以也能表现弯曲。


🎓

没错。TET10有10个节点,每条边上有中间节点,使用二次形状函数。应变在单元内线性变化,因此可以在一个单元内表现弯曲的应力分布。


TET4的刚度矩阵

🎓

TET4的单元刚度矩阵是12×12,由于B矩阵是常数矩阵,所以可以无需数值积分,以闭合形式计算:


$$ [K_e] = V_e [B]^T [D] [B] $$

$V_e$ 是单元体积,$[B]$ 是应变-位移矩阵(常数),$[D]$ 是本构关系矩阵。


🧑‍🎓

不需要数值积分是个优点呢。


🎓

计算速度快。但是精度低,所以最终需要细化网格,导致自由度数量增加,计算速度的优势被抵消。


定量的精度比较

🧑‍🎓

能给我看看TET4和TET10精度差异的具体数值吗?


🎓

悬臂梁($L/h = 10$)的尖端挠度与理论值比较:


元素类型网格DOF挠度误差
TET4粗糙(100个单元)200-40%(过小)
TET4中等(1,000个单元)1,500-15%
TET4精细(10,000个单元)12,000-5%
TET10粗糙(100个单元)1,200-2%
TET10中等(1,000个单元)9,000-0.3%
🧑‍🎓

TET4的10,000个单元(12,000 DOF)才勉强达到TET10的100个单元(1,200 DOF)的水平…。需要10倍的自由度。


🎓

在应力精度方面,差距会进一步扩大。因为TET4的应力在单元内恒定,所以应力集中的峰值无论网格细化到什么程度,都很难接近理论值


应该使用TET4的场景

🧑‍🎓

有正当理由使用TET4吗?


🎓

几乎没有。硬要说的话:


  • 显式解法(explicit)的冲击分析 — TET4的质量矩阵简单,有时对显式解法的稳定时间增量有利(LS-DYNA的某些情况)
  • 与流体网格的耦合 — 当CFD代码基于TET4时,有时结构侧也使用TET4以保持一致性
  • 前处理器的限制 — 一些旧的自动网格生成器只能输出TET4

🎓

但这些都是“不得已的情况”,如果能使用TET10,就应该始终使用TET10。


总结

🧑‍🎓

我来整理一下TET4的理论。


🎓

要点:


  • 4节点,线性形状函数,单元内应变恒定 — 最基本的3D FEM元素
  • 精度低 — 要表现弯曲或应力集中,需要比TET10多5~10倍的自由度
  • 实际工作中不使用 — TET10作为替代品总是更优
  • 最适合理论学习 — 理解FEM原理的教科书式元素
  • “不要用TET4”是FEM的铁则 — 仅凭知道这一点,分析质量就能显著提高

🧑‍🎓

为了理解“为什么不用”而学习,这很有趣呢。


🎓

了解TET4的局限性对于理解FEM的精度非常重要。能够解释为什么TET4不行的工程师,才是能够正确使用FEM的工程师。


Coffee Break 闲谈

TET4的线性形状函数与恒定应变特性

4节点四面体元素(TET4)拥有使用体积坐标L1~L4的线性形状函数,导致单元内应变恒定(Constant Strain Tetrahedron, CST)。1943年,库兰特(R. Courant)提出了三角形元素的概念,1956年,特纳等人将其扩展到三维四面体。作为最简单的3D实体元素,它易于实现,但由于应变恒定,在再现弯曲和应力集中时需要大量单元,这是其缺点。

各项的物理意义
  • 惯性项(质量项):$\rho \ddot{u}$,即“质量×加速度”。您有过急刹车时身体被向前甩出去的经历吗?那种“被带走的感觉”正是惯性力。物体越重越难启动,一旦启动也越难停止。地震时建筑物摇晃,也是因为地面突然移动,而建筑物的质量“跟不上”。静力分析中此项设为零,这是假设“因为缓慢施力,所以加速度可以忽略”。对于冲击载荷或振动问题,此项绝对不能省略。
  • 刚度项(弹性恢复力):$Ku$ 或 $\nabla \cdot \sigma$。拉弹簧时会感觉到“想要恢复原状的力”吧?那就是胡克定律 $F=kx$,也是刚度项的本质。那么提问——铁棒和橡皮筋,用相同的力拉,哪个伸得更长?当然是橡皮筋。这种“不易伸长性”就是杨氏模量 $E$,它决定了刚度。常见的误解:“刚度高=强度高”是不对的。刚度是“不易变形的程度”,强度是“不易破坏的程度”,是不同的概念。
  • 外力项(载荷项):体积力 $f_b$(重力等)和表面力 $f_s$(压力、接触力等)。可以这样想——桥上的卡车重量是“作用在整个内部上的力”(体积力),轮胎压路面的力是“只作用在表面上的力”(表面力)。风压、水压、螺栓的紧固力…全都是外力。这里容易犯的错误:弄错载荷方向。本想“拉伸”却变成了“压缩”——听起来像笑话,但在3D空间中坐标系发生旋转时,确实会发生。
  • 阻尼项:瑞利阻尼 $C\dot{u} = (\alpha M + \beta K)\dot{u}$。弹一下吉他的弦试试。声音会一直响下去吗?不,会逐渐变小。这是因为振动能量通过空气阻力或弦的内部摩擦变成了热。汽车的减震器也是同样的原理——故意吸收振动能量来提高乘坐舒适性。如果阻尼为零会怎样?建筑物在地震后会一直摇晃下去。实际上不会这样,所以设定适当的阻尼很重要。
假设条件与适用范围
  • 连续体假设:将材料视为连续介质,忽略微观不均匀性
  • 小变形假设(线性分析时):变形相对于初始尺寸足够小,应力-应变关系呈线性
  • 各向同性材料(特别指定时除外):材料特性不依赖于方向(各向异性材料需要另外定义张量)
  • 准静态假设(静力分析时):忽略惯性力·阻尼力,只考虑外力与内力的平衡
  • 不适用的情形:大变形·大旋转问题需要几何非线性。塑性·蠕变等非线性材料行为需要扩展本构关系
量纲分析与单位制
变量SI单位注意点·换算备忘
位移 $u$m(米)输入mm时,载荷·弹性模量也要统一为MPa/N系
应力 $\sigma$Pa(帕斯卡)= N/m²MPa = 10⁶ Pa。与屈服应力比较时注意单位制不一致
应变 $\varepsilon$无量纲(m/m)注意工程应变与对数应变的区别(大变形时)
弹性模量 $E$Pa钢:约210 GPa,铝:约70 GPa。注意温度依赖性
密度 $\rho$kg/m³mm系中是tonne/mm³(钢为 = 10⁻⁹ tonne/mm³)
力 $F$N(牛顿)mm系用N,m系也用N统一

数值解法与实现

TET4的实现细节

🧑‍🎓

TET4的实现比其他元素简单吗?


🎓

是最简单的。因为B矩阵是常数,所以不需要数值积分。作为FEM编程的入门是最合适的。


B矩阵的计算

🎓

根据4个节点的坐标 $(x_i, y_i, z_i)$ 计算体积坐标的梯度,构成B矩阵。TET4的B矩阵是6×12的常数矩阵:


$$ [B] = \frac{1}{6V} \begin{bmatrix} b_1 & 0 & 0 & b_2 & 0 & 0 & \cdots \\ 0 & c_1 & 0 & 0 & c_2 & 0 & \cdots \\ 0 & 0 & d_1 & 0 & 0 & d_2 & \cdots \\ c_1 & b_1 & 0 & c_2 & b_2 & 0 & \cdots \\ 0 & d_1 & c_1 & 0 & d_2 & c_2 & \cdots \\ d_1 & 0 & b_1 & d_2 & 0 & b_2 & \cdots \end{bmatrix} $$

这里 $b_i, c_i, d_i$ 是从节点坐标计算出的常数。$V$ 是四面体的体积。


🧑‍🎓

$V$ 怎么计算?


🎓

根据4个节点的坐标:


$$ V = \frac{1}{6} \det \begin{bmatrix} x_2-x_1 & y_2-y_1 & z_2-z_1 \\ x_3-x_1 & y_3-y_1 & z_3-z_1 \\ x_4-x_1 & y_4-y_1 & z_4-z_1 \end{bmatrix} $$

如果 $V > 0$,则节点顺序正确(右手系)。如果 $V < 0$,则单元翻转了。


各求解器对应的元素名称

求解器元素名称备注
NastranCTETRA(4节点版)PSOLID属性
AbaqusC3D4Standard/Explicit通用
ANSYSSOLID285旧版本是SOLID45
LS-DYNATYPE 13(四面体)主要用于显式冲击分析
CalculixC3D4与Abaqus兼容

🧑‍🎓

不同求解器名称不同,但理论是相同的吧?


🎓

是的。理论相同,但实现细节(如质量矩阵的集中化方法)可能略有不同。


实现代码示例

🎓

用Python(NumPy)实现TET4刚度矩阵计算的示例:


import numpy as np

def tet4_stiffness(nodes, E, nu):
    """计算TET4的刚度矩阵"""
    # 节点坐标 (4x3)
    x1, y1, z1 = nodes[0]
    x2, y2, z2 = nodes[1]
    x3, y3, z3 = nodes[2]
    x4, y4, z4 = nodes[3]

    # 计算体积
    V = np.abs(np.linalg.det([
        [x2-x1, y2-y1, z2-z1],
        [x3-x1, y3-y1, z3-z1],
        [x4-x1, y4-y1, z4-z1]
    ])) / 6.0

    # 计算b, c, d系数
    b1 = (y2-y4)*(z3-z4) - (y3-y4)*(z2-z4)
    b2 = (y3-y4)*(z1-z4) - (y1-y4)*(z3-z4)
    b3 = (y1-y4)*(z2-z4) - (y2-y4)*(z1-z4)
    b4 = -b1 - b2 - b3

    c1 = (z2-z4)*(x3-x4) - (z3-z4)*(x2-x4)
    c2 = (z3-z4)*(x1-x4) - (z1-z4)*(x3-x4)
    c3 = (z1-z4)*(x2-x4) - (z2-z4)*(x1-x4)
    c4 = -c1 - c2 - c3

    d1 = (x2-x4)*(y3-y4) - (x3-x4)*(y2-y4)
    d2 = (x3-x4)*(y1-y4) - (x1-x4)*(y3-y4)
    d3 = (x1-x4)*(y2-y4) - (x2-x4)*(y1-y4)
    d4 = -d1 - d2 - d3

    # 构建B矩阵 (6x12)
    B = np.zeros((6, 12))
    coef = 1.0 / (6.0 * V)
    b = [b1, b2, b3, b4]
    c = [c1, c2, c3, c4]
    d = [d1, d2, d3, d4]

    for i in range(4):
        idx = i * 3
        B[0, idx] = b[i] * coef
        B[1, idx+1] = c[i] * coef
        B[2, idx+2] = d[i] * coef
        B[3, idx] = c[i] * coef
        B[3, idx+1] = b[i] * coef
        B[4, idx+1] = d[i] * coef
        B[4, idx+2] = c[i] * coef
        B[5, idx] = d[i] * coef
        B[5, idx+2] = b[i] * coef

    # 弹性矩阵D (6x6)
    mu = E / (2.0 * (1.0 + nu))
    lam = E * nu / ((1.0 + nu) * (1.0 - 2.0 * nu))
    D = np.array([
        [lam+2*mu, lam, lam, 0, 0, 0],
        [lam, lam+2*mu, lam, 0, 0, 0],
        [lam, lam, lam+2*mu, 0, 0, 0],
        [0, 0, 0, mu, 0, 0],
        [0, 0, 0, 0, mu, 0],
        [0, 0, 0, 0, 0, mu]
    ])

    # 刚度矩阵 Ke = V * B^T * D * B
    Ke = V * B.T @ D @ B
    return Ke

🧑‍🎓

确实很简单。没有数值积分循环。


🎓

这就是TET4的优点。但别忘了,精度低是致命的。


网格质量的影响

🧑‍🎓

TET4对网格质量敏感吗?


🎓

非常敏感。特别是形状比(aspect ratio)差(细长)的单元,精度会急剧下降。


🎓

理想的TET4是正四面体。但实际形状中,建议:


  • 形状比 < 5
  • 内角 > 15度
  • 雅可比比(Jacobian ratio) > 0.1

🧑‍🎓

TET10对网格质量不那么敏感吗?


🎓

二次元对形状的适应性更强。但极端差的网格对任何元素都是问题。


总结

🧑‍🎓

关于TET4的实现,我明白了以下几点:


関連シミュレーター

この分野のインタラクティブシミュレーターで理論を体感しよう

シミュレーター一覧

関連する分野

熱解析製造プロセス解析V&V・品質保証
この記事の評価
ご回答ありがとうございます!
参考に
なった
もっと
詳しく
誤りを
報告
参考になった
0
もっと詳しく
0
誤りを報告
0
Written by NovaSolver Contributors
Anonymous Engineers & AI — サイトマップ
关于作者