有很多方法可以解决可压缩的纳维斯托克斯方程。一种方法是将所有方程(连续性、动量和能量)作为一个耦合方程系统一起求解。如果您的流动是无粘性的,这是一个相当简单的方程组来求解。但是如果你想模拟粘性流,你得到的非线性方程系统将非常大,甚至可能不适合你的机器内存。此外,求解非线性方程组本身也面临一系列挑战。
解决粘性流动的另一种方法是将方程解耦并在每个时间步内的迭代循环中以一次一个的方式求解每个方程。这使您可以在有限的计算机内存限制下更灵活地工作。它还线性化了动量方程中的平流项(以及能量方程中的动能项),因此您无需求解速度或能量的非线性系统。PISO(压力隐式分裂算子)和 SIMPLE(压力关联方程的半隐式方法)都是基于这个原理。虽然 PISO 和 SIMPLE 最初是为求解不可压缩的纳维斯托克斯方程而制定的,但它们也可用于求解可压缩版本。
这两种算法之间的混合有时被称为“PIMPLE”方案(piso 和 simple 的组合)。这种混合算法的工作原理如下:
for each timestep
for a fixed number of iterations N1
solve continuity equation (for density)
solve momentum predictor equation (for velocity)
solve energy equation (for energy)
for some fixed number of iterations N2
solve pressure equation
update velocity
update density (using the equation of state)
end
solve turbulence equations
end
end
在任何一个给定步骤,您都使用最近解决的数量。例如,在求解密度的连续性方程后,您使用此密度解求解速度的动量预测方程,然后使用此速度求解能量方程,等等...
你会注意到这个算法既有一个外循环(受 SIMPLE 算法的启发)和一个内循环(受 PISO 算法的启发)。这就是在 OpenFOAM 的rhoPimpleFoam求解器中求解可压缩纳维斯托克斯方程的方式。
准确性取决于您的网格/时间步长大小以及您如何离散每个方程中的运算符。对于时间导数,您可以使用曲柄尼科尔森方案及时获得二阶精度。对拉普拉斯算子(出现在动量预测器、能量和压力方程中)使用中心差分离散化将导致二阶精度。然而,连续性、动量预测器和能量方程都包含一阶散度算子(将它们视为空间中的一阶导数)。散度算子上的中心差是不稳定的。您可以通过为散度算子使用二阶迎风方案来实现二阶精度。根据流动的复杂性(例如冲击波和其他高马赫可压缩流动效应),二阶方案可能不会导致二阶精度和/或甚至可能不稳定。在这种情况下,最安全的做法是使用一阶迎风方案(即使它会降低整体精度,但通常会导致更稳定的时间步进和/或冲击捕获)。