问题描述
我正在使用涉及积分项的 FiPy 求解 PDE 系统。但是,FiPy 中不允许使用积分项。有人可以帮我使用这个系统吗?System of PDE
解决方法
我不确定这一点,但我认为您必须自己跟踪集成情况。
您应该能够实现梯形积分,例如:
import fipy as fp
sigma = fp.CellVariable(...,hasOld=True)
phi = fp.CellVariable(...,hasOld=True)
integral = fp.CellVariable(...,value=0.,hasOld=True)
sigma_eq = (fp.DiffusionTerm(var=sigma) - fp.ImplicitSourceTerm(coeff=phi,var=sigma)
== 0)
phi_eq = (fp.TransientTerm(var=phi)
== fp.ImplicitSourceTerm(coeff=-integral + alpha,var=phi)
for step in steps:
sigma.updateOld()
phi.updateOld()
integral.updateOld()
for sweep in sweeps:
sigma_res = sigma_eq.sweep(dt=dt)
phi_res = phi_eq.sweep(dt=dt)
integral.value = (integral.old
+ (sigma * phi + sigma.old * phi.old) * dt / 2).value
您实际上需要对 for sweep in sweeps
和 sigma_res
的收敛性进行某种测试,而不是 phi_res
。你需要试验一下。这可能非常不稳定。