首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fipy中的空间相关扩散

fipy中的空间相关扩散
EN

Stack Overflow用户
提问于 2014-04-09 19:09:44
回答 1查看 1.1K关注 0票数 5

我使用fipy来建模线性化的Poisson-Boltzmann方程,它本质上是

我假设我可以将f(x)建模为一个边界条件。如果epsilon(x)是一个常量,那么fipy可以处理这个问题:

代码语言:javascript
复制
phi = CellVariable(mesh)

dielectric_solvent = 80.0
dielectric_inner   = 4.0

LHS = (DiffusionTerm(coeff = dielectric_solvent))
RHS = phi
eq = LHS == RHS

dr = np.linalg.norm(mesh.faceCenters, axis=0)
mask = (dr<.5) * mesh.exteriorFaces
phi.constrain(1, mask)

mask = (dr>.5) * mesh.exteriorFaces
phi.constrain(0, mask)   

sol = eq.solve(var=phi)

给予:

完整的最小示例作为一个要点发布。,为了保持简短,这是相关的部分。

我想做的是让epsilon(x)在空间中作为一个函数变化,但是DiffusionTerm只能取一个常量。如何实现空间变化的介电项?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-10 20:37:15

FiPy中的任何系数都可以是空间的函数。例如,可以按以下方式设置扩散系数,

代码语言:javascript
复制
diffusion_coefficient = dielectric_solvent * ((mesh.x > -0.5) & (mesh.x < 0.5))

然后直接用在你的方程中

代码语言:javascript
复制
LHS = (DiffusionTerm(coeff = diffusion_coefficient))

只需使用单元中心mesh.xmesh.y定义空间变化的函数即可。

另一个指针,最好将你的方程改为

代码语言:javascript
复制
eq = TransientTerm() == DiffusionTerm(diffusion_coefficient) - ImplicitSourceTerm(phi)

所以

  • 变量phi在一次扫描中隐式求解。
  • 为我添加一个TransientTerm使问题稳定下来,只需用一个很大的时间步骤来逼近一个稳态问题。

有关更改,请参见我对你的要点的评论

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22971859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档