如何使用 FiPy 在同一侧求解具有 Dirichlet 和 Neumann 边界条件的一维泊松方程

How to solve 1D Poisson equation with Dirichlet and Neumann boundary conditions on the same side using FiPy

显然,即使 Dirichlet 和 Newmann 边界条件都在同一侧,具有常数源的一维泊松方程也有唯一解。但是我想不出在 FiPy 中解决这个问题的方法。请指教。我试过了:

from fipy import CellVariable, Grid1D, DiffusionTerm
import matplotlib.pyplot as plt


L = 1.
nx = 20
dx = L/nx
mesh = Grid1D(nx=nx, dx=dx)


D = 1.
valueLeft = 1.
gradValue = 0.
source = 1.


var = CellVariable(mesh=mesh)
var.constrain(valueLeft, where=mesh.facesLeft)
var.faceGrad.constrain(gradValue, where=mesh.facesLeft)


eq = 0.0 == DiffusionTerm(coeff=D) + source
eq.solve(var=var)


plt.plot(var.value);

这不是在 facesLeft 处设置 gradValue。但是,它可以在 facesRight.

处设置所需的 gradValue

在 FV 的同一张面上同时拥有 Dirichlet 和 Neumann,将问题的性质从边值问题变成了初值问题。从这个意义上说,由于仍然需要右侧边界条件,因此问题变得过度指定。可能有一些方法可以用 FD/FV 和一些 hack 来处理它。但是,FiPy 肯定不是为处理此类问题而设置的。