问题标签 [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 上的无休止计算?
我的问题很简单:当我得到我想要解决的方程(代码的最后一部分)时,计算是无止境的。也许是网格或步骤的问题?
所以我的问题是解决3个PDE,有两个相似。我已经更改了一些参数,但这总是无止境的。
这是我的代码:
实际上,方程部分的计算是无穷无尽的,尤其是前两个(cc 和 ca)。我期望的是显示 cc、ca 和 phi 演变的图表。
numerical-methods - 如何在 FiPy 中求解 Euler-Bernoulli 梁方程?
要了解 FiPy 的工作原理,我想求解具有固定端点的Euler–Bernoulli 梁方程:
为简单起见,让q(x,t) = sin(x)
.
如何在 FiPy 中定义和解决它?如何sin(x)
针对方程中唯一的自变量指定源项?
python - 具有时间相关 Dirichlet 边界条件的非稳态扩散-平流方程
我想设置 fipy 来求解具有正弦边界的一维扩散对流方程。
我最终得到以下代码:
代码运行良好,我得到了合理的结果。然而,它也很慢,大约 3.5 秒的周期。有没有更好的方法来实现这一点?或者我怎样才能加快系统速度?
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 输出编辑:
python - 从 conda 安装时无法在 FiPy 中调用示例
我按照站点在虚拟环境中安装 conda 的首选方法安装了 FiPy。但是,我似乎无法调用/运行任何示例,例如,使用python setup.py test --examples
. 当我尝试运行单个示例时也没有成功,例如在主站点上列为examples/diffusion/mesh1D.py
. 搜索文件名mesh1D.py
表明examples
在任何 fipy 目录下根本没有可用的目录。
这仅仅是所有 conda 安装的问题,它省略了示例吗?
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 的形状。我很感激任何帮助
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 位。
非常感谢您的帮助。
python - 具有非线性源项/势项的扩散反应 pde
我第一次尝试用 FiPy 写几个扩散反应方程。
我的方程式适用于三种不同的浓度 c_i,仅包含扩散部分和来源(LateX 输入):
系数D_i、A_i、B_i、P_i和W_1是常数。我已经用 de Diffusion 项和非线性源项编写了代码。但是对于 100 的范围,我对 c2 有一些奇怪的行为。也许是我写错的非线性源项?我使用 ImplicitSourceTerm 命令,我认为这将线性化该术语。我错过了什么吗?我必须通过 myslef 进行线性化吗?(就像泰勒一样?)
如何将平流扩散反应 PDE 与 FiPy和 https://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 执行命令扫描?
或者我错过了什么?
我非常感谢任何帮助或建议。我希望,我写的很清楚。十分感谢。
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是粒子的体积分数。
函数vantHoff和van_der_waals在单独的文件中定义。