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

问题描述 投票:0回答:1

我正在尝试使用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超出矩阵尺寸。任何对此的帮助将不胜感激。

python valueerror pde fipy
1个回答
0
投票

上述代码的明显问题是dxnx混合在一起。 dx是网格间距,所以是浮点数,而nx是网格单元数,它是一个整数。因此,第三行应该是,

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

至少至少可以使问题正常运行。但是,该解决方案并不是很有趣,因为源项和初始条件在各处都为零,因此结果在各处都为零。

也值得考虑以下内容

  • FiPy并不是真正针对双曲问题而设计的,双曲问题需要高阶离散化才能准确解决。它可以解决,但可能不那么精确(在平衡状态下可以)。
  • 源项是非线性的,因此需要多次迭代才能找到解决方案。
  • 在这种类型的方程式中有一个过渡项并迭代到平衡是一个好主意。
© www.soinside.com 2019 - 2024. All rights reserved.