eqn3 在 Fipy examples.cahnHilliard.mesh2DCoupled 中的作用

Role of eqn3 in Fipy examples.cahnHilliard.mesh2DCoupled

我目前正在研究 fipy 文档中的示例,并尝试调整 examples.cahnHilliard.mesh2DCoupled 以执行一些模拟。 link 是:https://www.ctcms.nist.gov/fipy/examples/cahnHilliard/generated/examples.cahnHilliard.mesh2DCoupled.html

示例代码似乎声明了一个 eq3 和一个 dfdphi_ 并且没有在其他任何地方使用这些方程式,即使在解决方案中也是如此。

来自文档:

>>> D = a = epsilon = 1.
>>> dfdphi = a**2 * phi * (1 - phi) * (1 - 2 * phi)
>>> dfdphi_ = a**2 * (1 - phi) * (1 - 2 * phi)
>>> d2fdphi2 = a**2 * (1 - 6 * phi * (1 - phi))
>>> eq1 = (TransientTerm(var=phi) == DiffusionTerm(coeff=D, var=psi))
>>> eq2 = (ImplicitSourceTerm(coeff=1., var=psi)
...        == ImplicitSourceTerm(coeff=d2fdphi2, var=phi) - d2fdphi2 * phi + dfdphi
...        - DiffusionTerm(coeff=epsilon**2, var=phi))
>>> eq3 = (ImplicitSourceTerm(coeff=1., var=psi)
...        == ImplicitSourceTerm(coeff=dfdphi_, var=phi)
...        - DiffusionTerm(coeff=epsilon**2, var=phi))
>>> eq = eq1 & eq2

在解决方案块中:

>>> while elapsed < duration:
...     dt = min(100, numerix.exp(dexp))
...     elapsed += dt
...     dexp += 0.01
...     eq.solve(dt=dt)
...     if __name__ == "__main__":
...         viewer.plot()

对于 eq3dfdphi_ 术语的作用,我将不胜感激。作为对此的扩展,求解器如何知道使用 $\phi$ 的旧值来评估泰勒表达式后的线性化形式,因为求解器块似乎没有考虑到这一点。

eqn2eqn3 在无穷小时间和 space 步的限制下编码相同的方程。然而,在他们的离散化中,他们挑选出不同的术语,以便在时间步长传播器的构造中发挥更积极的作用。

从短期来看,这只会导致结果的差异很小,从长远来看,稳定性和准确性可能会有更明显的差异。

"more natural" 方程 eq3 的存在似乎是对它进行试验的间接邀请,也许是为了探索 eq2 中的变换是否具有可能的优势是巧合或一些更根深蒂固的想法的结果。