Skip to content

johnppederson/helpme-py

 
 

Repository files navigation

helPME-py: A Python Utility for Particle Mesh Ewald Based on helPME

C C++ Python License

Build Coverage Deployment Docs

About

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.

Features

  • 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.

License

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.

Dependencies

Required for Building

Optional for Building

Required for Testing

Optional for Testing

Required for Documentation

Optional for Documentation

Requirements

helPME-py is written in C++17, and should work with any modern C++ compiler. NumPy is a required dependency for the Python API.

helPME Authors

Andrew C. Simmonett (NIH) Lori A. Burns (GA Tech) Daniel R. Roe (NIH) Bernard R. Brooks (NIH)

helPME-py Authors

John P. Pederson (GA Tech)

About

helPME-py: A Python Utility for Particle Mesh Ewald Based on helPME

Resources

License

Contributing

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C++ 91.5%
  • CMake 3.8%
  • Python 2.7%
  • C 2.0%