问题标签 [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 回答
78 浏览

python - 如何修复 FiPy 上的无休止计算?

我的问题很简单:当我得到我想要解决的方程(代码的最后一部分)时,计算是无止境的。也许是网格或步骤的问题?

所以我的问题是解决3个PDE,有两个相似。我已经更改了一些参数,但这总是无止境的。

这是我的代码:

实际上,方程部分的计算是无穷无尽的,尤其是前两个(cc 和 ca)。我期望的是显示 cc、ca 和 phi 演变的图表。

0 投票
1 回答
203 浏览

numerical-methods - 如何在 FiPy 中求解 Euler-Bernoulli 梁方程?

要了解 FiPy 的工作原理,我想求解具有固定端点的Euler–Bernoulli 梁方程:

为简单起见,让q(x,t) = sin(x).

如何在 FiPy 中定义和解决它?如何sin(x)针对方程中唯一的自变量指定源项?

0 投票
1 回答
248 浏览

python - 具有时间相关 Dirichlet 边界条件的非稳态扩散-平流方程

我想设置 fipy 来求解具有正弦边界的一维扩散对流方程。

我最终得到以下代码:

代码运行良好,我得到了合理的结果。然而,它也很慢,大约 3.5 秒的周期。有没有更好的方法来实现这一点?或者我怎样才能加快系统速度?

0 投票
2 回答
355 浏览

mesh - 在 fipy 中通过 Gmsh 导入 3D 网格时出现问题

我正在尝试在 FiPy 中导入使用 Gmsh 生成的 3D 网格。使用 2D 网格进行的测试效果很好。如果随后使用 Gmsh3D 挤压和导入模型,我会收到一条错误消息。

GmshException: Gmsh 没有产生任何细胞!检查您的 Gmsh 代码。

我正在使用 Python 3.7.3、Fipy 3.1.3 和 Gmsh 3.0.6(如推荐)在 Win10 上工作。

test2D.geo 测试文件:

和:

错误信息是:GmshException: Gmsh 没有产生任何细胞!检查您的 Gmsh 代码。

我没有看到我的错误,希望有人可以在这里帮助我。提前致谢

为 Gmsh 输出编辑:

0 投票
1 回答
106 浏览

python - 从 conda 安装时无法在 FiPy 中调用示例

我按照站点在虚拟环境中安装 conda 的首选方法安装了 FiPy。但是,我似乎无法调用/运行任何示例,例如,使用python setup.py test --examples. 当我尝试运行单个示例时也没有成功,例如在主站点上列为examples/diffusion/mesh1D.py. 搜索文件名mesh1D.py表明examples在任何 fipy 目录下根本没有可用的目录。

这仅仅是所有 conda 安装的问题,它省略了示例吗?

0 投票
1 回答
189 浏览

mesh - 在 fipy 中将 PhysicalFace 提取为 2D 网格

我用 Gmsh 创建了一个网格(一个有孔的表面,然后挤压它)。现在,我想在使用 MatplotlibViewer (Mayavi 在我的两台计算机上都不起作用)进行模拟之后将模型绘制在单独的切片中。我曾希望可以使用mesh.physicalFaces 定义一个新网络,但如果可以的话,我还没有想通。我的第二次尝试是使用 Gmsh 再次将网格应用到 Extrude 命令。但网格与 3D 版本的网格不对应。有人可以给我一个线索吗?也像另一种表示方法。

我正在开发 Win10、Fipy 3.1.3、Python 3.6

此尝试的错误消息是:AttributeError: 'binOp' object has no attribute 'cellCenters'。如果我只重新定义网格,直到挤出顺序我得到:“ValueError:解包的值太多(预期为 2)”,因为 tSslice 的形状。我很感激任何帮助

0 投票
2 回答
309 浏览

python - 版本 Gmsh(版本 >=2)和 Fipy 的问题

我是FiPy的新手,我对这个例子有疑问:

例子.diffusion.circle:https ://www.ctcms.nist.gov/fipy/examples/diffusion/generated/examples.diffusion.circle.html

我得到错误:

我已经尝试了大约两年前发布的一些东西,但这没有帮助,例如 EnvironmentError: Gmsh version must be >= 2.0 and Gmsh mesh parallel execution in fipy

我已经检查了我的版本: Fipy: 3.3 pygmsh: 5.0.2 spyder 3.3.6 Python: 2.7 gmsh: 4.1.1

我正在使用 Windows 10 64 位。

非常感谢您的帮助。

0 投票
1 回答
414 浏览

python - 具有非线性源项/势项的扩散反应 pde

我第一次尝试用 FiPy 写几个扩散反应方程。

我的方程式适用于三种不同的浓度 c_i,仅包含扩散部分和来源(LateX 输入):

系数D_i、A_i、B_i、P_i和W_1是常数。我已经用 de Diffusion 项和非线性源项编写了代码。但是对于 100 的范围,我对 c2 有一些奇怪的行为。也许是我写错的非线性源项?我使用 ImplicitSourceTerm 命令,我认为这将线性化该术语。我错过了什么吗?我必须通过 myslef 进行线性化吗?(就像泰勒一样?)

如何将平流扩散反应 PDE 与 FiPyhttps://www.ctcms.nist.gov/fipy/examples/diffusion/generated/examples.diffusion.coupled.html耦合

我也在尝试添加潜在的术语,但我不明白这是否可能。类似的东西(与上面相同,但有潜在的部分)

我分析了来自 https://www.ctcms.nist.gov/fipy/examples/phase/generated/examples.phase.binaryCoupled.html的示例, 以尝试添加像 Diffusionterm 这样的潜在术语,但我总是得到错误:

SolutionVariableNumberError:不同数量的解变量和方程。

我所期望的,但也许我错过了一些东西。

继承那部分代码:

也尝试使用命令扫描做一些数值分析,如残差和范数。我在这里看到了关于扫描命令的一个很好的解释: Solver tolerance and residual error when using sweep function in FiPy

那部分代码(仅用于带有源的扩散术语)

尽管如此,我没有得到任何结果或错误,必须手动停止该过程。

总而言之,我的问题是:有可能使用具有扩散项和潜在项的 FiPy 对 pdes 来解决吗?是否也可以对耦合的 pdes 执行命令扫描?

或者我错过了什么?

我非常感谢任何帮助或建议。我希望,我写的很清楚。十分感谢。

0 投票
1 回答
169 浏览

python - 在 Fipy 中强制变量为非负数

我目前正在使用扫描循环在 python 中使用 FiPy来求解关于我的单元变量phi的微分方程( eq0 )。因为我的方程是非线性的,所以我使用了一个扫描循环,如下面的代码摘录所示。

但我不断收到以下错误:

C:\Python27\lib\site-packages\fipy\variables\variable.py:1100:RuntimeWarning:power return self._BinaryOperatorVariable(lambda a,b: pow(a,b), other, value1mattersForUnit=True )
C:\Python27\lib\site-packages\fipy\variables\variable.py:1186: RuntimeWarning: 在less_equal 中遇到无效值返回 self._BinaryOperatorVariable(lambda a,b: a<=b, other)
Traceback (最近最后调用):
.. 文件“SBM_sphere3.py”,第 59 行,在
....res0 = eq0.sweep(var=phi, dt=dt)
.. 文件“C:\Python27\lib\site-packages\ fipy\terms\term.py",第 207 行,扫描
....solver._solve()
.. 文件 "C:\Python27\lib\site-packages\fipy\solvers\pysparse\pysparseSolver.py",行68,在_solve
....self。solve (self.matrix, array, self.RHSvector)
.. 文件“C:\Python27\lib\site-packages\fipy\solvers\pysparse\linearLUSolver.py”,第 53 行,在 _solve__
....LU = superlu .factorize(L.matrix.to_csr())
.. 文件“C:\Python27\lib\site-packages\pysparse\misc__init__.py”,第 29 行,在 newFunc
....return func(*args, ** kwargs)
.. 文件“C:\Python27\lib\site-packages\pysparse__init__.py”,第 47 行,因式分解
....return self.factorizeFnc(*args, **kwargs)
RuntimeError: Factor is exactly single

我很确定这个错误是由于eq0中存在的术语 phi^(2/3) 造成的。如果我用 abs(phi)^(2/3) 替换这个术语,错误就会消失。

我假设扫描循环在某些时候为phi中的几个单元格返回负值,导致错误,因为我们不能用非整数指数为负值供电。

所以我的问题是:有没有办法强制扫描以避免负面解决方案?

我试图包含一条在扫描之前将所有负值设置为 0 的行:

错误仍然存​​在(因为扫描试图在求解线性化系统后立即计算新的系数矩阵?)。

编辑:我将 Python 2.7.14 与 FiPy 3.2 一起使用。我在下面分享我认为与查询相关的代码部分。整个代码非常广泛。一些背景:我正在求解悬浮流的平衡方程。eq0对应于粒子相的质量平衡方程,phi是粒子的体积分数。

函数vantHoffvan_der_waals在单独的文件中定义。

0 投票
1 回答
135 浏览

python - 如何在 Fipy 中表示三阶导数

我想知道如何表示第三个导数:

在此处输入图像描述

在 Fipy python 中。我知道扩散项表示为

和高阶扩散项为

但是想不出一种方法来表示这个第三个导数。谢谢