问题标签 [fipy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
455 浏览

python - FiPy 内部传导边界条件

我是 FiPy 的新手,我正在为 3D 体积内的势求解泊松方程。它适用于表面边界条件,但现在我需要在里面放置一个导体。这将是一个恒定的电位表面,我意识到您不能将 potential.constrain 用于内部表面。

文档建议使用 ImplicitSourceTerm 以及定义表面的掩码,但不清楚如何使用它来将电势约束为恒定,或等效地将电场约束为垂直于表面。这可能吗?

谢谢你的帮助。

0 投票
1 回答
1168 浏览

python - 使用 FiPy 和 Mayavi 求解 3D 中的扩散方程

我有兴趣解决,

以下是有效的,但我有几个问题:

  1. 是否可以使用 FiPy 提高性能?尽管计算时间很长,但我觉得nx, ny, nz这里的垃圾箱非常小。我不明白为什么数组X, Y, and Z这么大。
  2. 请注意,在第一帧中,我们被放大了。如何强制范围自动出现[0..nx, 0..ny, 0..nz]在所有图中?
  3. 第一帧的数据是一个1.0由 包围的点组成的球体0.0。为什么会出现渐变?Mayavi 是在插值吗?如果是这样,我该如何禁用它?

代码:

经过时间:68.2 秒

第零帧

第一帧

第二帧

第三帧

0 投票
1 回答
205 浏览

python - FiPy Source 项不依赖于浓度

我正在尝试求解两个耦合的一维平流-分散-反应方程:

其中 v、k 和 alpha 是常数。

Ca2+ 的平衡浓度 ([Ca2+]Eq) 非线性地取决于 [CO2]。为了将其纳入我的方程式,我创建了一个 CellVariable CaEq。那么方程是:

我通过以下方式计算 CaEq:

函数 concCaEqFromPCO2 通过求根从 [CO2] 和温度中找到 [Ca2+]Eq。

当我运行求解器时,它会出错:系数必须是向量值。当 v 设置为整数时会发生这种情况。当我将它设置为元组时,在 alpha*CaEq: bad operand for unary -: 'tuple' 的行上会出现一个不同的错误。

有没有办法解决这个问题?或者,更一般地说,有没有一种简单的方法来结合对其中一个变量的非线性依赖?

0 投票
1 回答
396 浏览

numerical-methods - FiPy 简单对流

我试图通过一个示例来了解 FiPy 的工作原理,特别是我想解决以下具有周期性边界的简单对流方程:

$$\partial_t u + \partial_x u = 0$$

如果初始数据由 $u(x, 0) = F(x)$ 给出,则解析解为 $u(x, t) = F(x - t)$。我确实得到了解决方案,但它不正确。

我错过了什么?有没有比文档更好的资源来理解 FiPy?非常稀疏...

这是我的尝试

0 投票
1 回答
1026 浏览

python - 使用 Python 中的源解决 PDE

我正在使用 FiPy 解决受生物学启发的问题。

本质上,我想代表一个 2D 平面,在不同的点我有源和汇。源以固定的速率发射底物(不同的源可以有不同的速率),而汇以固定的速率消耗底物(不同的汇可以有不同的速率)。我的代码:

这很好用,但 FiPy 将来源视为“不可再生”,最终我在整个空间中得到了预期的均匀浓度。另一种方法是删除:

并将等式更改为:

鉴于源和汇永远不会改变,这提供了“无限”的源和汇。但是,当我尝试使用求解稳态时

我得到:

而且方程没有解。但是,如果我再次使用“逐步”解决它:

我得到了一张类似于我所期待的漂亮图片:

在此处输入图像描述

关于如何在不同的空间位置指定具有不同排放/消耗率的源/汇的初始设置的任何建议,以便我可以获得稳态解决方案?

谢谢!

0 投票
1 回答
972 浏览

python - 在 Fipy 中求解多个 PDE

我正在尝试使用Fipy在 Python 中求解偏微分方程组。我有一个至少包含 3 个 PDE 的系统。

我想知道哪种方法最适合解决这样的系统?Fipy 支持PDE 系统的耦合和非耦合方法。首先,我想知道 Fipy 是否支持超过 2 个耦合方程,如果不支持(或者如果支持),那么求解这样一个系统的最佳方法是什么?

太感谢了。

0 投票
1 回答
298 浏览

pde - 将 PDE 转换为正确的 Fipy 语法

我想知道如何在 FiPy 中编写以下等式:

有问题的混乱方程

(如果有人好奇,它来自这种类型的模型)。我在将右侧的第三项翻译成 FiPy 代码时遇到了一些麻烦。在示例中,A 和 B 都是变量。

我尝试了以下形式:

但我想一个人不能 .getGrad() 不是变量的东西。我欢迎任何帮助;非常感谢!

0 投票
3 回答
1289 浏览

python - 您如何在 Fipy 中指定 Neumann(法向固定通量)边界条件?

如何在 fipy 网格中将法线方向的通量显式设置为特定值,而不限制面内的通量分量?

Neumann 边界条件可以指定为:(1) 垂直于边界面的通量的固定分量,或 (2) 作为面处通量的完整规范。默认的fipy条件是前者(值= 0),但显式方法(faceGrad.constrain)是后者。通过将以下代码添加到 fipy diffusion.mesh20x20示例的末尾并注意不同的人脸渐变结果,可以理解该问题。

0 投票
0 回答
733 浏览

physics - 如何在 FiPy 中使用 Scharfetter-Gummel 方案求解方程?

我正在尝试使用 FiPy 来模拟太阳能电池,但即使对于简单的测试用例,我也很难获得合理的结果。

我的测试问题是在黑暗中平衡的突然 1D pn 同质结。方程的控制系统是没有额外生成或重组的半导体方程。

泊松方程用介电常数ε确定半导体中的电场 ( φ ),给定电子 ( n )、空穴 ( p )、施主 ( N D ) 和受主 ( N A )的密度,其中电子是q

∇² φ = q ( p - n + N D - N A ) / ε

电子和空穴随电流密度J漂移和扩散,这取决于它们的迁移率 ( μ ) 和扩散常数 ( D ):

J n = n n E + qD n ∇n

J p = p p E - qD p ∇n

系统中电荷的演变由电子和空穴连续方程解释:

∂n/∂t = (∇· J n ) / q

∂p/∂t = - (∇· J p ) / q

可以用 FiPy 规范形式表示为:

∂n/∂t = μ n ∇·(− nφ ) + D n ∇² n

∂p/∂t = − ( μ p ∇·(− pφ ) − D p ∇² n )

为了尝试解决 FiPy 中的问题,我首先导入模块并定义物理参数。

然后创建网格、解决方案变量和掺杂配置文件。

然后我在单元中心上设置一些初始值,并对所有参数施加狄利克雷边界条件。

我将泊松方程表示为

连续性方程为

并通过耦合方程和扫描求解:

我已经尝试过网格大小、时间步长、时间步长数、扫描次数等的不同值。我看到了一些变化,但没有找到一组给我一个现实解决方案的条件。我认为问题可能在于当前术语的表达方式。

通常在求解这些方程时,电流密度是使用 Scharfetter-Gummel (SG) 离散化方案来近似的,而不是直接离散化。在 SG 方案中,通过电池面的电子电流密度 ( J ) 近似为定义在电池KL两侧的中心的电势 ( φ ) 和电荷密度 ( n ) 值的函数

J n,KL = n V T [ B ( δφ/V T ) n L - B (- δφ/V T ) n K )

其中q是电子上的电荷,μ n是电子迁移率,V T是热电压,δφ = φ L - φ KB ( x ) 是伯努利函数x /( e x -1)。

如何在 FiPy 中实施该方案对我来说并不明显。我已经看到有一个scharfetterGummelFaceVariable,但我无法从文档中确定它是否适合或打算解决这个问题。查看代码,它似乎只计算伯努利函数乘以因子e φ L。是否可以直接使用scharfetterGummelFaceVariable来解决此类问题?如果是这样,怎么做?如果没有,是否有替代方法可以让我使用 FiPy 模拟半导体设备?

0 投票
0 回答
527 浏览

fipy - fipy中的Gmsh网格并行执行

我正在尝试在 gmsh 网格上解决并行问题。加载 .geo 文件时,出现错误,

我安装的gmsh版本是2.8.3,(我也试过2.13、2.10,没用)

示例中的 parallel.py 文件正在正确执行,并且网格已正确并行化。但是,当我尝试在同一个 parallel.py 文件中使用 Gmsh3D 加载 .geo 文件时,出现上述错误,但是串行执行似乎没问题。

任何帮助是极大的赞赏。