2. 控制体积与网格离散基础

有限体积法的核心思想只有一句话:把守恒定律写在有限大小的控制体积上,而不是写在无穷小的微元上。因此,在讨论通量之前,必须先回答三个几何问题——控制体积怎么构造、网格以什么方式组织、每个单元的面积、体积、法向量等几何量如何算准。这三个问题构成了后续所有通量计算的几何基础,本节围绕它们展开。

一、控制体积的构造方式

控制体积(Control Volume, CV)是守恒方程积分所依附的几何实体。构造方式主要有两类。第一类是单元中心型:网格单元本身就是控制体积,物理量存储在单元形心,守恒方程在单元体积上积分,界面通量在单元之间的公共面上计算。第二类是节点中心型:物理量存储在网格节点上,控制体积由围绕该节点的若干相邻单元各取一部分拼合而成(例如二维中连接各相邻单元形心与边中点围成的多边形)。

两种构造的差别不只是存储位置。单元中心型的控制体积边界与网格面完全重合,界面法向、面积直接来自网格,几何处理简单,是目前主流CFD软件(如OpenFOAM、Fluent的有限体积求解器)的默认选择;节点中心型的控制体积边界是“拼”出来的,需要额外构造对偶网格,但便于在节点上施加边界条件,在结构力学与某些不可压求解器中更常见。选择哪种,取决于变量存储习惯与边界处理需求,一旦确定,后续通量面的定义必须与之匹配。

二、结构网格与非结构网格

结构网格的节点按(i, j, k)三个索引规则排列,每个内部单元有固定数量的邻居(二维4个、三维6个),连接关系可由索引直接推算,无需显式存储邻接表。它的优点是几何量可预计算、访存连续、通量循环可用三重循环展开,效率高;缺点是贴体性受拓扑限制,复杂外形需要分块或采用多块对接。

非结构网格用显式的面—单元连接表描述拓扑,单元可以是四面体、六面体、棱柱、多面体,每个单元的面数不固定。它贴体灵活,适合复杂几何,但需要存储 face-owner-neighbour 关系,通量循环要遍历面列表,访存不连续,且网格质量(如畸变度、非正交性)对精度影响更敏感。

实际工程中常采用混合策略:物面附近用棱柱层保证边界层分辨率,远场用四面体填充。此时几何量计算必须对不同类型的面统一处理,不能假设“每个单元固定6个面”。

三、几何量计算:面法向、面积与体积

通量计算真正依赖的几何量有三个:面法向量 S(大小等于面积,方向指向单元外法向)、单元体积 V、面心与单元形心位置。以三维多面体单元为例,常用做法是:

  • 面法向与面积:对面多边形的顶点按右手定则排序,用叉积求和得到面积向量 S = ½ Σ (ri × ri+1),其模为面积,方向由顶点顺序决定。必须统一约定“外法向为正”,否则相邻单元通量符号会冲突。
  • 单元体积:以单元形心为基点,将单元分解为若干以面为底的锥体,V = (1/3) Σ (Sf · rf),其中 rf 为面心相对形心的位置矢量。
  • 形心:可由顶点坐标平均或按体积加权求得,用于梯度重构与高阶插值。

这里有一个容易出错的细节:面法向的“外”是相对于哪个单元而言。在非结构网格的面列表中,同一个面被 owner 单元和 neighbour 单元共享,通常约定 S 指向 owner 单元的外侧,neighbour 单元使用 −S。若代码中两侧都直接用存储的 S,通量会重复计入或相互抵消,表现为质量不守恒。因此几何量计算完成后,应做一次“闭合性检查”:对封闭单元,Σ Sf 应近似为零向量,Σ (Sf · rf) 应等于 3V。这两个恒等式是验证几何数据正确性的最直接手段。

控制体积几何量与面法向约定示意 单元中心型:单元即控制体积 形心 P 形心 N S(owner外法向) −S(neighbour侧) 公共面法向指向 owner 外侧,neighbour 取负 节点中心型:对偶控制体积 节点 橙色虚线:由相邻单元形心与边中点围成的对偶控制体积 几何闭合性检查(验证几何数据正确性): Σ S_f ≈ 0(封闭单元法向和为零) | Σ (S_f · r_f) = 3V(体积恒等式) | 面法向统一取外法向

四、从几何量到通量:一个可执行的检查流程

几何量算完后,不要急着进入通量循环,先做一次小规模验证。以二维四边形单元为例,假设某单元四个顶点按逆时针为 (0,0)、(1,0)、(1,1)、(0,1),则四条边的面积向量分别为 (0,−1)、(1,0)、(0,1)、(−1,0),求和为零向量,满足闭合性;体积(面积)为1,Σ(Sf·rf) 应等于 2V=2。若程序输出不满足,优先检查顶点排序方向是否一致、面法向是否统一取外法向、以及 owner/neighbour 的符号约定是否在通量循环中被正确应用。

建议在网格读入后立即输出三项统计:最大 |ΣSf|、最大 |Σ(Sf·rf) − 3V|、最小单元体积。前两项应接近机器精度量级,第三项若出现负值或极小值,说明网格存在翻转或退化单元,必须在通量计算前修复。

把上述内容串起来看:控制体积的构造决定了“守恒写在哪里”,网格类型决定了“邻居怎么找”,几何量计算决定了“通量面上的法向与面积是否可信”。三者共同构成通量计算的几何底座。后续无论是计算对流通量、扩散通量,还是处理边界面的零通量或给定通量条件,都直接调用这里得到的 S、V 与面心坐标。几何基础不牢,通量再精巧也会出现质量不守恒、收敛停滞甚至非物理解。