代码验证(Code Verification)

分类:解析 | 统合版 2026-04-06
CAE visualization for code verification theory - technical simulation diagram
代码验证(Code Verification)

代码验证(Code Verification)的理论基础

概要

🧑‍🎓

老师!今天是代码验证(Code Verification)的话题吧?那是什么东西呢?


🎓

软件中实现的数学模型被正确求解的验证。收敛阶数的确认是核心。



🧑‍🎓

哦~,关于软件中实现的话题,听起来非常有趣!请继续为我讲述更多内容。


支配方程




$$ E = \|u_h - u_{exact}\| = Ch^p + \text{H.O.T.} $$
$$ p_{obs} = \frac{\ln(E_2/E_1)}{\ln(h_2/h_1)} $$




离散化方法

🧑‍🎓

这个方程在计算机上实际是怎样求解的呢?


🎓

使用有限元法(FEM)进行空间离散化。组建单元刚度矩阵,构造整体刚度方程。


🎓

进行弱形式(变分形式)转换,使用试验函数和形状函数应用Galerkin法进行公式化。单元类型的选择(低阶单元 vs. 高阶单元完全积分 vs. 减少积分)直接关系到解的精度和计算成本的折中。




矩阵求解算法

🧑‍🎓

矩阵求解算法具体是什么意思呢?


🎓

通过直接法(LU分解Cholesky分解)或迭代法(CG法GMRES法)求解联立方程。对于大规模问题,预处理迭代法效果显著。



解法分类内存用量适用规模
LU分解直接法O(n²)小~中规模
Cholesky分解直接法(对称正定值)O(n²)小~中规模
PCG法迭代法O(n)大规模
GMRES法迭代法O(n·m)大规模·非对称
AMG预处理前处理O(n)超大规模
🧑‍🎓

也就是说,在有限元法的地方偷工减料,后面会吃大亏吧。我会牢记在心!


商用工具中的实现

🧑‍🎓

那么,要进行代码验证(Code Verification),可以用什么样的软件呢?


工具名称开发者/现在所属主要文件格式
MSC Nastran / NX NastranMSC Nastran(Hexagon)、NX Nastran(西门子数字工业软件).bdf, .dat, .f06, .op2, .pch
Abaqus FEA (SIMULIA)达索系统SIMULIA.inp, .odb, .cae, .sta, .msg
Ansys Mechanical (旧ANSYS Structural)ANSYS公司.cdb, .rst, .db, .ans, .mac
Ansys FluentANSYS公司.cas, .dat, .msh, .jou
Simcenter STAR-CCM+西门子数字工业软件.sim, .java, .csv
COMSOL MultiphysicsCOMSOL AB.mph
OpenFOAM开源(OpenCFD/ESI、OpenFOAM基金会)字典文件(blockMeshDict等), .foam

厂商系谱和产品整合历程

🧑‍🎓

各个软件的发展历程,有的时候相当富有戏剧性吧?



MSC Nastran / NX Nastran

🧑‍🎓

接下来是MSC Nastran的话题吧。什么内容呢?


🎓

作为NASA结构解析(NASTRAN)于1960年代开发。MSC Software将其商用化,之后UGS(现西门子)派生出NX Nastran。MSC于2017年被Hexagon AB收购。

现在所属:MSC Nastran(Hexagon)、NX Nastran(西门子数字工业软件)



Abaqus FEA (SIMULIA)

🧑‍🎓

Abaqus FEA,具体是什么意思呢?


🎓

1978年由HKS (Hibbitt、Karlsson & Sorensen)开发。2005年被达索系统收购,整合到SIMULIA品牌。

现在所属:达索系统SIMULIA


🧑‍🎓

等等等等,结构解析的话,也就是说这样的情况也能用吗?



Ansys Mechanical (旧ANSYS Structural)

🧑‍🎓

请为我讲述"Ansys Mechanical"!


🎓

1970年由Swanson Analysis Systems Inc. (SASI)开发。基于APDL(Ansys参数化设计语言)。

现在所属:ANSYS公司


🧑‍🎓

哦~,关于结构解析的话题,听起来非常有趣!请继续为我讲述更多内容。


文件格式和互操作性

🧑‍🎓

在不同软件间转移数据时有什么注意事项吗?


格式扩展名类型概述
STEP.stp/.step中立CAD符合ISO 10303的3D CAD数据交换格式。形状+PMI对应。
IGES.igs/.iges中立CAD早期的CAD数据交换规范。曲面数据互换性存在课题。正在向STEP过渡。
VTK.vtk/.vtu可视化Visualization Toolkit格式。由ParaView等使用。
🎓

在不同求解器间转换模型时,需要注意单元类型的对应关系、材料模型的兼容性、荷载与边界条件的表述差异。特别是高阶单元或特殊单元(内聚单元、用户定义单元等)往往无法在求解器间直接转换。


🧑‍🎓

原来如此…格式看似简单,但实际上非常深奥啊。


实务中的注意点

🧑‍🎓

教科书里没有的"现场智慧"之类的有吗?


🎓

网格收敛性的确认、边界条件的合理性验证、材料参数的灵敏度分析都是重要的。


🎓
  • 网格依赖性的验证:至少用3个水平的网格密度确认收敛性
  • 边界条件的合理性:设置在物理上有意义的约束条件
  • 结果的验证:与理论解、实验数据、已知基准问题的比较


  • 🧑‍🎓

    哎呀,代码验证(Code Verification)真的很深奥啊…不过多亏有老师的讲解,我已经整理得差不多了!


    🎓

    好的,加油!实际动手是最好的学习方法。有不明白的地方随时来问。


    验证数据的可视化

    定量显示理论值与计算值的比较。以误差5%以内为合格基准。

    评估项目理论值/参考值计算值相对误差 [%]判定
    最大变位1.0000.998
    0.20
    PASS
    最大应力1.0001.015
    1.50
    PASS
    固有振动数(1次)1.0000.997
    0.30
    PASS
    反力合计1.0001.001
    0.10
    PASS
    能量保存1.0000.999
    0.10
    PASS

    判定基准:相对误差 < 1%: 优良、1~5%: 许可、> 5%: 需要检讨

    代码验证(Code Verification)的数值计算方法

    数值方法详解

    🧑‍🎓

    具体用什么算法来求解代码验证(Code Verification)呢?



    🧑‍🎓

    我理解了先辈为什么说"代码验证一定要认真做"。


    离散化的公式



    🎓

    形状函数 $N_i$ 近似未知量:



    $$ u^h(\mathbf{x}) = \sum_{i=1}^{n} N_i(\mathbf{x}) \, u_i $$




    🎓

    用数学式表达如下。


    $$ K_e = \int_{\Omega_e} B^T \, D \, B \, d\Omega \approx \sum_{g=1}^{n_g} w_g \, B^T(\xi_g) \, D \, B(\xi_g) \, |J(\xi_g)| $$

    基本方程式的离散形式


    🎓

    用数学式表达如下。


    $$ E = \|u_h - u_{exact}\| = Ch^p + \text{H.O.T.} $$
    $$ p_{obs} = \frac{\ln(E_2/E_1)}{\ln(h_2/h_1)} $$

    🧑‍🎓

    嗯,光是看式子还看不出来…表达了什么呢?


    🎓

    将连续体支配方程离散化,得到以下代数方程组:



    $$ [K]\{u\} = \{F\} $$


    🎓

    其中 $[K]$ 是全体刚度矩阵(或相当的系统矩阵),$\{u\}$ 是未知节点变量向量,$\{F\}$ 是外力向量。


    🧑‍🎓

    啊,原来如此!连续体支配方程那样的机制啊。


    单元技术

    🧑‍🎓

    听说过"单元技术",但可能没真正理解…


    单元类型阶次节点数(3D)精度计算成本
    四面体1阶线性4低(剪切锁定)
    四面体2阶二阶10
    六面体1阶线性8
    六面体2阶二阶20非常高
    棱柱体线性/二阶6/15中~高

    积分方案

    🧑‍🎓

    积分方案具体是什么意思呢?


    🎓
    • 完全积分:精确积分所有项。刚度过度评估倾向(发生锁定)
    • 减少积分:减少积分点数。提高计算效率,但出现沙漏模式的风险
    • 选择性减少积分(B-bar法):体积项和偏差项分开积分。避免锁定

    • 🧑‍🎓

      听到这里,终于明白为什么单元类型那么重要了!


      收敛性和稳定性

      🧑‍🎓

      不收敛的时候,应该先检查什么?


      🎓
      • h-精细化:细化网格(减小单元大小h)提高精度
      • p-精细化:提高单元多项式阶次来提高精度
      • hp-精细化:同时优化h和p

      • 🎓

        收敛速度:二阶单元的误差以 $O(h^2)$ 的数量级减少(光滑解的情况)


        🧑‍🎓

        原来如此…网格细化看似简单,但实际上非常深奥啊。


        求解器设置建议

        🧑‍🎓

        具体用什么算法来求解代码验证(Code Verification)呢?


        参数推荐值备注
        迭代法收敛判定$10^{-6}$残差范数基准
        预处理手法ILU(0) or AMG根据问题规模
        最大迭代次数1000不收敛时需重新设置
        内存模式In-core尽可能采用

        低阶单元

        计算成本低、实现简单,但精度有限。粗网格时可能产生较大误差。

        高阶单元

        在相同网格下达到更高精度。计算成本增加,但所需单元数往往减少。

        牛顿-拉夫逊法

        非线性问题的标准方法。收敛半径内二阶收敛。$||R|| < \epsilon$ 时判定为收敛。

        时间积分

        显式解法:条件稳定(CFL条件)。隐式解法:无条件稳定,但每步需要求解联立方程。

        验证数据的可视化

        定量显示理论值与计算值的比较。以误差5%以内为合格基准。

        评估项目理论值/参考值计算值相对误差 [%]判定
        最大变位1.0000.998
        0.20
        PASS
        最大应力1.0001.015
        1.50
        PASS
        固有振动数(1次)1.0000.997
        0.30
        PASS
        反力合计1.0001.001
        0.10
        PASS
        能量保存1.0000.999
        0.10
        PASS

        判定基准:相对误差 < 1%: 优良、1~5%: 许可、> 5%: 需要检讨

        代码验证(Code Verification)的实务应用

        实践指南

        🧑‍🎓

        老师,请为我讲述"实践指南"!


        🎓

        讲述代码验证(Code Verification)的实务解析流程和注意点。


        🧑‍🎓

        我理解了先辈为什么说"代码验证一定要认真做"。


        分析流程

        🧑‍🎓

        请从最初的一步开始教我!首先应该做什么?


        🎓

        1. 前处理 (预处理)

        • CAD数据的导入和形状简化
        • 材料特性的定义
        • 网格生成(单元类型、大小的决定)
        • 边界条件和荷载条件的设置

        🎓

        2. 求解 (求解)

        • 求解器设置(解法、收敛基准、输出控制)
        • 任务提交和计算执行
        • 收敛监控

        🎓

        3. 后处理 (后处理)

        • 结果的可视化(位移、应力、其他物理量)
        • 结果的验证和合理性确认
        • 报告的制作


        网格生成最佳实践

        🧑‍🎓

        怎样判断网格的好坏呢?



        单元品质指标

        🧑‍🎓

        请为我讲述"单元品质指标"!


        指标理想值允许范围影响
        长宽比1.0< 5.0精度降低
        雅可比行列式比1.0> 0.3单元退化
        翘曲< 15°精度降低
        斜度< 45°收敛性恶化
        锥形比0< 0.5精度降低

        网格密度的决定

        🧑‍🎓

        网格密度的决定具体是什么意思呢?


        🎓
        • 应力集中部:至少配置3层以上的单元
        • 应力梯度大的区域:单元大小调整为周围的1/3~1/5
        • 荷载施加点附近:局部细化
        • 远方区域:粗网格以确保计算效率


        • 边界条件设置指南

          🧑‍🎓

          听说边界条件这里出错的话,全部都会完蛋…


          🎓
          • 过约束注意:刚体移动的约束仅为6个自由度
          • 对称条件的活用:减少计算规模
          • 荷载的等价分配:集中荷载 vs. 分布荷载的选择

          • 🧑‍🎓

            啊,原来如此!过约束注意是那样的机制啊。


            按商用工具分类的实现步骤

            🧑‍🎓

            有很多种软件吧?请分别讲述它们的特点!


            工具名称开发者/现在所属主要文件格式
            MSC Nastran / NX NastranMSC Nastran(Hexagon)、NX Nastran(西门子数字工业软件).bdf, .dat, .f06, .op2, .pch
            Abaqus FEA (SIMULIA)达索系统SIMULIA.inp, .odb, .cae, .sta, .msg
            Ansys Mechanical (旧ANSYS Structural)ANSYS公司.cdb, .rst, .db, .ans, .mac
            Ansys FluentANSYS公司.cas, .dat, .msh, .jou
            Simcenter STAR-CCM+西门子数字工业软件.sim, .java, .csv
            COMSOL MultiphysicsCOMSOL AB.mph
            OpenFOAM开源(OpenCFD/ESI、OpenFOAM基金会)字典文件(blockMeshDict等)、.foam

            MSC Nastran / NX Nastran

            🧑‍🎓

            接下来是MSC Nastran的话题吧。什么内容呢?


            🎓

            作为NASA结构解析(NASTRAN)于1960年代开发。MSC Software将其商用化,之后UGS(现西门子)派生出NX Nastran。MSC于2017年被Hexagon AB收购。

            现在所属:MSC Nastran(Hexagon)、NX Nastran(西门子数字工业软件)



            Abaqus FEA (SIMULIA)

            🧑‍🎓

            老师的讲解很清楚!工具名的困惑消散了。


            常见失败和对策

            🧑‍🎓

            初学者容易犯的失误模式有哪些?我想事先知道!


            症状原因对策
            计算不收敛网格品质不良、边界条件不当网格改善、约束条件复审
            应力异常高应力奇点、网格依赖回避奇点、局部网格细化
            位移不符合物理材料参数错误、单位体系不统一输入数据确认
            计算时间过长不必要的细化、效率差的解法网格优化、并行计算

            质量保证检查清单

            🧑‍🎓

            教科书里没有的"现场智慧"之类的有吗?


            🎓
            • 用3个以上水平的网格密度确认网格收敛性吗?
            • 验证力的平衡(反力合计)吗?
            • 确认结果在物理合理范围内吗?
            • 与已知的理论解或基准问题进行比较了吗?


            • 🧑‍🎓

              哎呀,代码验证(Code Verification)真的很深奥啊…不过多亏有老师的讲解,我已经整理得差不多了!


              🎓

              好的,加油!实际动手是最好的学习方法。有不明白的地方随时来问。


              验证数据的可视化

              定量显示理论值与计算值的比较。以误差5%以内为合格基准。

              评估项目理论值/参考值计算值相对误差 [%]判定
              最大变位1.0000.998
              0.20
              PASS
              最大应力1.0001.015
              1.50
              PASS
              固有振动数(1次)1.0000.997
              0.30
              PASS
              反力合计1.0001.001
              0.10
              PASS
              能量保存1.0000.999
              0.10
              PASS

              判定基准:相对误差 < 1%: 优良、1~5%: 许可、> 5%: 需要检讨

              代码验证(Code Verification)的软件比较

              商用工具比较

              🧑‍🎓

              有很多种软件吧?请分别讲述它们的特点!


              🎓

              讲述支持代码验证(Code Verification)的主要商用CAE工具的功能比较和各产品的历史背景。


              🧑‍🎓

              我理解了先辈为什么说"代码验证一定要认真做"。


              支持工具列表

              🧑‍🎓

              那么,要进行代码验证(Code Verification),可以用什么样的软件呢?


              工具名称开发者/现在所属主要文件格式
              MSC Nastran / NX NastranMSC Nastran(Hexagon)、NX Nastran(西门子数字工业软件).bdf, .dat, .f06, .op2, .pch
              Abaqus FEA (SIMULIA)达索系统SIMULIA.inp, .odb, .cae, .sta, .msg
              Ansys Mechanical (旧ANSYS Structural)ANSYS公司.cdb, .rst, .db, .ans, .mac
              Ansys FluentANSYS公司.cas, .dat, .msh, .jou
              Simcenter STAR-CCM+西门子数字工业软件.sim, .java, .csv
              COMSOL MultiphysicsCOMSOL AB.mph
              OpenFOAM开源(OpenCFD/ESI、OpenFOAM基金会)字典文件(blockMeshDict等)、.foam

              MSC Nastran / NX Nastran

              🧑‍🎓

              接下来是MSC Nastran的话题吧。什么内容呢?


              🎓

              作为NASA结构解析(NASTRAN)于1960年代开发。MSC Software将其商用化,之后UGS(现西门子)派生出NX Nastran。MSC于2017年被Hexagon AB收购。

              现在所属:MSC Nastran(Hexagon)、NX Nastran(西门子数字工业软件)



              Abaqus FEA (SIMULIA)

              🧑‍🎓

              Abaqus FEA,具体是什么意思呢?


              🎓

              1978年由HKS (Hibbitt、Karlsson & Sorensen)开发。2005年被达索系统收购,整合到SIMULIA品牌。

              现在所属:达索系统SIMULIA


              🧑‍🎓

              等等等等,结构解析的话,也就是说这样的情况也能用吗?



              Ansys Fluent

              🧑‍🎓

              接下来是Ansys Fluent的话题吧。什么内容呢?


              🎓

              Fluent Inc.开发。2006年被Ansys收购。非结构化网格基础的通用CFD求解器。

              现在所属:Ansys公司


              🧑‍🎓

              哦~,关于结构解析的话题,听起来非常有趣!请继续为我讲述更多内容。


              功能比较矩阵

              🧑‍🎓

              预算和时间都有限,性价比最强的是哪个?


              功能NastranAbaqusAnsys MechanicalFluent
              基本功能
              高级功能
              自动化/脚本
              并行计算
              GPU对应

              转换时的风险

              🧑‍🎓

              转换时的风险具体是什么意思呢?


              🎓
              • 单元类型不兼容:求解器特有单元无法用中立格式表现
              • 材料模型的差异:即使同名,内部实现往往不同
              • 边界条件的重新定义:很多情况需要手动重新设置
              • 结果数据的比较:输出变量的定义差异(节点值 vs. 单元值、积分点值)

              • 🧑‍🎓

                啊,原来如此!不同工具间模型那样的机制啊。


                许可形式