我正在尝试求解FiPy中的对流扩散方程。目前,我试图实现的只是一个Neumann边界条件,以便波在右侧边界处反射回,而不是传播出域。
我添加了以下行:
phi.faceGrad.constrain(0,mesh.exteriorFaces)
但这似乎没有任何改变。
我施加了错误的边界条件吗?我加错了吗?我已经搜索过了,但是似乎找不到一个示例,该示例具有从边界反射的波的简单属性!我的代码如下。非常感谢。
from fipy import *
nx = 100
L = 1.
dx = L/nx
steps = 160
dt = 0.1
t = dt * steps
mesh = Grid1D(nx=nx, dx=dx)
x = mesh.cellCenters[0]
phi = CellVariable(name="solution variable", mesh=mesh, value=0.)
phi.setValue(1., where=(x>0.03) & (x<0.09))
# Diffusion and convection coefficients
D = FaceVariable(name='diffusion coefficient',mesh=mesh,value=1.*10**(-4.))
C = (0.1,)
# Boundary conditions
phi.faceGrad.constrain(0, mesh.exteriorFaces)
eq = TransientTerm() == DiffusionTerm(coeff=D) - ConvectionTerm(coeff=C)
for step in range(steps):
eq.solve(var=phi, dt=dt)
if step%20==0:
viewer = Viewer(vars=phi, datamin=0., datamax=1.)
viewer.plot()