联合仿真(用MpCCI耦合)
理论:在时间上连接不同软件
概述
流体模型在Fluent,结构模型在Abaqus,想用MpCCI连起来做耦合分析。要注意什么?
MpCCI是德国Fraunhofer SCAI开发的耦合中间件,负责在不同软件之间交换界面数据(力、位移、温度、热流等)。最大优点是能直接使用熟悉的模型。要注意的是交换数据的时间间隔(耦合步长),以及间隔内的值如何假定。这里出错的话,无论各软件内部计算多准确,耦合结果都可能大幅偏离,或能量自发增长而发散。
算例模型
研究联合仿真特性的经典问题:两个质量由弹簧 $k_c$ 连接,拆成两部分,子系统1从对方接收 $x_2$,子系统2接收 $x_1$。$m$ = 1 kg,$k = k_c$ = 1,000 N/m,$c$ = 1 Ns/m。最短固有周期0.115 s。
交换方式
对方的值在耦合步长 $H$ 内可以保持不变(保持),也可以由前两次的值直线延伸(线性外推)。另外,还有两者同时使用上一步值的方式(Jacobi型)和一方先推进、把新值传给另一方的方式(Gauss-Seidel型)。
耦合中间件的出现
直到20世纪90年代,流固耦合通常由研究者自己改写程序来连接。各软件的数据格式和网格都不同,连接工作量巨大。于是在德国GMD(后并入Fraunhofer)的研究所开始开发MpCCI,作为不分软件交换界面数据的通用机制,21世纪初作为连接商用软件的工具得到普及。如今交换部件模型的FMI(Functional Mock-up Interface)标准也已普及,联合仿真已成为标准的设计手法之一。
算例:耦合步长与交换方式
从初始位移0.01 m求解2秒,与整体求解的参考解比较。各子系统内部用四阶龙格-库塔法,每个耦合步长分20个子步精确求解。表中为 $x_1$ 最大误差(相对初始位移的%)和2秒后能量与参考解之比:
| 耦合步长 | Jacobi+保持 | Jacobi+线性外推 | Gauss-Seidel |
|---|---|---|---|
| 1 ms(周期的1/115) | 19% (×2.1) | 0.6% (×1.00) | 9.0% (×1.4) |
| 5 ms(1/23) | 185% (×108) | 17% (×1.2) | 55% (×9.1) |
| 10 ms(1/11.5) | 发散 (×11,658) | 77% (×5.7) | 180% (×98) |
| 20 ms(1/5.8) | 发散 | 发散 | 发散 (×5,317) |
即使是周期的1/115这么细的步长,只保持数值也会偏19%?
对。保持数值意味着对方的位置总是稍旧的。弹簧力滞后作用,每个周期都给振动加一点能量。尽管有阻尼,2秒后能量仍是参考解的2.1倍,5 ms时为108倍。线性外推大大减少了滞后,同样1 ms时改善到0.6%。但外推也不是万能的,20 ms时所有方式都发散了。基本做法是改进交换方式,同时让步长相对周期足够小,或在每步内迭代使界面一致(强耦合)。
分析步骤
- 确定交换的量(力与位移、温度与热流等)以及哪个软件接收什么。
- 估算最短周期或时间常数,确定耦合步长候选值。
- 设置界面能量进出的监控。
- 把步长减半确认结果不变;若变化,加入外推或迭代(强耦合)。
- 界面网格不匹配时,选择保持总力守恒的传递方法。
“耦合后振动停不下来”
结构单独分析时逐渐衰减的振动,与流体耦合后一点点变大,最后计算停止了。耦合间隔按流体时间步长设定,但交换用的是保持方式。比较界面上流体做的功与结构接收的功,每步结构侧都稍多一些。把耦合间隔减半、改为外推位移后,振动正确衰减。检查耦合是否使能量增加,最快的办法是看界面功。
常见错误
错误与对策
| 错误 | 后果 | 对策 |
|---|---|---|
| 只按各软件步长决定 | 漏掉耦合误差 | 单独研究耦合步长 |
| 一直用保持方式 | 能量增加 | 外推或迭代 |
| 不看界面能量 | 不知道发散原因 | 监控界面功 |
| 不确认步长敏感性 | 结果可信度不明 | 减半比较 |
| 非守恒传递 | 总力偏差 | 守恒型映射 |
我想了解相关内容。