CAE仿真回归测试——求解器更新与模型变更时的质量保证策略

分类: V&V / ベストプラクティス | 综合版 2026-04-12
CAE regression testing pipeline showing baseline comparison and automated validation workflow
CAE回帰テストの全体像 — ベースライン管理からCI/CDパイプラインまで

理论与背景

什么是CAE回归测试

🧑‍🎓

老师,回归测试是软件开发中的术语吧? CAE领域也会用到吗?

🎓

问得好。在软件开发中,回归测试是“修改代码后,确认其他功能是否被破坏”的过程,但在CAE中,完全相同的概念也是必要的。

🎓

CAE中的回归测试是指,当求解器版本升级、模型变更、网格重新生成、或者操作系统/编译器更新等,分析环境发生任何变更时,自动将新结果与过去被认定为“正确”的结果(基线)进行比较,并验证差异是否在允许范围内的过程。

🧑‍🎓

哦,也就是说,系统性地确认“虽然做了更改,但能得到和以前一样的结果,对吧?”

🎓

正是如此。例如,假设在汽车制造商进行碰撞分析。将LS-DYNA的版本从R12升级到R13时,过去已认定的模型的加速度峰值或侵入量是否发生了变化——如果手动逐一确认这是不现实的。因为可能有100个、200个模型。

🧑‍🎓

确实。如果手动全部做的话,感觉一周时间都不够用…

🎓

所以要自动化。自动执行基准问题集,自动比较结果,如果差异超过阈值则发出警报——这就是CAE回归测试的全貌。

为什么需要回归测试

🧑‍🎓

但是,求解器是商用软件吧? 仅仅是版本升级,结果就会改变吗?

🎓

会变的,真的会。 求解器供应商在版本升级时,会进行错误修复、算法改进、默认设置更改。这些都可能对结果产生影响。

🎓

举一些实际发生过的例子:

  • Nastran版本变更导致固有频率变动0.3〜0.5%(由于刚度矩阵组装算法变更)
  • Abaqus小版本更新导致接触判定的默认设置改变,接触力变化了百分之几
  • OpenFOAM版本变更导致湍流模型的壁面函数实现被修正,Cd值变化了2%以上
  • 仅编译器优化标志变更,就改变了浮点运算的舍入顺序,导致非线性分析中收敛路径发生分岔
🧑‍🎓

诶,仅仅编译器优化标志就能改变结果!? 那有点可怕啊…

🎓

正因为如此,回归测试才是必须的。在航空航天或核能等涉及安全认证的领域,每次变更求解器版本时,都要运行全部已认证的基准测试集是标准做法。在汽车碰撞安全领域,也需要始终确认与NCAP标准的一致性。

判定的数学框架

🧑‍🎓

“结果是否改变”,具体是如何判定的呢? 数值不可能完全一致吧?

🎓

说得对。因为是浮点运算,所以不期望完全一致。取而代之的是,根据相对误差绝对误差是否在允许范围内来判定。基本公式如下:

$$ e_{rel} = \frac{|Y_{new} - Y_{baseline}|}{|Y_{baseline}|} \times 100\% $$

其中 $Y_{baseline}$ 是基线(基准)结果,$Y_{new}$ 是新环境下的结果。判定标准是:

$$ e_{rel} < \varepsilon_{tol} \implies \text{PASS},\quad e_{rel} \geq \varepsilon_{tol} \implies \text{FAIL} $$
🎓

当 $Y_{baseline}$ 接近零时,相对误差会发散,所以此时使用绝对误差:

$$ e_{abs} = |Y_{new} - Y_{baseline}| < \varepsilon_{abs} $$
🧑‍🎓

基线在零附近时不能用相对误差呢。比如约束点的位移(理论上为零)之类的。

🎓

正是这类情况。在实际工作中,经常使用结合相对误差和绝对误差的复合判定

$$ \text{PASS} \iff (e_{rel} < \varepsilon_{rel}) \;\lor\; (e_{abs} < \varepsilon_{abs}) $$

此外,也管理整个测试套件的合格率:

$$ \text{Pass Rate} = \frac{N_{pass}}{N_{total}} \times 100\% $$
🧑‍🎓

整个测试套件的合格率也有标准吗?

🎓

许多组织将合格率100%作为发布条件。只要有一例FAIL,就必须调查原因,区分是“有意改进导致的变化”还是“错误”。如果是有意的变化,则更新基线。

求解器版本变更的影响

🧑‍🎓

能再具体一点告诉我,各个求解器在版本变更时容易出现什么样的影响吗?

🎓
求解器容易出现影响的变更典型的差异大小注意事项
MSC Nastran刚度矩阵数值积分精度变更固有频率 0.1〜0.5%SOL 103/111 需特别注意
Abaqus接触算法默认设置变更接触力 1〜5%必须阅读 Release Notes 中的 "Changed defaults"
Ansys MechanicalAPDL内部命令行为变更应力 0.5〜2%容易被 Workbench 掩盖
OpenFOAM湍流模型/壁面函数实现修正Cd/Cl 1〜3%v.com 版和 Foundation 版存在差异
LS-DYNA沙漏控制默认设置变更加速度峰值 2〜10%对碰撞分析影响大
🧑‍🎓

LS-DYNA的加速度峰值最大会变化10%? 对于碰撞安全来说,这不是大问题吗…

🎓

是大问题。所以,在汽车制造商的CAE部门,在求解器主要版本升级时,对数百个碰撞模型进行回归测试是常识。在涉及人命的领域,不允许偷工减料。

回归测试的适用范围与局限
  • 适用范围:求解器版本变更、操作系统/编译器变更、网格重新生成、材料模型修正、边界条件微调等,针对已知分析设置的变更验证。
  • 局限:回归测试终究只是验证“与先前结果的一致性”,并不能保证结果的“正确性”。如果基线本身是错误的,即使回归测试通过,分析结果也是不准确的。需要另外进行V&V(验证与确认)。
  • 覆盖范围的局限:对于测试套件未覆盖的物理现象或分析条件,回归测试无法检测。测试用例的设计决定了质量。
量纲分析与单位制
变量SI单位注意事项
容差 $\varepsilon_{rel}$— (无量纲, %)根据物理量种类设定不同值
容差 $\varepsilon_{abs}$各物理量的单位用于零附近值的判定。根据量级设定
测试合格率— (无量纲, %)取决于组织的发布标准(通常为100%)

回归测试判定的具体示例

从Nastran v2024迁移到v2025时的回归测试结果示例。容差根据案例分别设定。

评估项目v2024(基线)v2025(新版本)相对误差 [%]判定
悬臂梁 最大位移5.234 mm5.231 mm
0.06
PASS
平板一阶固有频率142.35 Hz141.89 Hz
0.32
PASS
螺栓接触力12,450 N12,870 N
3.37
FAIL
整体能量守恒99.97%99.96%
0.01
PASS
最大von Mises应力325.8 MPa326.1 MPa
0.09
PASS

判定标准: 相对误差 < 1%: 优良,1〜3%: 需注意,> 3%: FAIL(必须调查原因)

基线管理与容差设计

基线结果的管理

🧑‍🎓

“基线”具体是指什么样的数据,又是如何管理的呢? 是保存在文件服务器上用Excel管理之类的吗?

🎓

绝对不能用Excel管理(笑)。基线管理的铁则是“将机器可读的格式,保存在版本管理的仓库中”

🎓

具体来说,采用以下结构:

  • 将基线JSON或CSV存储在Git仓库
  • 为每个基线关联元数据:求解器名称/版本、执行日期时间、网格尺寸、操作系统/编译器信息
  • 结果值是标量值的提取结果(最大位移、最大应力、固有频率、反力合计等)
  • 根据需要,也将场数据(节点位移分布、应力云图等)以二进制格式保存
🧑‍🎓

原来如此。不是直接保存求解器的输出文件(.f06或.odb等),而是从中提取所需的数值进行保存啊。

🎓

是的。因为求解器输出文件有时会达到数GB。将提取的标量值以JSON格式保存,既可以利用Git的差异显示功能,也便于进行机械比较。例如,格式如下:

{
  "model": "cantilever_beam_001",
  "solver": "MSC Nastran",
  "solver_version": "2024.1",
  "date": "2026-01-15",
  "os": "RHEL 8.9",
  "results": {
    "max_displacement_mm": 5.234,
    "max_vonmises_mpa": 325.8,
    "freq_mode1_hz": 142.35,
    "reaction_force_n": 1000.02,
    "energy_balance_pct": 99.97
  }
}

容差标准的设计

🧑‍🎓

容差是怎么设定的呢? 如果全部统一设为0.1%之类的,虽然简单…

🎓

统一设定会出问题。因为不同物理量的数值敏感度完全不同。需要根据物理量的种类及其数值对设计判断的影响方式来改变容差。

🎓
物理量推荐容差 $\varepsilon_{rel}$理由
位移(全局)0.1〜0.5%刚度主导,稳定。变动小
应力(最大值)1〜5%网格依赖性高。奇异点附近变动大
固有频率0.5〜2%由质量/刚度平衡决定。相对稳定
反力合计0.01〜0.1%由力的平衡决定,非常稳定
接触力2〜10%强烈依赖于接触算法。求解器间差异大
CFD 阻力系数 Cd1〜3%依赖于湍流模型和网格
温度(最大值)0.5〜2%热传导相对稳定但对流项有变动
🧑‍🎓

应力和接触力的容差范围比较宽呢。确实,仅仅改变网格,应力值就会有很大变化。

🎓

这种感觉是正确的。另外重要的是,与安全系数直接相关的量,需要设定更严格的标准。例如,用于疲劳寿命评估的应力值,就需要比其他物理量更严格的标准。

多阶段判定的思路

🧑‍🎓

如果是PASS或FAIL的二选一,只要稍微超过阈值,不就全部不合格了吗?

🎓

注意到关键点了。在实际工作中,3阶段判定是普遍做法: