共位格子 (Collocated Mesh) — CAE术语解说
Collocated Mesh 是什么
在CFD教科书中看到"共位格子"和"交错格子",共位格子到底是什么意思呢?
共位格子(Collocated Mesh)是指将速度 $u, v, w$、压力 $p$、温度 $T$ 等所有物理量都放在单元中心的同一位置的方式。"co-located"="放在同一位置"的意思。
这不是理所当然的吗?把所有东西都放在同一位置好像是最自然的方法啊…
问得好。从历史角度来看,事实并非如此。在1960~80年代结构化网格CFD的全盛时期,交错格子(Staggered Mesh)才是主流。在交错格子中,速度分量放在单元面的位置,而压力放在单元中心。通过故意错开变量的位置,可以获得数值上稳定的压力场。
与交错格子的比较
那么交错格子比较优越吗?为什么现在共位格子成为了主流呢?
交错格子确实可以自然地抑制压力振荡,在结构化网格中非常稳定。但有一个很大的弱点:很难应用到非结构化网格(三角形、多面体等)上。想象一下汽车车身或涡轮机叶片这样的复杂形状需要网格化,非结构化网格是必不可少的吧?这时候就轮到共位格子上场了。
明白了。两者大致上有什么区别呢?
是这样的:
| 项目 | 共位格子 | 交错格子 |
|---|---|---|
| 变量配置 | 所有变量都在单元中心 | 速度在单元面,压力在单元中心 |
| 非结构化网格 | 容易适用 | 难以适用 |
| 压力振荡 | 需要Rhie-Chow插值 | 自然被抑制 |
| 数据结构 | 简单(一种存储点) | 复杂(各速度分量有不同的存储点) |
| 主要采用求解器 | OpenFOAM, Fluent, STAR-CCM+ | 传统结构化网格代码 |
现在的主要CFD求解器几乎全部采用共位格子。内存管理也更简洁,代码维护性也更高。
棋盘式压力问题
前面提到"压力振荡",共位格子为什么会产生压力振荡呢?
这就是著名的棋盘式压力问题(Checkerboard Pressure Problem)。用一维来思考。用中心差分对运动量方程中的压力梯度项进行离散化,单元 $i$ 的压力梯度可表示为
这里要注意的是,单元 $i$ 的压力 $p_i$ 本身根本没有出现在这个式子里。奇数编号的单元和偶数编号的单元可以独立地拥有各自的压力场。
啊,也就是说只看间隔开的单元的压力,所以即使压力像棋盘一样交替变化也检测不到?
完全正确!例如,如果有一个压力分布 $p = [100, 0, 100, 0, 100, \ldots]$,中心差分会认为梯度为零。即使使用连续性方程进行压力修正,也无法消除这种振荡模式。结果压力场就会变成物理上不可能存在的棋盘式分布。这就叫"棋盘式"问题。
那交错格子为什么不会出现这个问题呢?
在交错格子中,速度被放在单元面上。面 $i+1/2$ 处速度对应的压力梯度为
这样就直接参考了相邻单元的压力。因此,不允许像棋盘一样间隔出现的压力分布。这就是交错格子之前稳定的原因。
Rhie-Chow插值
那共位格子是怎样克服棋盘式问题的呢?
1983年Rhie和Chow提出的Rhie-Chow插值(Rhie-Chow Interpolation)就是解决方案。这种方法与SIMPLE族压力修正算法配合使用。基本思想是这样的:
计算单元面的质量流量时,不是简单地对单元中心速度进行线性插值,而是加入基于压力梯度的修正项。具体来说,单元面 $f$ 处的速度计算为
$$u_f = \overline{u}_f - \overline{d}_f \left[ \left(\frac{\partial p}{\partial x}\right)_f - \overline{\left(\frac{\partial p}{\partial x}\right)}_f \right]$$其中 $\overline{u}_f$ 是单元中心速度的线性插值,$\overline{d}_f$ 是来自运动量方程系数的插值系数,括号内的第二项是"面处的压力梯度"与"单元中心压力梯度的插值值"的差。
嗯,看这个式子有点不太直观…。简单说就是在做什么呢?
粗略地说,是在共位格子上伪造出"如果是交错格子应该得到的压力梯度"。面处的压力梯度 $(\partial p/\partial x)_f$ 是用相邻单元的 $p$ 的差分计算的,所以直接看到 $p_i$ 和 $p_{i+1}$。而把单元中心的梯度插值到面上得到的 $\overline{(\partial p/\partial x)}_f$ 只包含间隔开的信息。取两者的差,就对棋盘式模式产生了阻尼(衰减)效果。
明白了,是加入人工耗散一样的东西。但这样的话精度不会下降吗?
问得敏锐。Rhie-Chow插值的修正项依赖于网格宽度 $\Delta x$,所以当网格细化时,修正量会变小,对精度的影响也就消失了。也就是说保证了网格收敛性。只不过,在非定常计算中已知存在时间步长依赖性,当 $\Delta t \to 0$ 时会出现过度阻尼问题。Choi(1999)和Yu等人的改进版本都对此进行了修正,但在实务中用默认设置一般不会产生大问题。
实务中的注意事项
在实务中使用共位格子时要注意什么呢?
有几个要点:
- 网格扭曲: 非正交性很大的网格(相邻单元中心连线与单元面法向之间的夹角很大)中,Rhie-Chow插值的压力修正可能变得不准确。对于OpenFOAM,可以通过增加非正交修正(non-orthogonal correctors)来应对。
- 压力边界条件: 在共位格子中,压力边界值定义在单元面上,但存储点在单元中心。入口、出口处的压力指定方式会影响精度,要仔细查阅求解器手册。
- 非定常计算的时间步长: 前面提到的,Rhie-Chow插值在 $\Delta t$ 极小时会出现过度阻尼。在VOF法追踪自由表面这类分析中,要结合Courant数管理来注意。
OpenFOAM和Fluent都是共位格子吧?日常使用中不会出现"选择网格类型"这样的设置吧?
对的,现在的主要求解器都以共位格子为前提,用户一般不会遇到"选择共位还是交错"的场景。Rhie-Chow插值也是由求解器内部自动应用的。但关键是,当解出现压力振荡倾向时,能否意识到"这可能是棋盘式问题"。这样才能成为改进网格质量或重新审视离散化方案的契机。
总结一下,共位格子因为能用非结构化网格而成为现代CFD标准,但需要用Rhie-Chow插值来处理棋盘式问题,对吧?
总结得完美!要记住的是,网格配置方式与离散化精度和稳定性直接相关。理解"为什么采用这种网格配置"、"内部进行了什么人工处理",对于提高结果的解释质量和排查故障的能力有巨大帮助。
定义
共位格子(Collocated Mesh / Co-located Grid)是指在有限体积法中,将速度、压力、标量量等所有解变量存储在单元中心(Cell Center)同一节点的网格配置方法。
与之相对,交错格子(Staggered Mesh)将速度分量放在单元面(Cell Face),压力放在单元中心,这源自Harlow & Welch(1965)的MAC方法。
共位格子的优点与课题
优点:
- 易于适用于非结构化网格(三角形、四面体、多面体)
- 数据结构简单,内存效率高,代码维护性好
- 所有变量都在同一位置,多物理场耦合求解更容易实现
课题:
- 中心差分型压力梯度离散化会产生棋盘式压力振荡
- 需要Rhie-Chow插值(1983)等压力-速度耦合方法
- 非定常计算中可能产生时间步长依赖的数值耗散
Rhie-Chow插值的数式表达
单元面 $f$ 处的质量流量速度由下式给出:
$$u_f = \overline{u}_f - \overline{d}_f \left[ \left(\nabla p\right)_f - \overline{\left(\nabla p\right)}_f \right]$$其中 $\overline{(\cdot)}_f$ 是单元中心值到面的线性插值,$d = V / a_P$($V$:单元体积,$a_P$:运动量方程对角系数)。第二项作为对棋盘式模式的衰减项发挥作用。
相关术语
- 交错格子(Staggered Mesh): 故意错开速度和压力存储点的网格配置方法
- SIMPLE法: 反复求解压力-速度耦合的代表性算法
- 棋盘式问题: 压力场呈棋盘式振荡的数值不稳定性
- 有限体积法(FVM): 共位格子应用最广泛的离散化方法
- 非结构化网格: 由三角形、四面体、多面体等不规则单元组成的网格
对CAE术语的准确理解是团队内沟通的基础。— Project NovaSolver也致力于支持实务者的学习。
请告诉我们在实务中使用共位格子遇到的课题
Project NovaSolver致力于解决CAE工程师日常面临的课题——设置的复杂性、计算成本、结果解释等问题。您的实务经验将成为开发更好工具的动力。
联系方式(准备中)相关主题
更详细
错误