CFD边界条件

2024-05-20 07:16:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图理解一段来自paper concerning fluid simulations for games的代码。我在看边界条件的求解方法。因为我对C++没有任何了解,所以我有额外的困难。在

据我所知:

  • IX(i, j)表示位于x方向i处、y方向j的二维网格单元

  • u[IX(i, j)]是(ij)细胞中的速度

以下宏用于IX(i, j)

#define IX(i, j) ((i) + (N + 2) * (j))

Tags: 方法代码网格for方向速度games单元
1条回答
网友
1楼 · 发布于 2024-05-20 07:16:24

我不想把整篇文章都翻一遍,但我可以解释一下 语法,并对发生的事情做一些有根据的猜测。在

#define IX(i,j) ((i)+(N+2)*(j))

在我看来他们在转换二维坐标 i,j转换为一维数组索引。j是行号,i 是与您的描述相符的列号,以及总数 列数是N+2。在

^{pr2}$

然后我们有了这个:

x[IX(0,i)] = b==1 ? -x[IX(1,i)] : x[IX(1,i)]

在C中,a ? b : c表示如果a,b,否则C。这是一个 值是b或{},这取决于{}是否为真。 它被称为三元运算符,请阅读更多here。在

Python有自己的三元运算符,操作数在不同的 顺序:

^{4}$

因此x[IX(0,i)] = b==1 ? -x[IX(1,i)] : x[IX(1,i)]相当于 说:

if (b == 1)
    x[IX(0,i)] = -x[IX(1,i)]
else
    x[IX(0,i)] = x[IX(1,i)]

所以,在第i行中,第0列的新值是第1列的值, 可能被否定了。看看第10页,这似乎有点关系 有边界。这是在左边,所以我们把它设置为 一个单元格向内的值,或该值的反值,取决于b。在

希望这能让事情有所好转。在

相关问题 更多 >