如何处理 Navier Stokes 方程中的非线性项(有限元代码)

计算科学 有限元 流体动力学 纳维斯托克斯
2021-12-06 10:40:48

我正在尝试使用有限元法求解 Navier Stokes 方程。我计划使用压力校正方法来处理压力以及用于扩散的隐式时间步进方案和用于对流的显式时间步进方案。我的问题是:如何使用有限元方法处理非线性项?我研究了几种方法。例如,我理解对于稳定问题,通常使用牛顿迭代。由于我对不稳定的问题感兴趣,我认为这种方法不合适。我还看到了一种方法,其中非线性项的一部分在最后一个时间步被“冻结”,因此在每个时间步,问题都表现为线性平流问题,即

uiuixjuin1uinxj

换句话说,前一个时间步()的速度被视为常数,并且在近似该术语时不使用形状函数扩展。这个方法好用吗?我应该使用什么方法来处理非定常 Navier Stokes 方程中的非线性项,其中精度、易于实现、稳定性和对不同雷诺数的鲁棒性都是考虑因素?uin1

谢谢

4个回答

您绝对可以使用牛顿方法来线性化在您及时离散化后得到的方程组。这是一种很常见的方法。在很多情况下,这可能是矫枉过正,但并非不合适。像您建议的那样冻结并且在时间步内根本不进行迭代可能会导致一些非常糟糕的解决方案,除非您的时间步非常小。但是您不想这样做,因为您对隐式方法感兴趣。

写出分裂方程,然后在时间上离散化以给出空间中的非线性 PDE。然后应用牛顿法。然后用 FEM 进行空间离散。

比尔回答的附录:牛顿迭代与隐式时间步长相结合通常足以使问题正规化,以允许每个时间步长只允许一次牛顿迭代(例如 - http://users.ices.utexas.edu/~benkirk/dissertation.pdf)。如果你的物理时间尺度不是太小,使用一个体面的预处理器,这可以与压力投影竞争。

对于您的问题:如果您正在做不稳定的流动,非线性项通常以明确的方式处理,因为它大致相当于对流项。只要您将非线性正确地视为具有非常量对流的线性对流方程(即混叠、高阶正交等),通常就可以了。

您说您使用显式时间步进方案进行对流。那么你根本不需要非线性求解器。

uin+1uinΔt+ujnuinxj+p~xiν2uin+1=0

其中下标表示空间坐标方向(i = 3D 中的 1,2,3),上标表示时间步长。这种方案是一致的,称为半隐式方案。非线性项可以转移到右手边,并在每个时间步成为残差的一部分。

如果您想要一个没有牛顿迭代的完全隐式方案,您可以使用“characteristics-Galerkin”方法。这是一种半拉格朗日方法,您可以在其中隐式逼近全导数:

DuDt|n+1un+1unX(x,tn)Δt
在哪里X表示通过的特征(x,tn+1),例如,可以通过求解 ODE 来计算。(所以最后这可能不会比牛顿法便宜多少。)有关详细信息,您可以查看

Mofdi El-Amrani 和 Mohammed Seaid,“不可压缩流的 Galerkin 特征解的 L2 投影”,SIAM J. Sci。计算机,第 33 卷第 6 期,第 3110-3131 页,2011 年。

如果您愿意,可以在 FreeFEM++ 中尝试该方法。为此,它有一个方便的“对流”运算符。

如果有人对此主题感兴趣,我们最近提出了一个基于线性对流算子的有限元公式。优点是您不需要在每个时间步采用迭代策略来求解方程。我们分别使用向后欧拉和广义阿尔法时间积分方案展示了时间上的一阶和二阶精度。一切都被隐含地对待。因此,对时间步长没有算法限制。

https://www.sciencedirect.com/science/article/pii/S0889974619309612