python - CFD 边界条件

标签 python c

我试图理解一段来自 paper concerning fluid simulations for games 的代码。我正在研究边界条件的解决方法。由于我不了解 C++,所以我遇到了额外的困难。

据我了解:

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

  • u[IX(i, j)] 则为 (i, j) 单元中的速度

以下宏用于 IX(i, j):

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

最佳答案

我不会试图费力地读完整篇论文,但我可以解释一下 语法并对正在发生的事情做出一些有根据的猜测。

#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。这是一个表达式,其 值是 bc,具体取决于 a 是否为真。 它称为三元运算符,了解更多 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

希望这能让事情有所澄清。

关于python - CFD 边界条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51725926/

相关文章:

python - View 未返回 HttpResponse 对象。它返回 None 而不是

c - libnet 无法写入 ip 数据包

c - 如何通过串行连接(蓝牙)获取 TCP/IP 数据包

c - 如果我重复运行这个程序,为什么在 seg-fault 之前打印的最后一个数字会有所不同?

python - 为什么在 python 中没有导入就失败了

python - Flask-WTForms 测试(使用 py.test)

python - 使用 pyautogui.typewrite() 和特殊字符

c++ - OpenCV C++ 到 C 的转换

c - 使用指针的数组内存地址分配声明的相同优先级

python - 带双端队列的冒号运算符(Python 中)