helPME: an efficient library for particle mesh Ewald. The recursive acronym is a tip of the hat to early open source software tools and reflects the recursive algorithms that are key to helPME's support for arbitrary operators. The library is freely available and is designed to be easy to use, with minimal setup code required.
helPME-py is a refactorization of the helPME repository aimed to provide an
efficient and modular Python utility for performing Particle Mesh Ewald
calculations. The build system and documentation have been revamped, and
functionality that was originally only available in the C++ layer has been
exposed with Python bindings. The easiest way to install helPME-py is
using pip
:
pip install helpme-py
Because helPME-py focuses on adapting helPME for distribution as a Python package, several features of the original package are not available in helPME-py, including:
- Availability as a single C++ header.
- Support for Fortran bindings.
Additionally, error function evaluations above a certain threshold value
are screened out and assumed to be equal to one, which presents a speed
gain for some real-space calculations at the expense of some amount of
error. The default threshold value is 6, which introduces a maximum
error on the order of 10-17, which is just at double
precision. This value may be changed upon compilation by specifying
a new value with the ERF_SCREEN_VAL
CMake option.
- Support for C++/C/Python bindings.
- Arbitrary operators including r-1 (Coulomb) and r-6 (dispersion).
- Ability to use any floating point precision mode, selectable at run time.
- Three dimensional parallel decomposition with MPI.
- OpenMP parallel threading within each MPI instance (still a work in progress).
- Support for arbitrary triclinic lattices and orientations thereof.
- Arbitrary order multipoles supported (still a work in progress).
- Memory for coordinates and forces is taken directly from the caller's pool, avoiding copies.
helPME-py and helPME are distributed under the BSD-3-clause open source license, as described in the LICENSE file in the top level of the repository. Some external dependencies are used that are licensed under different terms, as enumerated below.
- CMake required if building the code (BSD-3-clause license).
- FFTW required to carry out fast Fourier transforms (GPL license).
- pybind11 required to build Python bindings (BSD-3-clause license).
- OpenMP for threading (licenses vary).
- MPI for multiprocessing (BSD-3-clause license).
- BLAS for using optimized linear algebra routines (licenses vary).
- MKL for using optimized linear algebra routines (ISSL license).
- Catch2 required for unit testing (BSL license).
- gcovr for generating coverage reports (BSD-3-clause license).
- Sphinx required for generating documentation (BSD-2-clause license).
- Doxygen required for generating C++ documentation (GPL-2.0 license).
- LaTeX for generating PDF documentation (LPPL license).
- Breathe for rendering Doxygen output with Sphinx (BSD-3-clause license).
- Exhale for summarizing Doxygen output rendered with Breathe (BSD-3-clause license).
- Furo theme for Sphinx documentation (MIT license).
helPME-py is written in C++17, and should work with any modern C++ compiler. NumPy is a required dependency for the Python API.
Andrew C. Simmonett (NIH) Lori A. Burns (GA Tech) Daniel R. Roe (NIH) Bernard R. Brooks (NIH)
John P. Pederson (GA Tech)