跳转到主要内容

粒子FMM的Python封装

项目描述

Gitlab Build Status Github Build Status Python Package Index Release Page Zenodo DOI for latest release

pyfmmlib是Zydrunas Gimbutas和Leslie Greengard(以及许多其他人的代码)实现的快速多重网格方法(FMM)的Laplace和Helmholtz势的Python封装fmmlib2dfmmlib3d实现。

此封装远非全面。它仅捕获了我最终需要的东西。尽管如此,FMM和其他许多有用的东西都是可访问的。

安装

二进制轮和源代码可从Python包索引获取。

对于二进制或源安装,请运行以下命令

pip install pyfmmlib

文档

不幸的是,不多。以下是我用来弄清楚如何使用东西的方法

>>> 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_partpyfmmlib.fmm_tria是(与维度无关)的包装器,使得调用FMM的序列稍微不那么令人讨厌。更多请参考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在2017年11月之前根据3条款BSD许可证授权。

此包装器根据以下MIT许可证授权。

版权(C)2013安德里亚斯·克洛克纳

特此授予任何获得此软件及其相关文档文件(“软件”)副本的任何人,免费处理该软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许向软件提供者提供软件的人这样做,但受以下条件约束

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定目的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论源于合同、侵权或其他方式,是否与软件或其使用或其他交易有关。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定要选择哪个,请了解更多关于安装软件包的信息。

源代码发行版

pyfmmlib-2024.1.1.tar.gz (6.1 MB 查看散列)

上传时间: 源代码

构建发行版

pyfmmlib-2024.1.1-cp312-cp312-musllinux_1_1_x86_64.whl (1.4 MB 查看散列)

上传时间: CPython 3.12 musllinux: musl 1.1+ x86-64

pyfmmlib-2024.1.1-cp312-cp312-musllinux_1_1_i686.whl (1.4 MB 查看散列)

上传于 CPython 3.12 musllinux: musl 1.1+ i686

pyfmmlib-2024.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ x86-64

pyfmmlib-2024.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl (1.6 MB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ i686

pyfmmlib-2024.1.1-cp311-cp311-musllinux_1_1_x86_64.whl (1.4 MB 查看哈希值)

上传于 CPython 3.11 musllinux: musl 1.1+ x86-64

pyfmmlib-2024.1.1-cp311-cp311-musllinux_1_1_i686.whl (1.4 MB 查看哈希值)

上传于 CPython 3.11 musllinux: musl 1.1+ i686

pyfmmlib-2024.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.7 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ x86-64

pyfmmlib-2024.1.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl (1.6 MB 查看哈希值)

上传于 CPython 3.11 manylinux: glibc 2.17+ i686

由以下机构支持