我有一个简单的程序,它的核心是一个二维浮点阵列,据说代表气体浓度,我一直试图提出一个简单的算法来模拟向外膨胀的气体,就像云一样,最终以网格中各处的气体浓度相同。

例如,给定的状态进程可以是:
(为简单起见使用整数)

起始状态

00000
00000
00900
00000
00000

经过 1 次算法后的状态

00000
01110
01110
01110
00000

多一个 pas 应该给出一个 5x5 网格,所有网格都包含值 0.36 (9/25)。
我已经在纸上试过了,但无论我如何尝试,我都无法理解算法来做到这一点。

所以我的问题是,我应该如何着手尝试编写这个算法?我尝试了一些方法,应用卷积,尝试依次获取每个网格单元并将其分配给它的邻居,但它们最终都会产生不良影响,例如最终的气体比我最初开始的要少,或所有气体运动都在一个方向上,而不是从中心向外扩展。我真的完全无法理解它,并且非常感谢任何帮助。

最佳答案

如果您忽略对流,则它要么是扩散问题,要么是流体动力学/质量传递问题,否则。如果您从头开始求解,您将从欧拉(固定控制体积)视点的质量和动量守恒方程开始。

这是一个 transient 问题,因此您需要执行积分以将状态从时间 t(n) 推进到 t(n+1)。你展示了一个网格,但没有关于你如何及时解决。您尝试过什么集成方案?明确的?隐含的?克兰克-尼科尔森?如果你不知道,你就没有正确地解决问题。

关于这个主题,我非常喜欢的一本书是 S.W.帕坦卡的 "Numerical Heat Transfer and Fluid Flow" 。现在有点过时了,但我喜欢这种治疗方法。 29 年后它仍然很好,但是自从我阅读有关该主题的内容以来,可能会有更好的文本。我认为对于第一次研究它的人来说,它是平易近人的。

关于在二维网格上模拟膨胀气体的算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/478401/

10-12 00:43