粒子fmms的python包装器
pyfmmlib的Python项目详细描述
pyfmmlib是一个python包装器,用于 fast multipole method用于 Laplace和 Helmholtz电位 Zydrunas Gimbutas和Leslie Greengard(包括更多人编写的代码)。
这个包装还远远不够全面。它抓住了我最后的东西 需要。尽管如此,fmms和其他一些有用的东西是可以访问的。
安装
可以从Python package index获得二进制控制盘和源代码。 感谢Isuru Fernando为infrastructure to build those wheels工作。
要从源代码构建它,您需要
运行:
python setup.py install
像往常一样交叉手指。
文档
不幸的是,不多。下面是我如何使用这些东西的方法:
>>> import pyfmmlib >>> dir(pyfmmlib) ['__builtins__', '__doc__', '__file__', '__name__', '__package__', '_add_plot', ...] Fish the desired function from this list (let's use 'legefder' as an example) and run: >>> print pyfmmlib.legefder.__doc__ legefder - Function signature: val,der = legefder(x,pexp,[n]) Required arguments: x : input float pexp : input rank-1 array('d') with bounds (n + 1) Optional arguments: n := (len(pexp)-1) input int Return objects: val : float der : float
这将告诉您如何从python调用函数。 然后可以使用grep找出正确的fortran源代码:
$ grep -icl 'legefder' fmmlib*/*/*.f fmmlib3d/src/legeexps.f
然后看看那里的文件,你就开始做生意了。不知道是什么 要查找的函数名?用同样的grep程序 关键字。
粗糙,但有效。:)
还有两件事:
有些函数用_vec后缀包装。这意味着他们 立即应用于参数的整个向量。它们也是平行的 通过OpenMP。
pyfmmlib.fmm_part和pyfmmlib.fmm_tria是(独立于维度) 使fmms的调用序列稍微少一点的包装器 讨厌的有关详细信息,请参见examples/fmm.py。
这里有一个粗略的概念,它们是如何命名的:
from pyfmmlib import fmm_part, HelmholtzKernel pot, grad = fmm_part("PG", iprec=2, kernel=HelmholtzKernel(5), sources=sources, mop_charge=1, target=targets)
与库的其他部分(直接调用fortran)不同, 这些例程需要(n,3)形(即c顺序)数组。
许可证
fmmlib{2,3}d根据3子句bsd许可证获得许可。(截至2017年11月)
这个包装器是根据麻省理工学院的许可证授权的,如下所示。
版权所有(c)2013 Andreas Kloeckner
兹免费准许任何人取得 本软件和相关文档文件(“软件”),用于处理 不受限制的软件,包括但不限于 使用、复制、修改、合并、发布、分发、再授权和/或销售副本 以及允许向其提供软件的人员 因此,必须满足以下条件:
上述版权公告及本许可公告须包括在 软件的拷贝或大部分。
本软件按“原样”提供,无任何形式的保证,明示或 默示的,包括但不限于适销性保证, 适合特定目的和不侵权。在任何情况下 作者或版权所有者应对任何索赔、损害或其他 责任,无论是在合同诉讼、侵权诉讼或其他诉讼中, 不属于或与本软件有关,或使用或与本软件的其他交易有关。 软件。