强耦合与弱耦合
思路:信息如何、何时传递
概述
有人问我流固耦合分析“弱耦合够不够,要不要用强耦合”,我不知道判断标准是什么。
先把两个维度分开考虑。一是信息方向:只有流体→结构的单向,还是结构变形也反馈给流体的双向。二是传递时机:每步轮流求解一次、使用对方滞后一步的结果是弱耦合;在同一步内迭代到两者一致或整体求解是强耦合。需要哪一种取决于相互作用有多强,而流固耦合中有一个直观的指标。
耦合的分类
| 类别 | 做法 | 适用问题 |
|---|---|---|
| 单向 | 求解一方,把结果传给另一方 | 变形小、不影响流动(热应力、风荷载强度评估) |
| 双向·弱耦合 | 每步轮流求解一次(显式) | 相互作用弱(如空气中机翼颤振) |
| 双向·强耦合(分区式) | 每步内迭代至一致 | 相互作用强(液体与轻结构) |
| 双向·强耦合(整体式) | 把整体作为一个方程组求解 | 相互作用极强或迭代难以收敛 |
附加质量这一指标
结构加速时必须带动周围流体一起运动,因此结构表现得好像质量增加了。这就是附加质量 $m_a$,它与结构质量 $m_s$ 之比 $r$ 是相互作用强弱的良好指标。对于薄壳,大致为下式($\rho_f$、$\rho_s$ 为流体和结构密度,$R$ 为特征尺寸,$t$ 为壁厚)。
| 示例 | 附加质量比参考 | 耦合需求 |
|---|---|---|
| 空气中的飞机机翼(铝,厚3 mm,特征尺寸0.5 m) | 0.07 | 弱耦合即可 |
| 血液中的动脉壁(厚0.5 mm,半径4 mm) | 7.7 | 需要强耦合 |
血流仿真带来的教训
飞机颤振分析长期使用流体与结构交替求解的弱耦合,而且效果很好。但进入21世纪后,人们想用同样的方法求解血管中的血流与血管壁变形时,遇到了一个奇怪的现象:时间步长越小,发散得越快。原因是血液与血管壁密度几乎相同且管壁很薄,附加质量超过了结构质量。对这种“附加质量不稳定”的阐明,大大推动了分区式强耦合方法和松弛法的研究。
算例:单自由度模型
弱耦合(显式)发散的条件
弱耦合中,结构接收的是由上一步加速度算出的流体力,于是加速度误差每一步乘以 $-r$,$r > 1$ 时无论时间步长多少都会发散。对质量1、弹簧刚度1的结构计算200步,考察加速度幅值变化了多少倍:
| 附加质量比 r | Δt = 0.2 | Δt = 0.05 | Δt = 0.01 |
|---|---|---|---|
| 0.9 | 0.28倍(稳定) | 0.54倍(稳定) | 0.12倍(稳定) |
| 1.1 | 约670万倍 | 约6.4万倍 | 约2,300倍 |
| 2.0 | 10⁵⁸倍 | 10⁵⁶倍 | 10⁵⁵倍 |
即使减小时间步长,r 一旦超过1最终还是发散。
这正是附加质量不稳定的棘手之处。普通的数值不稳定减小时间步长就能消除,但它源于耦合方式本身,步长再小也治不好。表中是同样200步的比较,但误差每一步都在放大,步长越小同一物理时间内的步数越多,按时间看反而发散得更快。实际问题中,要像上表那样由密度比和壁厚估算大致的 r,接近或超过1时一开始就用强耦合比较安全。
强耦合迭代与松弛
强耦合在同一步内迭代更新加速度。直接代入时 r > 1 仍会发散,所以要给更新量乘以系数 $\omega$(松弛)。在单自由度模型中比较收敛到相对误差 $10^{-8}$ 所需的迭代次数:
| 附加质量比 r | 无松弛 | 固定 ω = 0.5 | Aitken |
|---|---|---|---|
| 0.2 | 12 | 21 | 2 |
| 1.0 | 不收敛 | 1 | 1 |
| 2.0 | 不收敛 | 29 | 2 |
| 10 | 不收敛 | 不收敛 | 2 |
固定系数偏离合适值(本例为 $1/(1+r)$)时会变慢甚至发散。Aitken 法由前两次残差自动确定系数,即使 r 很大也能快速收敛。由于这是单自由度线性问题,两次就收敛了;实际问题通常需要几次到十几次迭代。
实务中的选择
判断步骤
- 考虑结构变形是否影响流动(或温度、电磁场)。不影响则单向耦合就足够。
- 若是双向,用附加质量比等指标估算相互作用强度。
- 若较弱(r 足够小),先用弱耦合,并确认改变时间步长结果不变。
- 若较强,或弱耦合出现振荡、发散,就改用带子迭代的强耦合(如Aitken松弛)。仍难以收敛时考虑整体式。
流固耦合以外的例子
- 热—结构:若变形改变接触状态或间隙从而改变传热,则为双向;热膨胀小且接触不变时单向即可。
- 电磁—热:感应加热中导电率和磁导率随温度大幅变化,需要双向耦合。
- 时间尺度差异:当一方快(电磁)一方慢(热)时,常把快的一方做周期平均后传给慢的一方。
“耦合了结果却没变”是好消息
用双向强耦合重新求解,结果却和单向耦合几乎相同——这不是浪费时间,而是证明单向耦合已经足够。耦合分析中高效的顺序是:先用简单方法求解,再用更严格的方法确认结果是否改变。结果不变,下次就有依据使用简单方法;变化很大,则提供了理解哪种效应起作用的线索。
常见错误
错误与对策
| 错误 | 后果 | 对策 |
|---|---|---|
| 发散就减小时间步长 | 治不好附加质量不稳定 | 估算附加质量比并改用强耦合 |
| 松弛系数一直固定 | 迭代慢或发散 | 使用Aitken等自适应松弛 |
| 子迭代收敛判据过松 | 能量增加导致不稳定 | 同时用界面位移和力判断 |
| 不确认网格间的数据传递 | 力的总和不守恒 | 比较映射前后的合力 |
| 一开始就用最严格的方法 | 计算时间过长 | 从简单方法逐步提高 |
我想试试迭代和松弛的思路。
可以用高斯-赛德尔法模拟器和SOR松弛法模拟器看松弛系数对收敛速度的影响,用牛顿-拉夫森法模拟器确认非线性迭代的收敛。耦合方式的详细比较见分区式与整体式和交错耦合,网格间数据传递见非匹配网格间数据映射。