使用 FiPy 求解具有一维零梯度边界条件和零通量条件的 PDE

Solving a PDE with 1D zero gradient boundary condition and zero flux condition with FiPy

我修改了 examples.convection.exponential1D.mesh1D 示例,当我 运行 它时出现错误。

from fipy import CellVariable, Grid1D, DiffusionTerm, PowerLawConvectionTerm
from fipy.tools import numerix

diffCoeff = 1.
convCoeff = (10.,)
L = 10.
nx = 100
mesh = Grid1D(dx=L / nx, nx=nx)

valueLeft = (0.,)
valueRight = 0.    
var = CellVariable(mesh=mesh, name="variable")    
var.faceGrad.constrain(valueLeft, where=mesh.facesLeft)
var.constrain(valueRight, mesh.facesRight)

eq = (DiffusionTerm(coeff=diffCoeff)
      + PowerLawConvectionTerm(coeff=convCoeff))
eq.solve(var=var)

当我 运行 它时,我得到以下错误:

...\fipy\solvers\scipy\linearLUSolver.py:41: RuntimeWarning: invalid value encountered in double_scalars
if (numerix.sqrt(numerix.sum(errorVector**2)) / error0)  <= self.tolerance:

我是否实现了零梯度边界条件?我只找到二维示例。在这个一维问题中 valueLeft 甚至必须是向量吗?我尝试使用标量,但仍然出现相同的错误。

我是 FiPy 的新手,我知道这种形式的 PDE 可能没有任何意义,但我想从一个更简单的例子开始,最后我想用这些边界条件求解 PDE和一个来源。添加源可以解决我的问题吗?

如有任何帮助,我们将不胜感激。

这是警告,不是错误。这只是意味着我们在用零误差对方程进行归一化方面不是很聪明。

偏微分方程仍然求解(尽管求解不是很有趣)。

这是警告,不是错误。在打印 var 的值时,它们都是零,这是给定边界条件的正确答案。

警告是由 caused by this line 代码引起的,应该修复它以处理残差从零开始的情况。但是,总而言之,用户可以忽略该警告,因为求解器仍然 returns 是正确的结果。