0

私は現在、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$ の古い値を使用することをどのように認識しますか。

4

1 に答える 1

1

eqn2eqn3無限小の時間と空間ステップの限界で、同じ方程式をエンコードします。ただし、離散化では、タイム ステップ プロパゲーターの構築におけるより積極的な役割のために、さまざまな用語を選び出します。

短期的には結果にわずかな違いしか生じませんが、長期的には安定性と精度に大きな違いが生じる可能性があります。

「より自然な」方程式eq3が存在するということは、それを実験することへの間接的な誘いのようであり、おそらく、eq2その可能性のある利点を伴う変換が偶然なのか、それともより深く確立されたアイデアの結果なのかを探求することです.

于 2020-01-08T12:08:35.717 に答える