共同仿真 — CAE 术语解释

分类: 术语表 | 2026-01-15
CAE visualization for co simulation - technical simulation diagram

共同仿真

🧑‍🎓

老师,Co-simulation 和「耦合分析」有什么区别吗?


共同仿真的理论基础

共同仿真的基本概念

🧑‍🎓

共同仿真和单纯地将多个物理现象耦合的仿真有什么区别?

🎓

本质区别在「计算执行主体」。耦合分析在单一求解器内求解多个支配方程,但共同仿真是不同软件(比如结构分析求解器和控制仿真器)独立运行,交换数据并行计算。FMI(Functional Mock-up Interface)规范是其代表性实现方法。

🧑‍🎓

FMI 规范具体规定了什么内容?

🎓

主要规定两部分:FMU(Functional Mock-up Unit)的包装格式和 API。FMU 是 zip 压缩包,包含模型描述 XML 文件、共享库(.dll 或 .so)和资源文件。API 是 C 函数集合,通过 fmi2GetRealfmi2SetReal 等函数,主机环境可以访问 FMU 的状态变量或指示时间积分。

🧑‍🎓

数据交换的时序如何控制?随意交换不会导致计算发散吗?

🎓

这正是「Co-simulation 主控制器」和「通信步长」的关键问题。主控制器管理整个仿真时钟,例如每 1 毫秒暂停各 FMU 计算,交换变量值。步长过粗精度下降,过细计算代价巨大。汽车 ESC(电子稳定控制)仿真中,车身动力学和控制 ECU 间通常选 1~10 毫秒为典型值。

共同仿真的数值计算方法

算法与数据交换

🧑‍🎓

通信步长间隔内,各子系统怎样进行计算?对方的输入固定不变,积分误差不会很大吗?

🎓

正是这点,「Co-simulation 耦合误差」的主要来源。简单方法(显式耦合)将步长间的输入视为常数积分。更高精度的方法用前一步信息做补外(如一阶补外)。FMI for Co-Simulation 中,FMU 可提供

$$ \frac{\partial y}{\partial t} $$
导数信息,主控制器可用更高精度的补外算法。

🧑‍🎓

各 FMU 用的求解器(比如结构用隐式法,控制用显式法)互不相同也没问题吗?

🎓

这正是 Co-simulation 的重大优势之一。每个 FMU 内部可使用最优的求解器和时间步长。例如 Simulink 控制逻辑(固定步长 1 毫秒陽解法)和 Abaqus 非线性结构分析(自适应步长的隐式积分法)可在 10 毫秒间隔耦合。主控制器只管理「宏步长」,不干涉 FMU 内部的「微步长」。

🧑‍🎓

数据交换的顺序重要吗?从 A 传给 B,再从 B 回传给 A 这样?

🎓

非常重要,需要定义考虑因果关系的「执行顺序」。对于非因果系统(如相互交换力和位移的结构-结构耦合),采用 Jacobi 型(并行交换)或 Gauss-Seidel 型(逐次交换)算法。FMI 2.0 中,FMU 可声明「输出延迟」,主控制器据此确定正确顺序。顺序错误会产生代数环导致计算停止。

共同仿真的实务应用

工作流与验证

🧑‍🎓

实际组建共同仿真时,首先应该做什么?

🎓

首先编制「接口定义文档」。列出交换变量表(名称、单位、输入/输出因果性),通信步长的目标值,仿真总时间。例如「电机温度分析(JMAG)和冷却 CFD(FloTHERM)共同仿真」,交换变量是「发热功率[W]」和「最高温度[°C]」,考虑热时常数选 10 秒步长等。

🧑‍🎓

各子系统能否单独测试?

🎓

必须的。用「存根」或「测试工具」。例如测试结构分析 FMU,将控制端的输入(作动力)替换为脚本生成的时间序列数据(正弦波或阶跃输入)来运行。利用 Dassault 的 SIMULIA Co-simulation Engine 或开源 FMI 库,可验证 FMU 单体的输入输出响应。

🧑‍🎓

整体仿真完成后,怎样验证结果?共同结构容易混淆责任主体。

🎓

同步监控整体行为和各 FMU 边界的数据。具体地,把交换变量时间序列输出到日志,检查物理合理性(例如力值没有突然增大 10^6 倍)。做灵敏度分析,通信步长减半(如从 5 毫秒到 2.5 毫秒)看结果变化,若变化在允许范围内(如输出 0.5% 以内),步长合适。

共同仿真的软件比较

工具与平台

🧑‍🎓

主导共同仿真的「主控制器工具」有哪些?

🎓

大致分三类。1) 通用仿真平台:Siemens 的 Simcenter Amesim 或 Dymola,MATLAB/Simulink。Simulink 尤其是控制设计事实标准,能把其他 CAE 工具的 FMU 作为模块集成。2) CAE 专用耦合环境:Ansys Twin Builder、Dassault 的 SIMULIA Co-simulation Engine。3) 开源/研究用:INTO-CPS、基于 FMI 库的 Python 脚本。

🧑‍🎓

Ansys 和 Abaqus 在共同仿真的支持上有区别吗?

🎓

方式不同。Ansys 以「Twin Builder」为核心,从 Mechanical(结构)、Fluent(流体)、Maxwell(电磁场)导出 FMU,进行耦合。而 Dassault Systèmes(Abaqus)以「SIMULIA Co-simulation Engine」为中心,结合 Abaqus Standard/Explicit 和 CATIA Systems(或第三方 FMU)。另外,Abaqus 本身有「Co-simulation Executor」功能,可直接进行 Abaqus/Standard 和 Abaqus/Explicit 的共同仿真。

🧑‍🎓

开源 FMI 工具链能用于实务吗?

🎓

原型设计和研究足够。例如 JModelica.org(基于 Python)生成 FMU,用 FMPy(纯 Python 的 FMI 仿真器)执行的技术栈。但工业应用中,商用工具提供的强大求解器耦合、技术支持、大规模并行计算管理、ITAR 和 ISO26262 等规范认证至关重要,所以商用平台仍是主流。

共同仿真的故障排除

常见错误与对策

🧑‍🎓

仿真刚开始就「初始化错误」失败。怎样排查?

🎓

首先检查各 FMU 单独初始化是否正常。其次检查主控制器传给 FMU 的「初值」是否恰当。FMI 中,未设初值的输入变量处于「未定义」状态。例如结构分析 FMU 需要控制力初值,但主控制器没有提供,这种情况频繁出现。打开 modelDescription.xml 文件,检查变量定义的 initial="exact"causality="input",确保所有必需初值都在主控制器端设置。

🧑‍🎓

计算继续进行,但某个时刻数值发散(NaN 或极大值)。原因是什么?

🎓

主要三个原因。1) 通信步长过大,耦合误差累积导致不稳定。把步长减为 1/10 试试。2) 子系统本身不稳定。各 FMU 单独用共同仿真同样的输入条件运行,检查是否发散。3) 代数环。变量 A 是 B 的函数,B 也是 A 的函数,相互依赖,简单交换算法无法求解。此时需导入一步延迟元件,或主控制器切换到迭代求解模式。

🧑‍🎓

仿真速度比想象慢得多。怎样定位瓶颈?

🎓

分别计测各 FMU 的内部计算时间和数据交换、同步开销时间。多数主控制器有性能分析工具。若数据交换开销大,重新考虑通信步长。若特定 FMU(如高保真 CFD)计算时间占绝对比例,改进该 FMU 内部求解器设置,或用响应曲面模型(ROM)替代做成 FMU。Ansys Twin Builder 可从详细模型生成 ROM 并导出为 FMU,计算速度快数十到数百倍。

本文评价
感谢您的回答!
有参考
价值
希望
更详细
报告
错误
有参考价值
0
希望更详细
0
报告错误
0
由 NovaSolver 贡献者撰写
匿名工程师与 AI — 网站地图
查看个人资料