differential-equations - 在 FiPy 中反映边界条件
问题描述
我正在尝试求解 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()
解决方案
推荐阅读
- selenium - Selenium Webdriver 从哪个地方获得标题 - 使用 driver.title
- python - Python 如何刷新 Psutil 结果?
- php - Prestashop购物车和订单生命周期,如何“确认”购物车并使其成为来自外部支付方式的订单
- android - AppCompatEditText 未正确显示项目符号
- c# - 检查 CheckListBox 中的选定项目
- node.js - 请求:无法通过管道将响应发送到文件系统
- javascript - 使用 async/await 是从 Promise.reject() 接收已解决承诺的唯一方法吗?
- multithreading - 多线程实际上是否在单处理器环境中工作
- java - Android - 刷新片段时未取消订阅 LiveData
- clojure - Clojure - 除法布尔值