边界条件:
V =0。u=0在右,左,下,和u=盖子速度在顶部BC
数值方法:
求解速度-压力耦合的简单算法。要了解交错网格中的索引工作原理,请查看“Versteeg, Malalasekera:计算流体动力学简介”教科书。控制方程的离散化是以本书为基础的。每次迭代都用Jacobi方法更新u和v。每次迭代均采用五对角矩阵算法直接求解压力修正方程。收敛需要正确选择欠松弛因子。对于这类问题,Jacobi方法是最低效的方法,但它简单,易于推广。我们鼓励您应用其他迭代方法,如逐行TDMA、Guess-seidel、多重网格或SOR,以更快地收敛。
压力校正:
我经常看到人们在用SIMPLE算法求解压力修正方程时遇到困难,因为P'的bc不清楚。下面是解决方法:
压力是一个相对的概念。因此,将域内一个节点的压力钳合为零作为边界条件,其他节点的压力将相对于该点进行测量。通常的做法是将P(1,1)设为0,因为P(1,1)已知P'(1,1)=0,但需要在其他节点计算P'。很明显,对于底部壁上的P'点,aS = 0因为它下面没有P'节点但它有aW aE aN。其他边界P'值将以这种方式设置。你最终会得到一个五对角线系数矩阵。
我已经写了这个代码在并行使用PETSc (C语言)。我将很快在GitHub上上传它。它比这个版本快得多,因为:
它是并行的,而不是串行的,所以你可以使用多个处理器。
2) C版本通过迭代几次解决动量方程,不像MATLAB版本只做一个雅可比扫描。
3)最重要的是,PETSc采用了Krylov子空间迭代法(类型:GMRES),同时还使用了pre冷气机(我发现Additive schwartz PC最好)来求解动量和压力校正,这在收敛速度上比Jacobi方法更高效。
乔丹Sarfi(2021)。基于SIMPLE算法的二维盖驱动空腔流动(//www.tatmou.com/matlabcentral/fileexchange/68348-2d-lid-driven-cavity-flow-using-simple-algorithm), MATLAB中央文件交换。检索.
我有个问题,这个问题中考虑了什么压强边界条件?
如果有人能说清楚,那就太好了。
@atafiroozi -当压力松弛参数减小时,解将收敛。当网格被细化时,这个值必须进一步减小。
@sanjana malaimagal基于有限体积法
有人会说,离散化是基于有限差分法还是有限体积法
你好,我认为弛豫不能在速度场中使用,只能在p*中使用
谁能告诉我为什么动量方程中的速度是明确计算出来的?难道它们不应该同时使用相邻的速度来计算吗?
@domenico bianchi Hi,他/她用C/ c++优先编写MATLAB代码,所以列优先和行优先有时会让人困惑:)
太棒了!
伟大的工作!
对于未来的更新,当您初始化Ap为稀疏(N,N),而不是零(N,N)时,每次迭代将会快75%左右。
在系数文件的矩阵中,我认为可变位置应该使用可变stride=imax来评估,而不是像你写的那样stride=jmax。在您的代码中imax=jmax是偶然的,但显然,如果需要更改,您必须使用正确的stride值。你能查一下吗?
这段代码在Re=1000时不收敛,我不知道为什么。
我很感激你的帮助。