交错网格 — CAE术语解说

分类: 术语集 | 2026-01-15
CAE visualization for staggered grid - technical simulation diagram

交错网格

🧑‍🎓

CFD教科书中提到了「交错网格」和「共位网格」,但我不太明白它们有什么区别?

# 交错网格 — CAE术语解说

交错网格的理论基础

交错网格的基本概念

🧑‍🎓

交错网格是什么意思?为什么教科书中说「速度和压力在网格点上错开」?为什么要故意将它们错开呢?

🎓

这是个很好的问题。关键在于\"压力振荡(棋盘不稳定性)\"的抑制。当所有变量都定义在相同的网格点(共位网格)时,在离散化压力梯度项时会出现奇怪的情况——相邻的压力完全不对计算产生贡献。例如,在x方向动量方程中,

$$ -\frac{1}{\rho} \frac{\partial p}{\partial x} $$
用中心差分近似时,使用p(i,j)和p(i+1,j)的差,但这样p(i+1,j)和p(i-1,j)的信息就丢失了。这会导致非物理的高频压力振荡,最终导致计算发散。

🧑‍🎓

\"信息丢失\"是什么意思呢?有没有发散的具体例子?

🎓

比方说,在二维腔流问题中,初始条件设为所有网格点压力p=0,速度u=0。当求解器试图满足连续方程来修正压力时,共位网格下允许出现一种解:在棋盘模式中,不相邻的网格点(就像棋盘一样)上压力交替为正负。这种模式不会衰减,而是作为噪声叠加到速度场上,即使在Re=1000的情况下,也会在几个时间步后导致发散。交错网格通过将速度分量的定义点以半网格为间隔错开,从本质上建立了一种结构,使得压力梯度的计算能自然地利用相邻压力的信息。这就是1965年Harlow和Welch提出这一方法的根本原因。

🧑‍🎓

与控制方程的关系是什么?Navier-Stokes方程中哪一项的离散化特别成问题呢?

🎓

特别是非可压缩流动的动量方程中的压力梯度项和连续方程(速度发散=0)。非定常项、对流项和粘性项在共位网格上也没问题。交错网格配置下,在u速度点评估的x方向动量方程的压力梯度为:

$$ -\frac{1}{\rho} \frac{p_{i+1,j} - p_{i,j}}{\Delta x} $$
这里使用的压力p(i,j)和p(i+1,j)本来就是位于u速度点左右两边的\"单元中心\"压力点,它们彼此相邻。这从根本上解决了共位网格中\"使用飞跃点\"的问题。

交错网格的数值计算方法

离散化与求解器设置

🧑‍🎓

在实际编码实现交错网格时,数据应该如何存储?速度u、v和压力p需要用单独的数组吗?

🎓

完全正确。对于二维情况,压力p定义在单元中心,数组大小为[Nx, Ny]。x方向速度u定义在单元的左右面(x方向错开),数组大小为[Nx+1, Ny]。y方向速度v定义在上下面,数组大小为[Nx, Ny+1]。例如,计算域为1m×1m,网格数为100×100时,p数组为100×100,u数组为101×100,v数组为100×101。这就是\"交错\"的实质。

🧑‍🎓

边界条件的设置看起来很复杂,特别是在入口边界,应该怎样处理呢?

🎓

这是实现的关键。假设左边为入口边界(x=0)。这个边界与u速度点重合。因此,入口速度U_in可以直接设为u[0, :] = U_in。但压力点p[0, :]位于边界内侧半网格处。这里通常给定Neumann条件(∂p/∂x=0)的离散形式。具体来说,设想边界外有一个虚拟压力点p[-1, :],由

$$ \frac{p_{0,j} - p_{-1,j}}{\Delta x} = 0 $$
得到p[-1,j] = p[0,j],然后代入内部差分式。v速度点不在边界上,所以用线性外推等方法确定幽灵单元的值。

🧑‍🎓

我学过SIMPLE法,但压力修正方程的系数矩阵该怎样构建呢?与共位网格不同吗?

🎓

根本上完全不同。交错网格中,压力修正p'的方程是根据连续方程推导的,但离散连续方程在单元中心评估。例如,在单元(i,j)处:

$$ \frac{u_{i,j} - u_{i-1,j}}{\Delta x} + \frac{v_{i,j} - v_{i,j-1}}{\Delta y} = 0 $$
把速度修正与压力修正的关系(如
$$ u' = - ( \Delta t / \rho ) ( \partial p' / \partial x ) $$
)代入,就得到关于p'的五点差分(二维)方程。该系数矩阵是对角优势的,与共位网格相比条件数更好,迭代求解器收敛更快。这是交错网格的隐藏优势。

交错网格的实务应用

工作流程与检查清单

🧑‍🎓

在商用软件中设置采用交错网格的计算时,用户需要注意哪些设置项?不是应该有\"使用交错网格\"这样的复选框吗?

🎓

完全同意,显式的选择项很少。首先取决于\"离散格式的选择\"。例如,在Ansys Fluent中选择\"Pressure-Based\"求解器时,默认的空间离散格式是压力\"PRESTO!\"或\"Second Order\",速度\"Second Order Upwind\"等。此时内部采用交错型配置(Fluent是共位但使用Rhie-Chow插值来抑制振荡)。纯粹的交错网格实现存在于老旧代码或研究用代码中。用户应确认的是\"压力-速度耦合算法\"(SIMPLE、SIMPLEC、PISO)和\"梯度重构方法\"。这些掌控着棋盘抑制的逻辑。

🧑‍🎓

对计算结果进行验证时,交错网格是否有特殊的注意事项?例如,后处理中将速度和压力插值到同一位置时的精度下降?

🎓

很重要的指出。可视化结果时需要将所有变量插值到同一位置(通常是单元中心)。虽然线性插值就可以,但在评估壁面剪应力和压力系数时要特别小心。壁面剪应力τ_w由壁面处的速度梯度

$$ \tau_w = \mu \frac{\partial u}{\partial y} |_{wall} $$
求得,但最内层的u速度点位于壁面上方Δy/2处。使用一阶精度差分会产生很大误差。商用软件(如Star-CCM+)在后处理中使用高阶插值,但自行编写代码时,至少应使用二阶精度的单边差分。另一个优点是,计算体积流量时,穿过截面的速度分量已经在截面位置定义,可以不插值直接求和。

🧑‍🎓

非结构网格无法使用交错网格吗?

🎓

非结构网格中虽然可以在概念上应用,但实现很复杂,\"共位网格\"已成为主流。非结构网格中,所有变量都定义在单元中心(或节点上),用Rhie-Chow插值等手法来抑制压力振荡。OpenFOAM中的非结构有限体积法求解器大多采用这种做法。不过,某些专业代码确实有非结构\"交错\"网格的实现,其中速度定义在面心(MAC法的扩展)。但由于数据结构和边界条件处理极其复杂,汎用CFD软件几乎没有采纳。

交错网格的软件对比

各软件中的处理

🧑‍🎓

Ansys Fluent和Siemens Star-CCM+在内部如何处理交错网格的概念?

🎓

两者在现代实现中都以\"共位网格\"为基础,但结合了交错网格的优势,采用混合方法。

1. **Ansys Fluent**:默认的\"Pressure-Based\"求解器中,所有变量(压力、速度)都存储在单元中心(共位)。但在动量方程的压力梯度项评估和从连续方程构建压力修正方程时,应用\"Rhie-Chow速度插值\"。这种技法在共位网格的数据结构上,实现了本应在交错网格中获得的压力-速度耦合效果。Fluent 14.0之后,此插值默认应用,用户无法禁用。
2. **Siemens Star-CCM+**:同样采用共位方法。选择\"Second Order\"离散格式时,对流项、扩散项和压力梯度项都应用中心差分,Rhie-Chow型插值随之发挥作用。Star-CCM+手册中将此问题称为\"odd-even decoupling\",说明其自动被抑制。

🧑‍🎓

有没有商用软件仍然使用纯交错网格呢?

🎓

通用代码中基本没有,但特定领域的专业代码中有所保留。例如,在建筑风工程中常用的**PHOENICS**的早期版本采用了古典交错网格(MAC法)。开源软件中,**NASA的CART3D**(飞机用面元法/CFD混合代码)的内部求解器还有相关痕迹。但由于数据处理的复杂性和对非结构网格扩展性的低下,主流已在1990年代后期完全转向带Rhie-Chow插值的共位网格。

🧑‍🎓

OpenFOAM怎样呢?`icoFoam`等求解器是否使用交错网格?

🎓

`icoFoam`等OpenFOAM求解器的大多数采用**基于非结构有限体积法的共位网格**。所有变量都定义在单元中心。压力-速度耦合使用**PISO**或**SIMPLE**算法,其内部执行面心速度插值(`interpolate(U)`)。这个插值过程被设计为隐式产生与Rhie-Chow相同的效果。也就是说,OpenFOAM用户无需\"设置交错网格\"。不过,离散格式设置文件(`fvSchemes`)中对`div`(发散项)和`grad`(梯度项)格式的选择会影响此振荡抑制的强度。

交错网格的故障处理

常见错误与对策

🧑‍🎓

我用自己的代码实现交错网格,但只有在低速流动时才能运行,高速时就发散了。可能的原因是什么?

🎓

首先怀疑的应该是\"求解器发散\"而不是\"离散化本身不稳定\"。具体来说要检查以下几点。

1. **压力修正方程的源项**:是否正确计算了连续方程残差(质量不平衡)?单元(i,j)处的离散连续方程应是
$$ [ (u_{i,j} - u_{i-1,j})/Δx + (v_{i,j} - v_{i,j-1})/Δy ] $$
。确认下标没有错误。
2. **欠松弛因子(Under-Relaxation Factor)**:交错网格+SIMPLE法需要松弛系数。典型值为压力α_p=0.3,速度α_u=α_v=0.7。如果设为1.0(无松弛),高雷诺数时容易发散。
3. **边界条件的一致性**:出口边界是否正确指定了Neumann条件(∂p/∂n=0)?是否将压力参考点固定在一个位置?如未固定,压力场会浮动,导致收敛判定错误。

🧑‍🎓

计算是收敛的,但壁面附近的速度分布与理论解(如Blasius解)偏差很大。除了网格粗糙度还有其他原因吗?

🎓

交错网格特有的原因是\"壁面速度梯度评估的精度\"。如果用壁面与第一个u速度点的差来计算壁面剪应力τ_w为

$$ \tau_w = \mu \frac{u_{1} - u_{wall}}{\Delta y / 2} $$
,这是一阶精度,误差很大。对策是定义虚拟壁面外半网格处的幽灵单元速度u_0,然后用u_1和u_2进行高阶插值(二阶精度)来确定u_0。具体地,无滑移条件(u_wall=0)和u_1、u_2的二阶精度外推可给出关系
$$ u_0 = -u_1 + \frac{1}{3}u_2 $$
这样壁面附近的速度分布精度会大幅提高。

🧑‍🎓

我看到压力等高线图中,单元边界处有弱棋盘纹理,这是交错网格未正常工作的证明吗?

🎓

不一定。可能有两个原因。

1. **收敛不足**:在连续方程残差足够小之前就进行了可视化。对SIMPLE法,连续残差基准应至少设为10^-6以下,最好到10^-8再查看。
2. **高雷诺数和中心差分**:对流项使用中心差分且雷诺数较高时,会产生数值振荡,传播到压力场。这不是交错网格的缺点,而是对流项离散化的问题。解决方法是对流项改用一阶风上差分或高阶风上格式(QUICK、MUSCL)。或使用混合差分、幂律格式。在Ansys Fluent中遇到同样问题,建议把\"Solution Methods\"中\"Spatial Discretization\"的\"Momentum\"改为\"Second Order Upwind\"。

🧑‍🎓

扩展到三维时,特别需要注意什么?

🎓

数据管理和下标处理的复杂度剧增。压力p为[Nx, Ny, Nz],速度u为[Nx+1, Ny, Nz],v为[Nx, Ny+1, Nz],w为[Nx, Ny, Nz+1]。单元(i,j,k)的连续方程为

$$ \frac{u_{i,j,k}-u_{i-1,j,k}}{\Delta x} + \frac{v_{i,j,k}-v_{i,j-1,k}}{\Delta y} + \frac{w_{i,j,k}-w_{i,j,k-1}}{\Delta z} = 0 $$
必须始终确认各速度分量是否用对了下标。这是bug的温床。此外三维中压力修正方程的系数矩阵会
本文评价
感谢您的回答!
有帮助
需要更多
详情
错误
报告
有帮助
0
需要更多详情
0
错误报告
0
由NovaSolver贡献者撰写
匿名工程师 & AI — 网站地图
查看档案