我修改了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:我是否正确地实现了零梯度边界条件?我只找到了2D示例。在这个一维问题中,valueLeft甚至必须是一个向量吗?我尝试了标量,但仍然得到相同的错误。
我是FiPy的新手,我知道这种形式的偏微分方程可能没有任何意义,但我想从一个更简单的例子开始,最后我想用这些边界条件和源来求解一个偏微分方程。添加一个源码能解决我的问题吗?
任何帮助都将不胜感激。
发布于 2021-02-12 06:33:20
这是一个警告,而不是一个错误。在打印var的值时,它们都是零,这是给定边界条件的正确答案。
该警告是由代码残差引起的divide by zero warning引起的,应对此进行修复,以处理残差从零开始的情况。但是,长处和短处是让用户忽略该警告,因为求解器仍然返回正确的结果。
发布于 2021-02-12 06:30:07
这是一个警告,而不是一个错误。这只是意味着我们在归一化一个零误差的方程时并不是很聪明。
PDE仍然可以解决(尽管解决方案不是很有趣)。
https://stackoverflow.com/questions/66163197
复制相似问题