CFD边界条件

时间:2018-08-07 11:40:20

标签: python c

我试图理解一段来自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))

1 个答案:

答案 0 :(得分:2)

我不会尝试浏览整篇论文,但是我可以解释一下 语法,并对发生的情况做出一些有根据的猜测。

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

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

      0       1       2  ...   (N+2)-1
(N+2)+0 (N+2)+1 (N+2)+2  ...  2(N+2)-1
...

那么我们有这个:

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

在C中,a ? b : c表示如果a,b或c 。这是一个表达方式 值取决于b是否为ca。 它称为三元运算符,了解更多here

Python有其自己的三元运算符,其操作数位于不同的位置 订单:

b if a else c

所以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

希望这可以使事情有所清除。