为什么我的 Cahn-Hilliard 模拟分离得如此精细?

计算科学 pde 流体动力学 数字
2021-12-18 07:40:16

我正在尝试使用 Python 模拟Cahn-Hilliard方程,但是在任何条件下,这两种流体都不会按照需要分离成大块。我正在设置(我认为是)一个正交网格,其均匀浓度值为 0.5 加上 ±0.05 内的随机噪声值。 = 50。时间步长为 1“秒”。总时间为 10 秒。γ=0.5D

第一张图显示了 = 1s 的状态。第二张图片显示它在 = 2s 时,之后系统停止演化。放大后,图像 2 看起来有点像我的预期,但它太精细了;我希望像期待中那样有更大的团块:tt

1 秒后:

1 秒后

2 秒后:

2 秒后

期待:

期待

要找到我使用的二阶导数(对于):d2dx2

mesh_out[y][x] = mesh_in[y][x+2]) - (2 * mesh_in[y][x]) + mesh_in[y][x-2]

在每个时间步之后,如果某个点的浓度大于 1,则将其设置回 1。同样,如果小于 -1,我将其设置为 -1。

我试过弄乱时间步长、初始浓度的值,但它们似乎没有什么区别。我没有使用任何插值 - 我应该使用吗?(如果是这样,您能否指出任何相关信息?)否则,我不确定为什么这不会产生我想要的结果。我怀疑我应该使用插值,但我不确定为什么这会有所作为。我需要某种能量最小化功能吗?例如,我见过有人提到吉布斯自由能。任何帮助/建议将不胜感激。Dγ

我没有发布任何代码,因为我不知道哪些位会有所帮助。

1个回答

我可以推荐 Python 的 Cahn-Hilliard 代码标准测试

https://fenicsproject.org/olddocs/dolfin/1.3.0/python/demo/documented/cahn-hilliard/python/documentation.html#

对于 Mathematica

https://mathematica.stackexchange.com/questions/202446/solving-cahn-hilliard-equation-linearsolve-linear-equation-encountered-that-ha/202503#202503

您展示的图片可以在此测试中生成。请注意,在此测试中,我们求解的是一对二阶方程,而不是四阶方程。检查我为测试制作的这个动画

图1