问题标签 [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内部边界条件的大值
我在下面的代码中尝试了内部边界条件。
我发现虽然我没有设置外部边界条件,但求解的结果将取决于 LargeValue。此外,当我增加 largeValue 时,我必须再次重新定义方程,否则不能通过将新值设置为 LargeValue 来更改方程。
我已经使用该sweep
方法试图获得更好的结果,但它不起作用。
下面是我的代码。有什么错误吗?希望有人能帮助我!
python - 将 gmsh 生成的 3D 网格导入 fipy 时出错
我在将 3D 网格从 导入gmsh
到fipy
. 我已经浏览了关于gmsh
和fipy
在这个论坛上的所有问题,但不幸的是我没有找到类似的主题。
我正在将生成的 3D 圆柱网格导入gmsh 4.0
到 FiPy 中。我目前使用的是 python 2.7,我的操作系统是 Windows 10,64 位。
根据fipy
手册, Gmsh3D 函数应该将gmsh
网格转换为fipy
网格,因此我写道:
此外,我的 Gmsh exe、mesh (cylinder.msh) 以及我的 python 代码都位于同一目录中。
但是,我不断收到“[错误 32] 该进程无法访问该文件,因为它正被另一个进程使用”。我在下面附上了完整的错误消息。任何人都经历过并解决了这个问题?任何指针表示赞赏。提前致谢!
完整的错误信息:
回溯(最近一次通话最后):
python - How to Couple Advection Diffusion Reaction PDEs with FiPy
I tried to solve 1D coupled PDEs for an advection-diffusion-reaction problem with the Matlab function Pdepe (https://www.mathworks.com/help/matlab/ref/pdepe.html). This function is not working properly in my case of a high advection term as compared to the diffusion term. Therefore, I searched and found this option of using the Python library FiPy to solve my PDEs system. My initial conditions are u1=1 for 4*L/10
My coupled equations are of the following form:
du1/dt = d/dx(D1 * du1/dx) + g * x * du1/dx - mu1 * u1 / (K + u1) * u2
du2/dt = d/dx(D2 * du2/dx) + g * x * du2/dx + mu2 * u1 / (K + u1) * u2
I tried to write it by combining the FiPy examples (examples.convection.exponential1DSource.mesh1D, examples.levelSet.advection.mesh1D, examples.cahnHilliard.mesh2DCoupled).
The following lines are not a working example but my first attempt to write the code. This is my first use of FiPy (out of the tests and examples of the documentation), so this might seem to miss the point completely for the regular users.
Thank you for any suggestion or correction. If you happen to know a good tutorial for this specific kind of problem, I would be happy to read it, since I did not find anything better than the examples in the FiPy documentation.
python - 在 FiPy 中使用扫描函数时的求解器容差和残差
当我意识到命令扫描没有按照我想象的方式工作时,我试图使用 FiPy 解决一组 PDE 。这是我的部分代码的示例:
简而言之,我声明了一个名为xVelocityEq的函数并使用sweep来解决它。这是我的输出:
如您所见,while 循环在两次迭代后结束。我的第一个问题是:为什么我的第一个残差(=0.0007856742013190237)高于求解器的容差?我认为,由于xVelocityEq对应于线性系统,求解器容差和残差将意味着同一件事。
如果我增加编号。mySolver中从 1000 到 10000 的迭代次数,我得到以下输出:
鉴于第一个保持不变,为什么第二个残差会发生变化?
如果我将mySolver中的容差从 1.e-6 增加到 7.e-4,我会得到以下输出:
请注意,这些残差与第一个输出中的相同。现在,如果我尝试进一步将容差增加到 8.e-4,这就是我得到的输出:
在这一点上,我完全迷失了。为什么对于小于 7.e-4 的所有求解器公差,残差具有相同的值?为什么这些残差是常数并等于 0.0007856742013190237 求解器容差高于 7.e-4?
如果我将 mySolver 更改为LinearLUSolver(迭代次数 = 1000,容差 = 1.e-6),这就是我得到的:
为什么我的第一个残差和以前一样,即使我已经改变了求解器?
python - 使用 FiPy 求解柱坐标中的扩散方程不正确
使用 FiPy 对圆柱几何中的扩散方程的稳态解与从其他软件(例如 Mathematica)获得的解有很大不同。
方程是:
$0 = \frac{1}{r}\frac{d}{dr}\left(\frac{r}{T^{1/2}}\frac{dT}{dr}\right) + cte*T ^{3/2}$
这意味着,通过使用 CylindricalGrid1D 网格,我们可以将方程写为:
在这里我设置了 cte=20,但无论这个值是多少,问题仍然存在。我得到左边的解决方案,而 Mathematica 给出的解决方案是右边的解决方案:
然后,我尝试按照对此类非线性方程的建议进行扫描。所以eq.solve()
我没有,而是:
但我得到了错误:
最后,我使用变量 V=T^{1/2} 以等价形式重写了初始方程。很容易看出,有了 V,方程变为
$0 = \frac{1}{r}\frac{d}{dr}\left(r\frac{dV}{dr}\right) + \frac{cte}{2}V^3$
所以我然后使用了代码:
并且获得的配置文件非常相似,但是 y 轴上的值与第一个 FiPy 解决方案或 Mathematica 解决方案不同!清扫给出与以前相同的错误。
python - 将值设置为 CellVariable
我有以下功能:
其中 mesh、x、y 和 z 先前定义为:
sinkCoords 是坐标到值的字典。例如:{(1,2,3) => 4}
表示 1,2,3 处的值为 4。
这个想法是将每个这样的坐标映射到 sinkGrid 上。
问题是在我调试时,我发现每个接收器值都映射到“接近”实际目标的多个位置。在循环的第一次迭代(pos = <type 'tuple'>: (16, 16, 2)
)之后,我得到:
它返回设置在 8 个不同索引处的值 25。
我的观察是这些总是“较低”的坐标但是:
1)为什么只针对一些邻居?那我为什么不得到完整的摩尔社区呢?
2)为什么只在至少一维较低的邻居上?
3) 是什么原因造成的?这只是一些路由错误。如果是这样,我应该使用patchSize-k
或类似的东西吗?
python-2.7 - 如何将 Gmsh 生成的 3D 网格导入到 Fipy?
我正在研究耦合 DEM-CFD 模型。我将 Fipy 用于其 CFD 部分,我的几何图形是圆柱体。如何将 Gmsh 中生成的网格导入到 Fipy?
我需要生成一个圆柱几何体,并通过在 Fipy 中生成 3D 三角形网格来对其进行离散化。我试图在 Fipy 的帮助下找到一个命令以在圆柱几何中生成 3D 三角形网格,但我找不到任何与 3D 相关的东西。我在 Gmsh 软件中生成了 Mesh,Fipy 基于它的帮助接受了它。我现在有网格文件,但我无法将它导入到 Fipy。
每当我尝试将其导入模型时,都会遇到此错误Gmsh version must be >= 2.0
。但是,我的 Gmsh 版本是 4。
我也使用了 Gmsh V2.5,但错误是一样的。我搜索了错误,我发现有些人也在为此苦苦挣扎。他们建议将 Gmsh.exe 文件放在脚本文件夹中以解决问题。我已经这样做了,但我遇到了另一个错误。新的错误是
当命令是mesh = fp.Gmsh3D("Cylinder.msh")
.
我也搜索了这个错误,有人建议在网格之后提及几何文件,mesh = fp.Gmsh3D("Cylinder.msh, Cylinder.geo")
. 现在,我得到了这个
我试图制作圆形网格,它是一个圆形的 2D 三角形网格(它在 Fipy 帮助中),但我得到了这个
python scritp、圆柱体.msh、圆柱体.geo 和 Gmsh.exe 文件位于同一文件夹中。
错误:
Gmsh 输出:
第一次尝试
第二次尝试
fipy - 使用 Mesh2D 构造函数重新创建 fipy Grid2D
如果我使用以下方法创建一个 fipy 2D 网格:
我得到了一个合理的矩形元素网格。但是,如果我采用这个网格的值并使用它们来构造一个 vanilla Mesh2D
:
我得到一个三角形的网格,其中一些三角形似乎无效。如果我这样做:
并使用 matplotlib 查看器查看它,一些三角形未填充,我认为这意味着它们无效。
我可以使用重新创建原始矩形网格Mesh2D
吗?我想这样做是因为我从另一个来源扭曲了矩形网格坐标,我想mesh.vectorCoords
在调用Mesh2D
. 面顶点和单元面是一样的,只是网状织物被扭曲了。
python-3.x - 尝试求解大型 PDE 系统时出错
我有一个由 18 个线性(我假设)PDE 组成的系统。但是,它们是形状非常笨拙的 PDE。每次我尝试使用 FiPy 解决耦合 PDE 的系统时,都会出现错误。我已经自己修复了其中的大部分,但我似乎无法克服这个问题。
首先,您将需要稍后将在程序中添加的方程式列表:
这是我用来生成 PDE 系统的程序的其余部分。
很抱歉代码很长,但我真的无法以其他方式展示它。无论如何,这是它返回的错误:
文件“C:\Users\tjcze\Anaconda3\lib\site-packages\fipy\matrices\scipyMatrix.py”,第 218 行,在 addAt assert(len(id1) == len(id2) == len(vector))
断言错误
我应该怎么做才能让这个系统正常工作?