当前位置:  开发笔记 > 编程语言 > 正文

用于在2D网格上建立膨胀气体的算法

如何解决《用于在2D网格上建立膨胀气体的算法》经验,为你挑选了2个好方法。

我有一个简单的程序,它的核心是一个浮动的二维数组,据说代表气体浓度,我一直试图想出一个简单的算法,模拟向外扩展的气体,如云,最终结束整个电网中的气体浓度相同.

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

起始状态

00000
00000
00900
00000
00000

1次通过算法后的状态

00000
01110
01110
01110
00000

另外一个pas应该给5x5网格都包含值0.36(9/25).
我已经在纸上试过了,但无论我如何尝试,我都无法绕过算法来做到这一点.

所以我的问题是,我该如何着手尝试编写这种算法?我尝试了一些东西,应用卷积,试图依次取出每个网格单元并将其分发给邻居,但它们最终都会产生不良影响,例如最终以比我最初开始时更少的气体结束,或者所有气体运动都在一个方向,而不是从中心向外扩展.我真的无法理解它并且会感激任何帮助.



1> duffymo..:

如果您忽略对流或流体动力学/质量传递问题,这可能是扩散问题.如果你是从头开始解决的话,你可以从欧拉(固定控制体积)观点的质量和动量守恒方程开始.

这是一个暂时性问题,因此您需要执行集成以将状态从时间t(n)推进到t(n + 1).你展示了一个网格,但没有关于你如何及时解决的问题.您尝试过哪种集成方案?明确?隐?曲柄尼科尔森?如果你不知道,你没有正确地解决问题.

我真正喜欢这本书的一本书是SW Patankar的"数值传热和流体流动".现在有点过时了,但我喜欢这种治疗方法.它在29年后仍然很好,但自从我阅读这个主题以来,可能会有更好的文本.我觉得有人第一次看到它是平易近人的.



2> Pete Kirkham..:

在您给出的示例中,您的第二阶段的核心为1.通常扩散需要浓度梯度,因此大多数扩散相关技术在下一次迭代时不会改变中间的1(在第一次迭代之后它们也不会达到该状态,但是一旦你有了它就会更容易看到得到了一块相等的价值观).但正如你帖子上的评论者所说,这不太可能是网络运动的原因.减少气体可能是边缘效应,但也可能是舍入误差的问题 - 将cpu设置为均匀的一半,并且总计气体并立即应用校正.

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有