使用fipy的Python pde解决方案给出值错误



我正试图使用python中的fipy包来解决一个pde。我为此编写的代码已附在附件中。

!pip install fipy
from fipy import *
mesh= Grid2D(nx=0.001,dx=100,ny=0.0005,dy=100)
phil=CellVariable(name='Sol variable',mesh=mesh)
phil.constrain(0,mesh.facesBottom)
phil.constrain(1,mesh.facesTop)
n=1.7*10**(-6)*((0.026*numerix.exp(phil/0.026)+phil-0.026)+2.25*10**(-10)*(0.026*numerix.exp(phil/0.026)-phil-0.026))**(0.5)
eq=(PowerLawConvectionTerm(coeff=(0.,1.))+ImplicitSourceTerm(coeff=n))
eq.solve(var=phil)

当我试图运行代码时,我在最后一行得到一个错误:k超过了矩阵维数。如有任何帮助,我们将不胜感激。

上述代码的明显问题是dxnx混淆了。dx是网格间距,所以是浮点,而nx是网格单元的数量,这是一个整数。所以,第三行应该是,

mesh= Grid2D(dx=0.001,nx=100,dy=0.0005,ny=100)

这至少使问题运行时不会出现错误。然而,这个解不是很有趣,因为源项和初始条件似乎处处为零,所以结果处处为零。

以下也值得考虑

  • FiPy并不是真正为双曲问题设计的,双曲问题需要高阶离散化才能精确求解。它会解决问题,但可能不那么准确(在平衡状态下可能还可以(
  • 源项是非线性的,因此需要多次迭代才能得到解决方案
  • 在这类方程中有一个瞬态项并朝着平衡迭代是个好主意

最新更新