OpenFOAM 不可压缩湍流模型的 divDevReff 函数

3.0 版本之前,OpenFOAM 的单相流求解器如 pisoFoam 的动量方程中调用的是湍流模型的 divDevReff 函数来考虑雷诺应力项的作用。只是,细究起来,这个函数似乎有点小问题,本篇来探讨一下这些小问题。

OpenFOAM 中单相不可压缩求解器中,雷诺应力项调用的是湍流模型中的 divDevReff 函数。这个函数的返回值为
$$
\nabla \cdot(\nu_{eff}\nabla U)+\nabla \cdot\left [\nu_{eff}\nabla U^\mathrm{T}-\frac{1}{3} \nu_{eff} (\nabla \cdot U) \mathbf{I} \right ]
$$
这里有两个疑问,第一是为什么是 $\frac{1}{3}$ 而不是 $\frac{2}{3}$,对应到代码,即为什么用 dev 函数而不是 dev2 函数?第二个问题,根据涡粘度的 Boussinesq approximation,雷诺应力项
$$
\overline{u’_iu’_j}= -\nu_t \left( \frac{\partial \bar{u}_i}{\partial x_j} + \frac{\partial \bar{u}_j}{\partial x_i} \right) + \frac{2}{3}k \delta_{ij}
$$
中应该还包含湍动能 $k$,而 OpenFOAM 中的 divDefReff 函数是没有 $k$ 这一项的。
这个话题,在 cfd-online 上的一篇帖子里有深入的讨论。

对于第一个问题,我跟Holtzmann CFD 博客的博主 Tobias Holzmann 持同样观点,即$\frac{1}{3}$ 或 $\frac{2}{3}$ 不重要,因为对于不可压缩流动,连续方程为
$$
\nabla \cdot U = 0
$$
所以,收敛以后,$\frac{1}{3} \nu_{eff} (\nabla \cdot U)$ 这一项等于0. 但是在开始阶段,或者说还没有达到满足连续性的流场之前,这一项不为零。这里加上这一项是出于数值稳定性以及收敛速度的考虑,这一项不对收敛后的结果几乎没有影响。所以,$\frac{1}{3}$ 或 $\frac{2}{3}$ 不是很重要。
但是,可压缩湍流模型里必须是 $\frac{2}{3}$ ,因为这个 $\frac{2}{3}$ 是从 N-S 方程中严格推导而来的,而且,在可压缩的情形下,即使收敛以后,也有 $\nabla \cdot U \neq 0$ 。在 OpenFOAM=3.0 以后的版本里,不可压和可压缩湍流模型纳入到一个框架下了,两种情形下,都是用的 $\frac{2}{3}$ 这个系数。

对于第二个问题,有两种观点,一种认为 $k$ 的值相对很小,可以直接忽略不计。另一种观点认为,$k$ 被放到了压力项里,即,动量方程中的压力是雷诺时均压力与雷诺应力的各向同性分量(即 $\frac{2}{3}k$)之和:
$$
\bar{u}_j\frac{\partial\bar{u}_i}{\partial\bar{u}_j} =
-\frac{1}{\rho}\frac{\partial}{\partial x_i} \underbrace{\left[p + \frac{2}{3}k \right]}_{p^\prime}
+ \frac{\partial}{\partial x_j} \left[(\nu+\nu_{t}) \left( \frac{\partial \bar{u}_i}{\partial x_j} + \frac{\partial \bar{u}_j}{\partial x_i}\right) \right]
$$
这种观点可以在 Pope 2000 书第 88 页找到依据。在 “ The Finite Volume Method in Computational Fluid Dynamics: An Advanced Introduction with OpenFOAM® and Matlab®” 这本书的第 699 页,也提到 $k$ 是被放到压力项里去了,目的在于使动量方程中只含有 $\nu_t$ 这一个跟湍流有关的未知量。

不过,Tobias Holzmann 最后仍持前一种观点,即 $k$ 项被忽略了。理由是 OpenFOAM 中似乎找不到关于修改的压力场的代码,而且 OpenFOAM 那边也没见有人讨论说 OpenFOAM 中使用的是修改的压力场。
第二个问题目前还没有确切的结论,也尚不清楚这样处理对结果有多大影响。