PyGBe: Python, GPUs and Boundary elements for biomolecular electrostatics


PyGBe—pronounced pigbē—is a Python code to apply the boundary element method for molecular-electrostatics calculations in a continuum model. It computes solvation energies for proteins modeled with any number of dielectric regions, which is relevant in calculations of protein binding affinity, protein-surface interaction, acid-dissociation contants, among other applications. The mathematical formulation follows Yoon and Lenhoff (1990) for solving the Poisson-Boltzmann equation of the implicit-solvent model in integral form.

PyGBe achieves both algorithmic and hardware acceleration, as detailed in Cooper, Bardhan, and Barba (2014). The solution algorithm uses a Barnes-Hut treecode from Barnes and Hut (1986) to accelerate each iteration of a GMRES solver to O(N logN), for N unknowns. It exploits NVIDIA GPU hardware on the most computationally intensive parts of the code using CUDA kernels in the treecode, interfacing with PyCUDA (see Klöckner et al. (2012)). Some parts of the code are written in C++, wrapped using SWIG.


Barnes, J., and P. Hut. 1986. “A Hierarchical O(NlogN) Force-Calculation Algorithm.” Nature 324 (December): 446–49. doi:10.1038/324446a0.

Cooper, Christopher D., Jaydeep P. Bardhan, and L. A. Barba. 2014. “A Biomolecular Electrostatics Solver Using Python, GPUs and Boundary Elements That Can Handle Solvent-Filled Cavities and Stern Layers.” Comput. Phys. Commun. 185 (3): 720–29. doi:10.1016/j.cpc.2013.10.028.

Klöckner, Andreas, Nicolas Pinto, Yunsup Lee, B. Catanzaro, Paul Ivanov, and Ahmed Fasih. 2012. “PyCUDA and PyOpenCL: A Scripting-Based Approach to GPU Run-Time Code Generation.” Parallel Computing 38 (3): 157–74. doi:10.1016/j.parco.2011.09.001.

Yoon, B J., and A. M. Lenhoff. 1990. “A Boundary Element Method for Molecular Electrostatics with Electrolyte Effects.” J. Comput. Chem. 11 (9): 1080–6. doi:10.1002/jcc.540110911.