问题标签 [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.
python - FiPy 内部传导边界条件
我是 FiPy 的新手,我正在为 3D 体积内的势求解泊松方程。它适用于表面边界条件,但现在我需要在里面放置一个导体。这将是一个恒定的电位表面,我意识到您不能将 potential.constrain 用于内部表面。
文档建议使用 ImplicitSourceTerm 以及定义表面的掩码,但不清楚如何使用它来将电势约束为恒定,或等效地将电场约束为垂直于表面。这可能吗?
谢谢你的帮助。
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' 的行上会出现一个不同的错误。
有没有办法解决这个问题?或者,更一般地说,有没有一种简单的方法来结合对其中一个变量的非线性依赖?
numerical-methods - FiPy 简单对流
我试图通过一个示例来了解 FiPy 的工作原理,特别是我想解决以下具有周期性边界的简单对流方程:
$$\partial_t u + \partial_x u = 0$$
如果初始数据由 $u(x, 0) = F(x)$ 给出,则解析解为 $u(x, t) = F(x - t)$。我确实得到了解决方案,但它不正确。
我错过了什么?有没有比文档更好的资源来理解 FiPy?非常稀疏...
这是我的尝试
python - 使用 Python 中的源解决 PDE
我正在使用 FiPy 解决受生物学启发的问题。
本质上,我想代表一个 2D 平面,在不同的点我有源和汇。源以固定的速率发射底物(不同的源可以有不同的速率),而汇以固定的速率消耗底物(不同的汇可以有不同的速率)。我的代码:
这很好用,但 FiPy 将来源视为“不可再生”,最终我在整个空间中得到了预期的均匀浓度。另一种方法是删除:
并将等式更改为:
鉴于源和汇永远不会改变,这提供了“无限”的源和汇。但是,当我尝试使用求解稳态时
我得到:
而且方程没有解。但是,如果我再次使用“逐步”解决它:
我得到了一张类似于我所期待的漂亮图片:
关于如何在不同的空间位置指定具有不同排放/消耗率的源/汇的初始设置的任何建议,以便我可以获得稳态解决方案?
谢谢!
python - 在 Fipy 中求解多个 PDE
我正在尝试使用Fipy在 Python 中求解偏微分方程组。我有一个至少包含 3 个 PDE 的系统。
我想知道哪种方法最适合解决这样的系统?Fipy 支持PDE 系统的耦合和非耦合方法。首先,我想知道 Fipy 是否支持超过 2 个耦合方程,如果不支持(或者如果支持),那么求解这样一个系统的最佳方法是什么?
太感谢了。
pde - 将 PDE 转换为正确的 Fipy 语法
我想知道如何在 FiPy 中编写以下等式:
(如果有人好奇,它来自这种类型的模型)。我在将右侧的第三项翻译成 FiPy 代码时遇到了一些麻烦。在示例中,A 和 B 都是变量。
我尝试了以下形式:
但我想一个人不能 .getGrad() 不是变量的东西。我欢迎任何帮助;非常感谢!
python - 您如何在 Fipy 中指定 Neumann(法向固定通量)边界条件?
如何在 fipy 网格中将法线方向的通量显式设置为特定值,而不限制面内的通量分量?
Neumann 边界条件可以指定为:(1) 垂直于边界面的通量的固定分量,或 (2) 作为面处通量的完整规范。默认的fipy条件是前者(值= 0),但显式方法(faceGrad.constrain)是后者。通过将以下代码添加到 fipy diffusion.mesh20x20示例的末尾并注意不同的人脸渐变结果,可以理解该问题。
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 = qμ n n E + qD n ∇n
J p = qμ 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 ) 近似为定义在电池K和L两侧的中心的电势 ( φ ) 和电荷密度 ( n ) 值的函数
J n,KL = qμ n V T [ B ( δφ/V T ) n L - B (- δφ/V T ) n K )
其中q是电子上的电荷,μ n是电子迁移率,V T是热电压,δφ = φ L - φ K,B ( x ) 是伯努利函数x /( e x -1)。
如何在 FiPy 中实施该方案对我来说并不明显。我已经看到有一个scharfetterGummelFaceVariable
,但我无法从文档中确定它是否适合或打算解决这个问题。查看代码,它似乎只计算伯努利函数乘以因子e φ L。是否可以直接使用scharfetterGummelFaceVariable
来解决此类问题?如果是这样,怎么做?如果没有,是否有替代方法可以让我使用 FiPy 模拟半导体设备?
fipy - fipy中的Gmsh网格并行执行
我正在尝试在 gmsh 网格上解决并行问题。加载 .geo 文件时,出现错误,
我安装的gmsh版本是2.8.3,(我也试过2.13、2.10,没用)
示例中的 parallel.py 文件正在正确执行,并且网格已正确并行化。但是,当我尝试在同一个 parallel.py 文件中使用 Gmsh3D 加载 .geo 文件时,出现上述错误,但是串行执行似乎没问题。
任何帮助是极大的赞赏。