私は現在、fipy ドキュメントの例に取り組んでおり、examples.cahnHilliard.mesh2DCoupled
いくつかのシミュレーションを実行するために を適応させようとしています。リンクは: https://www.ctcms.nist.gov/fipy/examples/cahnHilliard/generated/examples.cahnHilliard.mesh2DCoupled.html
サンプル コードでは aneq3
と aが宣言されており、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()
eq3
とのdfdphi_
用語が何をするかについての洞察をいただければ幸いです。また、その拡張として、ソルバー ブロックがこれを考慮していないように見えるため、テイラー式の後に線形化された形式を評価するために、ソルバーは $\phi$ の古い値を使用することをどのように認識しますか。