Jos Stam 的稳定流体——为什么在减去无卷曲部分时乘以网格大小?

计算科学 流体动力学
2021-12-19 06:58:03

考虑到Jos Stam 的 GDC关于稳定流体的教程的第 10 页,该函数project()首先获得速度场的散度:¹

div[IX(i,j)] = -0.5*(u[IX(i+1,j)]-u[IX(i-1,j)]+
                     v[IX(i,j+1)]-v[IX(i,j-1)]) / N;
p[IX(i,j)] = 0;

然后从原始速度场中减去一个无旋度的部分,得到一个没有发散的速度场:

u[IX(i,j)] -= 0.5*(p[IX(i+1,j)]-p[IX(i-1,j)]) * N;
v[IX(i,j)] -= 0.5*(p[IX(i,j+1)]-p[IX(i,j-1)]) * N;

这对我来说通常是有意义的,除了一件事:我大致理解为什么第一个代码块除以- 使用有限差分计算规则网格上的N散度涉及除以相邻网格单元之间的距离。但是为什么第二个代码乘以N我认为计算均匀网格上的梯度也将涉及除以N,就像计算散度一样。


¹ 为了便于阅读,在下面的代码块中,我替换了h = 1.0/N本文实现中使用的倒数。

1个回答

对于散度计算:我们要求解的泊松方程是 这是通过在守恒方程两边取散度和给出的,因为我们假设结果速度场应该是无散度的。

p=uold.
unew=0

然后在同位网格上离散两边:

pi+1,j+pi1,j+pi,j+1+pi,j14pi,jh2=ui+1,jui1,j+ui,j+1ui,j12h

两边 h2

pi+1,j+pi1,j+pi,j+1+pi,j14pi,j=(ui+1,jui1,j+ui,j+1ui,j1)h2

这就是为什么你在计算散度(即 rhs)时得到h/2=0.5/N

对于速度更新部分,使用压力梯度更新新速度,然后有限差分为您提供因子。1/(2h)=0.5N