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

python - 如何在 FiPy 中编写具有自变量的方程项?

我正在寻找使用 FiPy 求解扩散方程并阅读了他们的一些文档,但似乎找不到任何与编写包含作为自变量(即空间)函数的附加项的扩散项相关的内容。我发现的最接近的东西是在常见问题解答中,他们建议将附加条款重写为ConvectionTerm. 但是,我认为这仅适用于附加项是解变量而不是自变量的函数的情况。例如,我正在尝试使用以下扩散项求解一维扩散方程(其中导数与自变量 x 相关,y 是解变量):

我觉得这是一个非常简单的表达式,但是我找不到如何用 FiPy 表示法来表达它。任何帮助将不胜感激!

确切的代码:

0 投票
1 回答
224 浏览

python - 如何在 Fipy python 中根据位置和时间表示源术语

我有以下偏微分方程

在此处输入图像描述

我想知道如何在 Fipy python 中表示源术语。我试过以下

这是行不通的。根据 fipy 手册,我看到他们说源术语以它们出现的方式表示,并且建议使用 numerix 模块而不是 numpy 等其他模块。我不知道这段代码中缺少。谢谢

0 投票
1 回答
77 浏览

python - 如果并行运行,FiPy 中的 mesh1D.py 示例将失败

我几个月前下载了 FiPy,本周我决定测试它的并行功能。所以我尝试运行我从github获得的mesh1D.py 示例

$ mpirun -np 2 python 示例/diffusion/mesh1D.py

弹出两个查看器,每个查看器都按预期解决了一半的问题。第一个问题完成后(显式瞬态扩散),它要求我按回车键继续。

True
True
Explicit 瞬态扩散。按 <'return> 继续...显式瞬态扩散。按 <'return> 继续...

但是当我按下回车键时什么也没有发生。我对并行编程知之甚少,但是两个处理器都要求按return是否正常?这部分代码不应该只由一个核心处理吗?
一些额外信息:如果我不使用 mpi,mesh1D 示例可以正常工作。我也运行了parallel.py 测试,它工作正常。

我正在使用 python 2.7.14、Trilinos 12.12.1、FiPy 3.2 和 mpi4py 3.0.0

0 投票
1 回答
252 浏览

python - Fipy 中的狄拉克增量源项

我想知道如何将 Dirac delta 函数表示为 Fipy 中的源项。我想解决以下等式 在此处输入图像描述

我试过下面的代码

该代码正在运行,但我想要确切的 Dirac delta 函数。我查找了 numerix 模块,但找不到这样的功能。Sx1 和 Sy1 是常数。我正在使用 python 2.7

0 投票
1 回答
32 浏览

python - FiPy 的 stokesCavity 示例返回 False

我尝试运行stokesCavity示例,该示例使用盖子驱动的流动边界条件。在代码的最后,将右上角单元格中的值与一些参考值进行比较。

当我尝试运行此示例时,我的输出是
False
False
False
我得到的右上角单元格的实际值是129.2350.278627-0.166620(而不是 162.790867927、0.265072740929 和 -0.150290488304)。有谁知道为什么我会得到不同的值?我尝试更改求解器(使用 scipy、Trilinos 和 pysparse),但结果不会更改到第 12 位。速度曲线看起来与他们手册中显示的相似,但我仍然担心有什么不对劲。
我在 Linux(python 2.7.14、fipy 3.2、pysparse 1.2.dev0、Trilinos 12.12、scipy 1.2.1)和 Windows(python 2.7.15、fipy 3.1.3、scipy 1.1.0)上运行它。

0 投票
1 回答
72 浏览

python - 使用周期性网格时,并行和顺序运行在 FiPy 中给出不同的结果

我运行了以下代码来模拟二维网格中圆柱体周围的流动:

这应该解决具有顶部/底部周期性条件和网格中心的圆柱体的 Navier-stokes 方程(这就是为什么我的方程中有一个隐式源项)。速度在左右边界处等于 1,并且平行于 x 轴。这个例子大致对应于通过许多等距的圆柱形障碍物的流动。当我在没有并行计算的情况下运行它时,压力和速度曲线看起来还不错。为单元格 510 打印的值是2.788(压力)、1.104(xvelocity)和 -0.289(yvelocity)
但是,当我以并行模式运行它时(比如使用 2 个处理器),配置文件看起来很奇怪。对于速度剖面,y=0.2 和 y=0.8 之间的图或多或少类似于 y=0 和 y=1 之间的顺序计算图。但是,压力曲线完全不同。为单元格 510 打印的值为-3.163(压力)、1.209(xvelocity)和 -0.044(yvelocity)
为了使用Grid2D而不是PeriodicGrid2DTopBottom,我包含了额外的边界条件,我相信这将等同于在此示例中使用周期性网格。新的 BC 是:

通过这样做,我可以通过与两个处理器顺序或并行运行来获得相同的输出:2.784 (pressure)、1.104 (xvelocity) 和 -0.290 (yvelocity)
当我使用周期性网格时,我的边界条件是否未指定?(我想这可以解释同一问题的两种不同解决方案)或者并行计算和周期性网格由于某种原因不能相处?

0 投票
1 回答
67 浏览

fipy - 如何表示涉及坐标的扩散源?

C(h) \frac{\partial h}{\partial t}=\nabla \cdot(K(h) \nabla(h+z)) 我有两个问题:

  1. 如何表示涉及坐标的扩散源?控制方程为 h;k(h) 是 h 的函数;z 是 z 坐标。我知道如何在没有坐标 z 的情况下编写漫射源,但我不知道如何表示涉及坐标的漫射源。
    1. 在“...\fipy\examples\diffusion\mesh1D.py”中执行“phi[0].updateOld()”更新“eq =transientTerm() == DiffusionTerm(coeff=D0 * (1 - phi[0 ]))" 当只使用 "res = eq.sweep(var=phi[0], dt=timeStepDuration)"

谢谢你的帮助。

0 投票
1 回答
38 浏览

python - 使用 fipy 和 trilinos 的内存泄漏

我目前正在尝试使用 fipy 模拟围绕圆柱形障碍物流动的悬浮液。因为我使用的是精细网格并且我的方程非常复杂,所以模拟需要很长时间才能收敛。这就是为什么我想并行运行它们。但是,当我这样做时,程序会继续使用越来越多的内存,直到 Linux 最终杀死它(在我使用 4 个处理器时大约 3 小时后)。更重要的是:即使我只使用一个处理器,trilinos 也会增加内存使用量。例如,当我运行此示例时(首先将扫描次数从 300 更改为 5,000):

python stokesCavity.py --trilinos -> 内存使用量在 10 分钟内从 638M 变为
958M python stokesCavity.py --pysparse -> 内存使用量在 10 分钟内从 616M 变为 635M

我在这里看到有人之前报告过类似的问题,但我找不到解决方案。任何帮助,将不胜感激。

一些信息:我正在使用 Trilinos 12.12.1(针对 swig 3.0 编译)和 fipy 3.2。

0 投票
1 回答
110 浏览

python - Viewer() 中的 datamin 和 datamax 不起作用

我在fipy中使用了上面的代码,但是颜色条的范围总是没有改变(总是显示[-1,1])。我的版本是 Python 3.6.7 和 matlablib 3.1.1。

我尝试了以下方法: 1、我更改了“C:\Users\Lenovo\fipy\examples\diffusion”中的代码,例如,更改了“datamin=-0.01, datamax=0”。是不行的。2、直接使用“MatplotlibViewer”。是不行的。3、使用了“GnuplotViewer”。无法在Python中安装。

0 投票
0 回答
26 浏览

fipy - 如何判断指定边界上的值,然后给指定边界赋值?

我是 Fipy 的新手。我很想知道如何判断指定边界上的值,然后为指定的边界条件分配一个新值?”

我创建了一个 CellVariable“psi”和一个指定的边界“BSCfaces”。我想根据“psi”faceValue 对“BSCfaces”应用一个新值。现在我使用了第一个代码,但 mean(B1) 是一个临时解决方案。所以我测试了第二个代码,但是效果不好,尤其是网格有点大的时候(即10*10不行)。

第一个代码有效,但它是一个临时解决方案。第二个代码效果不佳,并显示“TypeError:输入类型不支持ufunc 'bitwise_and',并且根据强制转换规则''safe'',无法安全地将输入强制转换为任何支持的类型”