В настоящее время я работаю с примерами в документации fipy и пытаюсь адаптировать examples.cahnHilliard.mesh2DCoupled
для выполнения некоторых симуляций. Ссылка: 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()
Буду признателен за любую информацию относительно условий eq3
и dfdphi_
делать. И как дополнение к этому, как решатель знает, как использовать старые значения $ \ phi $ для оценки линеаризованной формы после выражения Тейлора, поскольку блок решателя, кажется, не объясняет это.