如何使用 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 肯定不是为处理此类问题而设置的。
显然,即使 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 肯定不是为处理此类问题而设置的。